2014/6/5
首先中文分词这个事真的很难搞。
其实在整个项目中每次配置中文分词都会出现很多错误,一开始是在自己的机器小批量测试,等移植到服务器上时,发现会出现很多错误,以至于错误一样,解决方法不同。有点崩溃啊。。。
中文分词使用的地方:
输入查询框,生成分词的topics。
Configure.xml:配置管理文件
ICTCLAS50.dll:ICTCLAS5.0动态链接库
ICTCLAS50.h: ICTCLAS5.0头文件
ICTCLAS50.lib: ICTCLAS5.0 Library
libICTCLAS50.so: ICTCLAS5.0 Library
user.lic 用户License文件,表明用户身份,必不可少,不得更改。
配置:
ICTCLAS文件夹拷贝到src目录下,其它的文件夹和文件全部拷贝到工程目录下,包括:Data、Configure.xml、ICTCLAS_I3C_AC_ICTCLAS50.h、ICTCLAS50.dll、ICTCLAS.h、 ICTCLAS50.lib、libICTCLAS50.so、user.lic
参考:http://blog.csdn.net/heyu158/article/details/12680183 中科院分词ICTCLAS5.0_JNI 使用方法
http://blog.csdn.net/caimo/article/details/7686872ICTCLAS2011中文分词在java的web项目中的使用
将分词的配置文件都放在galagosearch-core目录下
handleSearch()函数为列表显示,q为查询框内容
SplitWord splitword=new SplitWord();
String displayQuery0=scrub(request.getParameter("q"));//分词前
String displayQuery = splitword.testICTCLAS_ParagraphProcess(displayQuery0);//分词后
SearchResult()为查询结果
配置错误:
1、Init Fail!
没有找到分词库,将Data放在根目录下
2、如果换个workspace的话,中文分词经常会出现错误,基本上都是路径的问题no ICTCLAS50 in java.library.path。即加载库文件和Data文件夹、用户授权文件user.lic的错误。
按照网上的方法更改ICTCLAS.I3S.AC.ICTCLAS50.java,把System.loadLibrary("ICTCLAS50")改为
System.load("E:/douban/workspaces/SocialBook2/ICTCLAS50.dll");
然后再修改测试类中的testICTCLAS_ParagraphProcess()方法的argus的值,告诉ICTCLAS,你改变了工程目录。
System.load("E:/douban/workspaces/SocialBook2/ICTCLAS50.dll");
如果再不成功,在根目录下新建文件夹config,将Data、Configure.xml等文件放在config中
System.load("E:/douban/workspaces/SocialBook2/ICTCLAS50.dll");
System.load("E:/douban/workspaces/SocialBook2/ICTCLAS50.dll");
参考:http://summerbell.iteye.com/blog/1258509Ubuntu下ICTCLAS JNI的使用
有时候,确实是还不成功,今天往服务器上测试的时候,提示这样的错误。
然后我就又重新配置了一下tomcat
Windows-preferences-tomcat把路径添加上去。发现tomcat没有temp文件,就手动新建了一个。
whereis tomcat7
/etc/tomcat7 /usr/share/tomcat7两个目录
接着又把分词需要的文件,除了ICTCLAS的其他七个全部都拷贝到tomcat/bin目录下。
又出错:libstdc++.so.6:connot open shared object file: No such file or directory。。。。ELF class之类的错误
apt-get install libstdc++5
然后运行成功。
3、Init Fail!
Cannot Open Configure file .\Configure.xml
是由于找不到.\Configure.xml文件,需要将配置文件根目录设置为new File("").getAbsolutePath()+"\\ICTCLASConf";。在初始化ICTCLAS_Init时,将new File("").getAbsolutePath()+"\\ICTCLASConf".getBytes("GB2312")作为参数传递就可以正确运行了。
在SplitWord类中初始化时
String argu=new File("").getAbsolutePath();还是提示错误Cannot Open Configure file
String argu = "/home/zzj/Workspaces/SocialBook2";(Configure.xml的目录)成功。
参考:http://gdhapple.blog.163.com/blog/static/12685791720122832029133/ 中科院分词ICTCLAS5.0 配置错误处理
4、调用galago显示结果到网页上时,就是一个完整的web项目,发现输入一次查询可出结果,等再输入查询时,分词就出错,分词内容为空。
调用的分词函数:testICTCLAS_ParagraphProcess(String sInput)
一开始因为有越界情况,所以把初始化放在了函数外面,但是这样会出现第二次以后的查询没有结果,就需要初始化,所以再把初始化移到函数内。
ICTCLAS50 testICTCLAS50 = new ICTCLAS50();
String argu = ".";
//初始化
if (testICTCLAS50.ICTCLAS_Init(argu.getBytes("GB2312")) == false)
{
System.out.println("Init Fail!");
return;
}