paoding下载
http://code.google.com/p/paoding/
paoding分词的默认配置
paoding-analysis-default.properties
配置全局的规则,{字典目录,切词规则}
paoding分词的字典指定
paoding-dic-home.properties
paoding自己的字典文件paoding/dic
x-noise-*.dic是过滤字典,存放分词时过滤词和字;其他dic是定义一个完整的词。
paoding分词的切词策略
paoding-knives.properties
paoding/dic/.compiled目录是生成二进制字典的目录,每次字典,过滤字典添加新词的时候,需要删除,运行paoding分词的时候会重新生成新的字典。
net.paoding.analysis.dictionary包目录维护字典的类
net.paoding.analysis.knife包目录定义了一些分词策略
net.paoding.analysis.knife.FileDictionaries
程序分词时,主要加载的字典
/** * 中文字典缓存根据地,为{@link CJKKnife}所用。<br> * 从本对象可以获取中文需要的相关字典。包括词汇表、姓氏表、计量单位表、忽略的词或单字等。 * <p> * * @author Zhiliang Wang [[email protected]] * * @see CJKKnife * * @since 1.0 */ public class FileDictionaries implements Dictionaries { // ------------------------------------------------- protected Log log = LogFactory.getLog(this.getClass()); // ------------------------------------------------- /** * 词汇表字典 */ protected Dictionary vocabularyDictionary; /** * lantin+cjk的词典 */ protected Dictionary combinatoricsDictionary; /** * 姓氏字典 * */ protected Dictionary confucianFamilyNamesDictionary; /** * 忽略的单字 */ protected Dictionary noiseCharactorsDictionary; /** * 忽略的词语 * */ protected Dictionary noiseWordsDictionary; /** * 计量单位 */ protected Dictionary unitsDictionary;
//分词 private String[] wordSegmentation(String text) { //应该用一个全局变量,可以复用 Analyzer analyzer = new PaodingAnalyzer(); List<String> tags = new ArrayList<String>(); TokenStream tokenStream = analyzer.tokenStream("text", new StringReader(text)); CharTermAttribute termAtt = (CharTermAttribute) tokenStream .getAttribute(CharTermAttribute.class); try { while (tokenStream.incrementToken()) { tags.add(termAtt.toString()); } } catch (IOException e) { e.printStackTrace(); } String[] asdfasdf = new String[tags.size()]; tags.toArray(asdfasdf); return asdfasdf; }