这个工具是什么?先看看他的官方介绍吧:
NLPIR汉语分词系统(又名ICTCLAS2013),主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;支持GBK编码、UTF8编码、BIG5编码。新增微博分词、新词发现与关键词提取;张华平博士先后倾力打造十余年,内核升级10次。
[ICTCLAS版本已经更新,按照本博客操作可能遇到错误,最新ICTCLAS2014 c++版本使用方法请点击打开链接]
ICTCLAS2013 Java版本的使用方法 请点击点击打开链接
ICTCLAS2014 c++版本的使用方法 请点击点击打开链接
一,先下载c++版本:点击打开链接
解压文件后看到很多文件的:
图1. rar解压后的文件图
二,自己新建一个c++工程,在vs2010建名为ICTCLAS的工程。
建好后如图所示:
图2. 工程ICTCLAS根目录下的文件
三,将图1中的example-c文件夹(是整个文件夹,下同)复制到图2的ICTCLAS目录下,并且在ICTCLAS源文件中导入,同时将ICTCLAS.cpp文件下的_tmain函数注释掉。如图:
图3. 导入example-c文件夹下的Example-C.cpp文件
四,将图1中的include文件夹复制到图2的工程根目录下。否则,会出现下图所示错误。
图5. 复制include文件夹之前工程提示“无法打开源文件 "../../include/NLPIR.h"”
图6.复制include文件夹之后,工程ICTCLAS根目录下的文件
五,
1>将图1中的lib文件夹复制到图2工程根目录下面,并且在项目->添加现有项中导入lib下的NLPIR.lib文件。
图7. 导入lib文件夹下NLPIR.lib文件
2>将图1中bin文件夹下的NLPIR.dll文件复制到工程根目录下ICTCLAS目录下Debug目录下。
3>注释掉Example-C.cpp文件第9行语句。
#pragma comment(lib, "../../bin/NLPIR.lib") --> // #pragma comment(lib, "../../bin/NLPIR.lib")
(不要问我为什么,我只能告诉你,我也不知道。在我实验中不注释掉这句话,依然报错 fatal error LNK1104。)
如果上述3步没有做好,控制台可能会输出下图所示的错误:
图8. 导入库文件失败,控制台输出错误信息: LINK : fatal error LNK1104: 无法打开文件“../../bin/NLPIR.lib”
六,将图1中的Data文件夹和test文件夹复制到图2工程根目录下。
图9, 步骤六完成后工程根目录下的文件
七,运行工程,虽然控制台输出乱码信息,但是在test文件夹下出现test-utf8.TXT的分词结果文件test-utf8.TXT_result1.txt,test-utf8.TXT_result2.txt
图10,步骤七完成后,test目录下的文件(红色底线文件是新生成的结果文件)
如果想试试分gbk文件。可以将Example-C.cpp文件第322行的注释去掉。
//testNewWord(GBK_CODE); --> testNewWord(GBK_CODE);
在此我去掉322行注释,对333行进行注释。控制台输出新词识别结果,并且test文件夹下出现对应文件的分词结果文件。
图11,控制台输出新词识别结果
至此,工程已经可以对文件进行分词(注意需要制定文件的格式GBK_CODE,UTF8_CODE等)。
八,如果想对Example-C.cpp文件325行的句子进行分词。如下操作:
1>去掉Example-C.cpp文件327行的注释
//SplitGBK(sInput); --> SplitGBK(sInput)
********如果这个时候运行,我的工程会输出:ICTCLAS INIT FAILED! (初始化失败) 需要进行下面的步骤。
2>修改Example-C.cpp文件80行
if(!ICTCLAS_Init())//数据在当前路径下,默认为GBK编码的分词
-->
if(!ICTCLAS_Init("..",0))//数据在当前路径下,默认为GBK编码的分词
******** 个人经验:他的这个0 表示句子是GBK编码的
运行工程得到下面结果:
图12. 对输入的句子进行的分词结果
后记:
1>个人才疏学浅,比如第七步控制台为何输出乱码信息,目前还没解决。等以后解决在进行补充。
2>分词工具中的一些细化的使用:比如加载自己的词典,如何进行分词粒度调节,等以后有时间再进行研究。