ictclas4j如何在eclipse中进行中文分词

来源:互联网 发布:360路由器访客网络 编辑:程序博客网 时间:2024/05/22 17:20
ICTCLAS是中科院计算所开发的中文分词程序包,在国内一直有着良好的口碑和很高的使用率。之前一直只有 C++的版本提供,而现在C#,Delphi和Java版本已经纷纷出炉。下面是java版的例子。

纯Java版本的ICTCLAS(即ictclas4j),下载地址:http://pan.baidu.com/s/1jGGFXNS(这是0.9.1版的,官网经常打不开,这是我在百度云盘的分享)

(本人存储位置为E:\ylx\软件\ictclas4j_0.9.1)

1、解压缩ictclas4j

①把Data文件夹整个拷贝到Eclipse项目的文件夹下

注:需要将Data改为data,且将data目录下的BigramDict.dct改为bigramDict.dct,与代码中类Segment保持一致(不知源代码为何没改??)

public Segment(int segPathCount) {this.segPathCount = segPathCount;logger.info("Load coreDict  ...");coreDict = new Dictionary("data\\coreDict.dct");logger.info("Load bigramDict ...");bigramDict = new Dictionary("data\\bigramDict.dct");logger.info("Load tagger dict ...");personTagger = new PosTagger(Utility.TAG_TYPE.TT_PERSON, "data\\nr", coreDict);transPersonTagger = new PosTagger(Utility.TAG_TYPE.TT_TRANS_PERSON, "data\\tr", coreDict);placeTagger = new PosTagger(Utility.TAG_TYPE.TT_TRANS_PERSON, "data\\ns", coreDict);lexTagger = new PosTagger(Utility.TAG_TYPE.TT_NORMAL, "data\\lexical", coreDict);logger.info("Load dict is over");}

②把bin目录下的org文件夹整个拷贝到你Eclipse项目的bin目录下

③把src目录下的org文件夹整个拷贝到Eclipse项目的src目录下

④导入外部包commons-lang-2.0.jar、log4j-1.2.17.jar

2、测试小程序

import org.ictclas4j.bean.SegResult;import org.ictclas4j.segment.Segment;public class Test {public static void main(String[] args) throws Exception{          Segment st = new Segment(1);          String line = "一块勤奋地漂亮的一块钱,/打造经济的航空母舰。ABCD.#$% Hello World!\n又一段文本123辆 !3.0";          SegResult sr = st.split(line);          System.out.println(sr.getFinalResult());          }  }

在网上看到很多例子还是用SegTag这个类,现在已经用Segment代替了。

运行结果如下:

一块/s 勤奋/a 地/u 漂亮/a 的/u 一/m 块/q 钱/n ,/w //nx 打造/v 经济/n 的/u 航空母舰/n 。/w ABCD.#$%/nx Hello/nx World/nx !/w 又/d 一/m 段/q 文本/n 123/m 辆/q

分词的结果是一个长长的String类数据,用空格区分出每个词,每个词还用/后面的英文标号标出了词性。

值得注意的地方:

①原文中其实有两个“一块”,一处是“一块勤奋”,这里很正确的识别为了副词,而后面的“一块钱”中的“一块”也正确的识别为数量词。
②阿拉伯数字正确识别为数词,包括小数形式的“3.0”。而英文和乱七八糟符号(包括那个不可见的换行符,你找到它在哪了吗?)则都被划为一类——/nx!
③测试文本中还有两个叹号,一个是英文半角的!,一个是中文全角的!,两者也都被正确识别为标点符号,但英文的句号“.“就被认为是/nx啦。
④测试文本中的空格被完全忽略。

3、遇到的问题:

①程序正常运行,但切分成了一个字一个字的

需要将java文件的编码格式设为gbk就ok了。

②有时会报错,应该是字符识别不了,报错如下:

Exception in thread "main" java.lang.NullPointerExceptionat org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:571)

打开../src/org/ictclas4j/bean中的Dictionary.java文件,修改getMaxMatch()函数,在

  for (int j = 0; j < wis.size(); j++) {  

之前加上如下语句,判断为空条件:

if (wis == null) {    return null; }

ok,现在就遇到这些问题。

1 0
原创粉丝点击