zoukankan      html  css  js  c++  java
  • 向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个字母。

    代词 

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

    处所词 

    取英语space的第1个字母。

    Tg

    时语素 

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

    t

    时间词 

    取英语time的第1个字母。

    u

    助词 

    取英语助词auxiliary

    Vg

    动语素 

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

    v

    动词

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

    vd

    副动词

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

    vn 

    名动词 

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

    w

    标点符号

    非语素字 

    非语素字只是一个符号,字母x通常用于代表未知数、符号。

    y

    语气词 

    取汉字“语”的声母。

    状态词 

    取汉字“状”的声母的前一个字母。

    五、分词效果

    搜索“美的”,我们的结果是前22条全部是与“美的”品牌相关的新闻,百度的结果是前4条是相关的,中搜的结果是前10条中有4条是相关的。

    附件:

  • 相关阅读:
    MySQL主从复制与主主复制
    Go语言mgo
    beego07----web博客
    mongo14-----group,aggregate,mapReduce
    mongo13----application set与分片结合
    mongo12---手动预先分片
    TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
    TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议
    TCP/IP详解学习笔记(2)-数据链路层
    TCP/IP详解学习笔记(1)-基本概念
  • 原文地址:https://www.cnblogs.com/dark_acme/p/5352025.html
Copyright © 2011-2022 走看看