您的位置:首页 > 其它

使用ICTCLA api进行中文分词实验的过程备忘

2011-02-21 21:23 369 查看
机器翻译最后一个大作业需要使用moses搭建一个机器翻译系统。其中有一步中要调用ICTCLA api实现中文分词,晚上稍稍熟悉了一下ICTCLA,大概了解了它的原理和使用方法,在此将使用它的方法和实验过程加以简述,以备忘。

我是在ubuntu 9.10系统中进行实验的,故而需要下载linux版本的ICTCLA。我首先下的是java版本,但是在ubuntu中使用时出现了问题,后换成了C++版本。在解决了实验过程中在C++版本里出现的问题之后,回头看java版本,之前遇到的是一样的问题。在此以c++版本为例说明。

完成一个汉语分词程序的过程:

首先,下载C++ ICTCLA for linux,解压,出现4个文件夹api, Demo, Doc和Simple。Demo中放的是在windows中使用的一个GUI的程序,Doc是说明文档,Sample是一个示例,api中存放的是使用C++ api是在工程中必须存在的一些文件和文件夹,可视作各个库和配置文件。

其次,建立一个C++工程CTestProject,在这个工程的文件夹里拷入上述api文件夹内的所有东东。下一步很重要,修改ICTCLAS50.h头文件,我不晓得为什么这个文件会有问题,不过改后确实好了。这个文件中需要注释掉各个函数声明之前的“ICTCLAS_API”,不然编译报错(我估计是开发人员忘记将这个字符串放入注释了)。

写程序test.cpp(一个简单的调用api进行中文分词的程序):

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "ICTCLAS50.h"

int main(int argc, char* argv[])

{

if(!ICTCLAS_Init())

{

printf("Init fails/n");

return -1;

}

ICTCLAS_FileProcess("c.txt", "Test_result.txt",CODE_TYPE_UTF8,0);

ICTCLAS_Exit();

return 0;

}
然后编译程序(我的C++程序名为test.cpp):

g++ test.cpp -Xlink libICTCLA50.a -o test

这里要加入一个编译时刻的链接libICTCLA50.a,不然无法找到头文件中声明的函数体实现。

编译成功,生成二进制文件test。./test运行,出现Init fails,检查ICTCLAS.log文件,其中记录了出错的日志,发现Data文件夹缺少东西,不要紧,如果我们不用用户字典的话只需要修改一下配置文件Configure.xml就可以了,将其中的UserDict, FieldDict以及UserDictPrior标签值置为Off。重新跑,依然出错,继续检查错误日志。发现Data文件夹中的部分文件命名的大小写有问题,将ictpos.map和pku.map的文件名改为ICTPOS.map和PKU.map即可~~这样修改后,程序应该可以跑成功了,就是将c.txt中的中文进行切分,结果记录在Test_result.txt文件中。

调用java api中遇到的问题大抵类似,只是少了修改头文件这一步骤,但是需要将用到的libICTCLA50.so文件拷入/usr/lib中。只要程序可以编译通过,运行时出现的问题都记录在了ICTCLAS.log中,可以随时查看问题所在,对症下药~~

以上简记,谨备忘~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: