标签归档:ICTCLAS

中科院分词ICTCLAS5.0 配置错误处理

这个分词器调起来确实让人崩溃,今天想要把包名和dll文件换个路径,结果总是出现这样的问题:
Exception in thread “main” java.lang.UnsatisfiedLinkError: ictclas.NLPIR.NLPIR_Init([BI)Z

各种debug无果,后来发现包名改回kevin.zhang之后程序就好了。。大概是知识产权问题吧~下面转的是一个人总结的别的问题,希望大家少在调试工具上花费太多时间。
错误一:

配置路径如下:

运行ParagraphTest.java出现如下错误

Exception in thread “main” java.lang.UnsatisfiedLinkError: cn.yh.split.ICTCLAS50.ICTCLAS_Init([B)Z

at cn.yh.split.ICTCLAS50.ICTCLAS_Init(Native Method)

at cn.yh.split.Test.main(Test.java:19)

解决办法:

最开始尝试了很多方便,比如修改classpath,修改usr_path等,仍然会报错。后来将ICTCLAS50.java放在他给的例子里面有个包 ICTCLAS.I3S.AC下,结果运行正确。可能是开发ICTCLAS50为了保护版权考虑,如果不在package ICTCLAS.I3S.AC下就会报错。

错误二:

配置文件太多,包括Data和ICTCLAS50.dll等,我想把它放在一个特定的文件夹如ICTCLAS路径下。配置路径如下:

运行ParagraphTest.java出现如下错误

Exception in thread “main” java.lang.UnsatisfiedLinkError: no ICTCLAS50 in java.library.path

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)

at java.lang.Runtime.loadLibrary0(Runtime.java:823)

at java.lang.System.loadLibrary(System.java:1030)

at ICTCLAS.I3S.AC.ICTCLAS50.<clinit>(ICTCLAS50.java:9)

at cn.yh.split.ParagraphTest.main(ParagraphTest.java:9)

解决办法:

很明显,这是由于java.library.path不正确,只需要将导入dll时使用load导入绝对路径即可。修改ICTCLAS50.java里面的System.loadLibrary(“ICTCLAS50”)为 System.load(new File(“”).getAbsolutePath()+”\\ICTCLASConf\\ICTCLAS50.dll”);

修改后运行又出现以下错误:

Init Fail!

Cannot Open Configure file .\Configure.xml

有错误可知,是由于找不到.\Configure.xml文件,需要将配置文件根目录设置为new File(“”).getAbsolutePath()+”\\ICTCLASConf”。在初始化ICTCLAS_Init时,将new File(“”).getAbsolutePath()+”\\ICTCLASConf”.getBytes(“GB2312”)作为参数传递就可以正确运行了。

错误三:

若修改后运行仍然出现错误:

Init Fail!

刷新项目,发现根目录多了一个ICTCLAS.log的文件,打开文件内容,能够得到错误信息:

Default Path : .

start lic check.

License file .\user.lic can not open!

表示还需要user.lic也再根目录下面。将user.lic一道根目录下。

修改后运行在此出现错误:

Init Fail!

重新打开ICTCLAS.log文件,得到错误信息:

Default Path : .

start lic check.

License succeed!Failed to open .\Data\character.idx

Cannot open file .\Data\character.idx.

则表示没有找到Data文件夹,由于我们将Data放在了ICTCLASConf目录,故需要设置Configure.xml的<DataPath>Data</DataPath>//Data文件夹路径一项为指定目录。