纯Java版本的ICTCLAS(即ictclas4j),下载地址:http://pan.baidu.com/s/1jGGFXNS(这是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.NullPointerException
	at 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,现在就遇到这些问题。
转载请注明,更多内容见:http://blog.csdn.net/hwwn2009/article/details/42103939
 
 
                  
                  
                  
                  
                            
本文详细介绍了如何使用Java版的ICTCLAS中文分词程序包,包括解压缩、配置和测试过程。通过实例展示了分词结果,并指出了常见问题及解决方法。
          
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					1464
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            