C++ NLPIR+FRISO 项目的中文分词功能添加
来源:互联网 发布:联想售后系统优化 编辑:程序博客网 时间:2024/05/23 19:14
几个月之前需要做一个在线教学资源的项目功能,由于涉及到中文资源搜索,且自觉功力尚浅只好在线上查找前辈们的中文搜索的一些做法。
比较幸运的是,当时确实没用多久时间就找到LCTCLAS张华平博士的NLPIR中文分词系统PS:此处附下载地址 http://ictclas.nlpir.org/newsdownloads?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下载地址:http://blog.csdn.net/wsplayer/article/details/38060179当然这个是前辈的一个版本发布贴,下载完之后又得考虑怎样把这东西搞成个能用的动态库,嘿嘿,菜鸟嘛,自己造不了轮子只好借花献佛喽,嗯,当然也能在借献之间体悟出一丝道理(哈哈,话有点多了),当然尊重原著此处附原帖地址:http://www.oschina.net/question/853816_135216
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 __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
特此,配置完动态库,但是还是要配置friso的一个配置文件friso.ini
friso.charset = 1
friso.lex_dir = dict/GBK/
然后,将dict(应该是字典)文件夹放置到项目根目录下。到此,应该算是大功告成!嘿嘿
(过程真的有点辛苦,小白一枚,自己搞不大出来只好东问问,西瞅瞅,但是,重要的是:自己明白自己在做什么!这个算是个笔记之类,后面有问题了再补充吧!奔跑吧~周末哈哈)
- C++ NLPIR+FRISO 项目的中文分词功能添加
- friso中文分词器
- friso中文分词器
- 【文本分类】friso中文分词器介绍(c 开源)
- NLPIR中文分词的java接口使用方法
- NLPIR中文分词 java
- NLPIR(ICTCLAS2016)分词系统添加用户词典功能
- NLPIR(ICTCLAS2016)分词系统添加用户词典功能
- friso分词器的应用
- c/c++运用nlpir进行自动化中文分词
- 如何用C语言(VisualStudio)调用NLPIR进行中文分词
- Friso-1.6.0 发布 - C语言高性能中文分词器,GBK支持
- friso-1.6.1 发布 - C语言高性能中文分词器-检测模式切分
- NLPIR中文分词系统之Java接口的使用
- 中科院NLPIR中文分词java版
- Python 中文分词 NLPIR 快速搭建
- NLPIR(ICTCLAS2013)中文分词系统应用在Web项目中
- LINUX C 下使用 nlpir 中英文分词
- 两个有序数组中找中位数或者第K大的元素
- cocos2dx的CC_CALLBACK是个什么宏
- ElasticSearch:从[FIELDDATA]Data too large错误看FieldData配置
- iOS中使用协议(protocol)的用法
- android长按home键流程 .
- C++ NLPIR+FRISO 项目的中文分词功能添加
- poj 3169 Layout 【差分约束】
- 使用NSClassFromString
- 九度1049:字符串去特定字符
- HDU 4462 Scaring the Birds (暴力枚举DFS)
- Linux(进程调度)学习参考链接收藏
- 学习mysql的点滴(1)
- 使用CSDN-markdown编辑器来编写自己的CSDN博客
- UITextField/文本输入框