做中文信息处理研究这一方向的人都知道,汉语的分词是研究的基础的基础,只有建立在分词之后的基础上才能进行下一步研究, 术语抽取,命名实体识别等等(当然,也有些研究并不需要建立在分词的基础之上)。
目前分词工具包有很多,而且大部分是开源的,具体有哪些可以参考下面这个网站,作者总结得比较好:
http://blog.csdn.net/hover_online/article/details/6963957
本人常用,也比较推崇的当然属中科院计算所研发的ICTCLAS分词工具包(官方下载地址:http://ictclas.nlpir.org/ 目前已经发布了2013版)。
本文的目的是介绍如何快速的在C++项目中使用ICTCLAS这个工具包。网上大部分介绍使用ICTCLAS的文章都是介绍如何在VS中配置动态链接库,本人嫌这样配置来配置去太麻烦,这样不利用新手快速学会使用ICTCLAS。(当然,在一个C++大项目中,最好的方式当然是在VS中配置啦,不过本人一般做就是在做论文实验时才用到ICTCLAS)。
好了,废话不多说了,下面进入正式内容:
一、下载ICTCLAS工具包(以2013版为例),解压后得到目录下有如下子目录:
这里只介绍我们用得到的目录和文件。doc目录很重要,里面有词性集的说明,还有ICTCLAS的使用说明文档,这是非常重要的。
bin目录中有名为NLPIR.dll的动态库文件,这是我们需要的。include目录里有NLPIR.h头文件,这也是我们需要用到的文件。Data目录里的所有内容都是我们需要的,所有整个Data目录就是我们需要的。
二、现在我们需要做的是把Data目录,bin目录下的NLPIR.dll,include目录下的NLPIR.h 这三样东西拷贝到我们C++工程目录下。
比如,本人建了的C++工程名为TerminologyExtractionUseCRF,拷贝后,它下面的文件结构如下图示:
(被选中的文件即为拷贝而来的,细心的人可能还看到了里面有个NLPIR.lib,这个文件是可拷贝,也可不可拷贝的,本人试过,没有它的存在一样能分词,如果你遇到什么意想不到的问题,可以考虑把它也拷贝进来。)
三、已经拷贝好了后,在C++文件中需要加上这样几行代码:
#include “NLPIR.h” //这是头文件
#pragma comment(lib,"NLPIR.lib") //没有分号哦,这是包含库文件
四、接下来,你就可以参考Doc目录下的使用说明文档进行随心所欲得使用ICTCLAS这个强大的工具包啦!
为了使你更清晰明白,我还是把我的main.cpp代码贴出来,让你看看ICTCLAS的初始化,退出,以及分词的代码吧。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#include "NLPIR.h"
#pragma comment(lib,"NLPIR.lib")
int main(int argc,char *argv[])
{
ifstream fin("36.txt",ios::in);
if(!fin){cout<<"36.txt file read error!"<<endl; return -1;}
string text,tempstr;
while (!fin.eof())
{
getline(fin,tempstr);
text += tempstr+"\r\n";
}
//cout<<text<<endl;
if (!NLPIR_Init())
{
cout<<"NLPIR_Init() error!"<<endl;
return -1;
}
string resulttext = NLPIR_ParagraphProcess(text.c_str(),1);
cout<<resulttext<<endl;
NLPIR_Exit();
return 0;
}