C++ NLPIR+FRISO 项目的中文分词功能添加

几个月之前需要做一个在线教学资源的项目功能,,由于涉及到中文资源搜索,且自觉功力尚浅只好在线上查找前辈们的中文搜索的一些做法。

比较幸运的是,当时确实没用多久时间就找到LCTCLAS张华平博士的NLPIR中文分词系统PS:此处附下载地址 ?DocId=389 最初的时候,这个也比较好用,因为是win32项目,直接将解压好的win32下的动态库和依赖库放置在release/debug下,同时将解压后的Data文件夹放置在release/debug文件夹下。接下来在项目中配置好库的路径,之后就是自己调用库函数进行中文分词操作。

/*

m_InStr 需要进行中文分词的字符串

OutStr 分词操作之后的字符串数组

*/

BOOL ReadDIRFile::Cstr2strs(CString& m_InStr,vector<CString>& OutStr)

{if (!NLPIR_Init()){int ErrNum=GetLastError();return FALSE;}CString InStr,m_OutStr;//("陌生的人给我一支兰州"),m_OutStr;LPWSTR lpStr = m_InStr.GetBuffer();char TempSize[250];int iLength = WideCharToMultiByte(CP_ACP, 0, lpStr, -1, NULL, 0, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, lpStr, -1, TempSize, iLength, NULL, NULL);m_OutStr=NLPIR_ParagraphProcess(TempSize,0);while (-1!=m_OutStr.Find(‘ ‘)){int len=m_OutStr.Find(‘ ‘);OutStr.push_back(m_OutStr.Left(len));m_OutStr.Delete(0,len+1);if (0==m_OutStr.GetLength()){break;}}//增加对英文字符的特殊处理//for (int cout=0;cout<OutStr.size();cout++)//{//char TEMP=OutStr[cout].GetAt(0);//if (TEMP>0 || TEMP == 0)//{//OutStr[cout]=’ ‘+OutStr[cout];//}//}NLPIR_Exit();return TRUE;}

但是,万万没想到 7月1号,这天突然被告知,中文分词用不了了,单步运行之后发现是NLPIR_Init这个初始化函数搞的鬼,但是也搞不明白,7月之前项目一直运行的还不错。还在想,是不是早上那个万年难得一见的闰秒造成的(笑·~)。这个愁得呀,无奈之下又去找度娘,发现这个其实不是开源的,涉及到版权过期什么的。之后去大数据论坛那块发现也有同道中人。诶~想想,虽然,这个系统的分词还不错,但是不稳定呀,过段时间就用不了,这个就有点PS:绝对没有抱怨什么的,我等小菜鸟还谈不上对开源与否做过多评价。

无奈之下,只好另觅他法。

后又找到friso分词器,同样是想把这个东东用在自己的项目里面。在此附上friso下载地址:当然这个是前辈的一个版本发布贴,下载完之后又得考虑怎样把这东西搞成个能用的动态库,嘿嘿,菜鸟嘛,自己造不了轮子只好借花献佛喽,嗯,当然也能在借献之间体悟出一丝道理(哈哈,话有点多了),当然尊重原著此处附原帖地址:

1、新建工程

VS2010里新建工程

文件->新建->从现有的代码中创建项目(注意:把tst开头的.c文件去掉,此为测试代码)

2选择刚解压好的文件,里面找到src文件夹

3、项目类型:动态链接库

4、点击完成

5、项目属性上,加上时间优化

在release或debug的项目属性上->常规->全程优化->使用连接时间代码生成:

6、编译生成项目得到friso.dll和friso.lib

PS:盗图可耻!!(码完,小子就乖乖的匿了。。嘿嘿)

到此生成好friso的动态库,然后需要把库文件和头文件添加到项目中去(静态添加)。当然因为项目是纯C项目,所以在依据函数名寻址的时候与C++有所不同PS:大概是因为C++新增加了虚函数,多了个虚函数表,还有兼容了函数重载的特性。(哈哈,一会码完就去查清楚,评论区见)。所以,需要在

头文件 friso.h 的函数声明前后添加

#ifdef __cplusplusextern "C" {#endif

#ifdef __cplusplus}#endif

特此,配置完动态库,但是还是要配置friso的一个配置文件friso.ini

friso.charset = 1

friso.lex_dir = dict/GBK/

然后,将dict(应该是字典)文件夹放置到项目根目录下。

到此,应该算是大功告成!嘿嘿

(过程真的有点辛苦,小白一枚,自己搞不大出来只好东问问,西瞅瞅,但是,重要的是:自己明白自己在做什么!这个算是个笔记之类,后面有问题了再补充吧!奔跑吧~周末哈哈)

版权声明:本文为博主原创文章,未经博主允许不得转载。

同生天地间,为何我不能。

C++ NLPIR+FRISO 项目的中文分词功能添加

相关文章:

你感兴趣的文章:

标签云: