展会信息港展会大全

向Lucene增加中文分词功能
来源:互联网   发布日期:2011-09-09 15:54:36   浏览:13229次  

导读: 一、分词功能介绍 分词模块对于搜索的重要性不言而喻。例如,没有分词时,搜索和服会出现产品和服务,搜索海尔会出现海尔德,搜索华为会出现清华为何。所以有必要给文本增加词的边界信息以提高检索精确度。 猎兔全球首家推出支持Lucene的准确可用的中文分词...

  一、分词功能介绍

  分词模块对于搜索的重要性不言而喻。例如,没有分词时,搜索“和服”会出现“产品和服务”,搜索“海尔”会出现“海尔德”,搜索“华为”会出现“清华为何”。所以有必要给文本增加词的边界信息以提高检索精确度。

  猎兔全球首家推出支持Lucene的准确可用的中文分词模块。

  二、执行方法

  可以在命令行执行分词测试:

>java "-Ddic.dir=D:/lg/work/SSeg/Dic" -classpath D:JAVAliblucene-1.4.jar;D:JAVAlibseg.jar test.seg.result.CnTokenizer

  其中系统参数dic.dir指定数据文件路径,如:

  "-Ddic.dir=D:/lg/work/SSeg/Dic"

  或者编写一个用于测试的Jsp页面。

  三、调用接口

  seg.result.CnTokenizer,该类继承org.apache.lucene.analysis.Tokenizer。

  一个简单的使用例子是:

import java.io.Reader;
import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.LowerCaseFilter;
import org.apache.lucene.analysis.StopFilter;
import org.apache.lucene.analysis.TokenStream;
/**
* @author luogang
*
*/
public class CnAnalyzer extends Analyzer {
    //~ Static fields/initializers ---------------------------------------------
    /**
    * An array containing some Chinese words that are not usually
    * useful for searching.
    */
    private static String[] stopWords = {
       "www","的","和","与","时","在",
       "是","被","所","那","这","有",
       "将","会","为","对","了","过",
       "去"};
    //~ Instance fields --------------------------------------------------------
    /** stop word list */
    private Set stopSet;
    //~ Constructors -----------------------------------------------------------
    /**
    * Builds an analyzer which removes words in STOP_WORDS.
    */
    public CnAnalyzer() {
       stopSet = StopFilter.makeStopSet(stopWords);
    }
    /**
    * Builds an analyzer which removes words in the provided array.
    *
    * @param stopWords stop word array
    */
    public CnAnalyzer(String[] stopWords) {
       stopSet = StopFilter.makeStopSet(stopWords);
    }
    //~ Methods ----------------------------------------------------------------
    /**
    * get token stream from input
    *
    * @param fieldName lucene field name
    * @param reader input reader
    *
    * @return TokenStream
    */
    public final TokenStream tokenStream(String fieldName, Reader reader) {
       TokenStream result = new CnTokenizer(reader);
       return new StopFilter(result, stopSet);
    }
}

  四、输出结果介绍

  输出结果中的词性标注代码说明如下:

代码名称帮助记忆的诠释

Ag形语素形容词性语素。形容词代码为a,语素代码g前面置以A。

a形容词取英语形容词adjective的第1个字母。

ad副形词直接作状语的形容词。形容词代码a和副词代码d并在一起。

an名形词具有名词功能的形容词。形容词代码a和名词代码n并在一起。

b区别词取汉字“别”的声母。

c连词取英语连词conjunction的第1个字母。

Dg副语素副词性语素。副词代码为d,语素代码g前面置以D。

d副词取adverb的第2个字母,因其第1个字母已用于形容词。

e叹词取英语叹词exclamation的第1个字母。

f 方位词 取汉字“方”

g 语素 绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。

h 前接成分 取英语head的第1个字母。

i 成语 取英语成语idiom的第1个字母。

j 简称略语 取汉字“简”的声母。

k 后接成分

l 习用语 习用语尚未成为成语,有点“临时性”,取“临”的声母。

m 数词 取英语numeral的第3个字母,n,u已有他用。

Ng 名语素 名词性语素。名词代码为n,语素代码g前面置以N。

n 名词 取英语名词noun的第1个字母。

nr 人名 名词代码n和“人(ren)”的声母并在一起。

ns 地名 名词代码n和处所词代码s并在一起。

nt 机构团体 “团”的声母为t,名词代码n和t并在一起。

nz 其他专名 “专”的声母的第1个字母为z,名词代码n和z并在一起。

o 拟声词 取英语拟声词onomatopoeia的第1个字母。

p 介词 取英语介词prepositional的第1个字母。

q 量词 取英语quantity的第1个字母。

r 代词 取英语代词pronoun的第2个字母,因p已用于介词。

s 处所词 取英语space的第1个字母。

Tg 时语素 时间词性语素。时间词代码为t,在语素的代码g前面置以T。

t 时间词 取英语time的第1个字母。

u 助词 取英语助词auxiliary

Vg 动语素 动词性语素。动词代码为v。在语素的代码g前面置以V。

v 动词 取英语动词verb的第一个字母。

vd 副动词 直接作状语的动词。动词和副词的代码并在一起。

vn 名动词 指具有名词功能的动词。动词和名词的代码并在一起。

w 标点符号

 

赞助本站

人工智能实验室

相关热词: Lucene 增加 中文分 词功

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港