c语言中文分词算法
没有挂网公布,需要咨询专业人士。
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。
C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普逊和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。
为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。
如何用C语言调用NLPIR进行中文分词
1.打开vs之后,按照下面的方式新建project。新建的工程名是text-segmentation。建好之后在你选择的那个目录会出现一个text-segmentation文件夹。
2.从nlpir官网下载相关资源,这里下载的是2013版本。下载地址:
3.将下载文件解压缩,找到其中的Data文件夹、bin文件夹中的NLPIR.dll文件、include文件夹中的NLPIR.h文件、lib文件夹
中的NLPIR.lib文件,将这四个东西复制到刚刚的text-segmentation文件夹中的text-segmentation文件夹下,如下
效果:
4.点击text-segmentation文件夹下的text-segmentation.sln,在vs中打开这个项目。按照如下方式将NLPIR.h文件加入到头文件中。
5.点击project – properties(快捷键ALT +
F7),按照下图所示的进行设置。别问我为什么这么设置,我也不懂,摸索了半天才摸索出来的,不这么设置就是搞不定。
6.在source里面新建程序新建c++源程序
7.接下来就可以在这里写代码了,下面附上一段我的代码作为例子。最关键的是前面的函数头部分,可以直接抄过去。
#ifndef OS_LINUX
#include
#pragma comment(lib, “NLPIR.lib”)
#endif
#include
#include
#include
#include
#include
#include “NLPIR.h”
#include
using namespace std;
void IfInit();//判断是否已经成功初始化
void IfExit();//是否成功退出
int main()
{
IfInit();//初始化程序
NLPIR_SetPOSmap(ICT_POS_MAP_SECOND);
int nitems;//
nitems=NLPIR_ImportUserDict(“H:\\sentence\\UserDict_manual.txt”);
NLPIR_SaveTheUsrDic();
cout”import “nitems”
words”endl;
//NLPIR_AddUserWord(“A股”);
//NLPIR_AddUserWord(“沪指”);
//int i;
//char s[100];
//char s2[100];
//ifstream infile;
////infile.open(“H:\\sentence\\files to break
word.txt”);
//infile.open(“C:\\Users\\pc\\Desktop\\temp\\file_to.txt”);
//ifstream infile2;
////infile2.open(“H:\\sentence\\files after break
word.txt”);
//infile2.open(“C:\\Users\\pc\\Desktop\\temp\\file_after.txt”);
//for(i=0;i717696;i++)//1798
//{
// if (i350000)
// {
// infile.getline(s,100);
// infile2.getline(s2,100);
// continue;
// }
// infile.getline(s,100);
// infile2.getline(s2,100);
// NLPIR_FileProcess(s,s2,0);
// couti+1endl;
//}
NLPIR_FileProcess(“try.txt”,”try_result.txt”,0);
IfExit();//退出
system(“pause”);
return 0;
}
void IfInit()//判断是否已经成功初始化
{
if(!NLPIR_Init(0,UTF8_CODE))
{
cout”Init fails”endl;
exit(EXIT_FAILURE);
}
else
{
cout”Init ok”endl;
}
}
void IfExit()//是否成功退出
{
if(!NLPIR_Exit())
{
cout”Exit fails”endl;
}
else
{
cout”Exit ok”endl;
}
}
8.若函数报错,可以去text-segmentation文件夹中的text-segmentation文件夹下查看log文件。常见的错误是Initial
Fail,这很可能是因为license过期了,解决方法可见
。
用c语言进行中文分词,给定一个词典,一篇文章,一个参照的utf8编码怎
//
// Wordsplit.cpp
//
// Target: Find all possible splitting of a sentence given a dictionary dict
// Howto: refer to main
//
// Created by Rachel on 14-8-16.
// Copyright (c) 2014年 ZJU. All rights reserved.
//
#include iostream
#include stdio.h
#include “vector”
#include set
#includeunordered_set
using namespace std;
class Wordsplit {
private:
vectorstring list;
bool match(string s, string cur_ele){
int l = cur_ele.length();
if (s.substr(0,l)==cur_ele) {
return true;
}
return false;
}
bool validate(string s, unordered_setstring dict){
//1. calculate all alphabets in the query
setchar alpha;
for (int i=0; is.length(); i++) {
alpha.insert(s[i]);
}
//2. calculate all alphabets in the dictionary
setchar beta;
unordered_setstring::iterator dict_it;
for (dict_it = dict.begin(); dict_it!=dict.end(); dict_it++) {
for (int i=0; i(*dict_it).length(); i++) {
beta.insert((*dict_it)[i]);
}
}
setchar::iterator it;
for (it = alpha.begin(); it!=alpha.end(); it++) {
if (beta.find(*it)==beta.end()) {
return false;
}
}
return true;
}
public:
string split(string s, unordered_setstring dict, string cur_str){
if (s.length()==0) {
list.push_back(cur_str.substr(0,cur_str.length()-1));
return s;
}
//coutsendl;
unordered_setstring::iterator it;
for (it=dict.begin(); it!=dict.end(); it++) {
if (match(s, (*it))) {
string tmp_str = cur_str;
string latter = s.substr(it-length(), s.length()-it-length());
cur_str += (*it) + ” “; // add current word to cur_str
cur_str += split(latter, dict, cur_str); // split remaining words
cur_str = tmp_str; //back to last status
}
}
return “no result”;
}
vectorstring main(string s, unordered_setstring dict) {
if (!validate(s, dict)) {
return list;
}
split(s, dict, “”);
return list;
}
};
int main()
{
Wordsplit s;
unordered_setstring L={“程序员”,”公务员”,”员”,”我”,”喜”,”做”,”程序”,”一”,”欢”,”喜欢”,”做一个”,”一个”};
vectorstring V = s.main(“我喜欢做一个程序员”, L);
vectorstring::iterator it;
for (it=V.begin(); it!=V.end(); it++) {
cout(*it)endl;
}
}
C语言 分词并显示 写函数?
void Input (char *str) {
char c;
int i = 0;
while ( (c = getchar()) != ‘\n’ i 81) {
* (str + i) = c;
i++;
}
}
int Split_Count (char *str, char **pStr) {
int count = 0, is_word = 0, j = 0;
char tmp[81];
for (int i = 0; i strlen (str); i++) {
if (* (str + i) == ‘ ‘) {
if (is_word == 1) {
ss:
* (tmp + j) = ‘\0’;
*pStr = (char *) malloc (strlen (tmp) * sizeof (char));
strcpy (*pStr, tmp); //调试了一下,到这行就出错
pStr++;
j = 0;
}
is_word = 0;
} else {
if (is_word == 0) {
count++;
}
* (tmp + j) = * (str + i);
j++;
is_word = 1;
if (i == strlen (str) – 1)
goto ss;
}
}
return count;
}