向Lucene增加中文分词功能

一、分词功能介绍

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

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

二、执行方法

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

>java "-Ddic.dir=D:/lg/work/SSeg/Dic" -classpath D:\JAVA\lib\lucene-1.4.jar;D:\JAVA\lib\seg.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


标点符号


x


非语素字


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


y


语气词


取汉字“语”的声母。


z


状态词


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

五、分词效果

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

附件:

时间: 2024-08-27 02:03:07

向Lucene增加中文分词功能的相关文章

Lucene的中文分词器IKAnalyzer

分词器对英文的支持是非常好的. 一般分词经过的流程: 1)切分关键词 2)去除停用词 3)把英文单词转为小写 但是老外写的分词器对中文分词一般都是单字分词,分词的效果不好. 国人林良益写的IK Analyzer应该是最好的Lucene中文分词器之一,而且随着Lucene的版本更新而不断更新,目前已更新到IK Analyzer 2012版本. IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.到现在,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时

Lucene基础(三)-- 中文分词及高亮显示

Lucene分词器及高亮 分词器 在lucene中我们按照分词方式把文档进行索引,不同的分词器索引的效果不太一样,之前的例子使用的都是标准分词器,对于英文的效果很好,但是中文分词效果就不怎么样,他会按照汉字的字直接分词,没有词语的概念. 使用分词的地方只需要把Analyzer实例化成我们第三方的分词器即可 中文分词有很多,这里使用IKAnalyzer 为例, 下载地址 https://git.oschina.net/wltea/IK-Analyzer-2012FF 现在下来后里面有一篇教程. 高

(转)Lucene中文分词图解

本文记录Lucene+Paoding的使用方法图解: 一.下载Lucene(官网:http://archive.apache.org/dist/lucene/java/)本文中使用的是:2.9.4,下载后解压,Lucene所需要的基本jar文件如下列表: lucene-core-2.9.4.jar                   Lucene核心jar lucene-analyzers-2.9.4.jar            Lucene分词jar lucene-highlighter-2

搜索引擎系列四:Lucene提供的分词器、IKAnalyze中文分词器集成

一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在pom.xml里面引入如下依赖 <!-- lucene 核心模块 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId&

百度网盘搜索源码,新加分词功能,内容相关度聚合更高

百度网盘搜索源码说明: 最佳适用环境:linux(如果不是linux系统,win系统也可以,但是php天生就是跑在linux上的,linux上跑php性能不是win系统可以比拟的) 源码说明:php+mysql 关于前端:前端是基于bootstrap框架. 关于广告位:本程序是采用伪静态地址访问,可以一键增加广告位. 关于采集源:采集源是直接采集百度网盘的,这样可以避免有些失效资源问题等等. 关于程序内核:程序全部为自己开发,非套用市面上开源内核,自主开发的程序专门适用于存储云盘亿级数据,个人看

Solr5.5.1 IK中文分词配置与使用

前言 用过Lucene.net的都知道,我们自己搭建索引服务器时和解决搜索匹配度的问题都用到过盘古分词.其中包含一个词典. 那么既然用到了这种国际化的框架,那么就避免不了中文分词.尤其是国内特殊行业比较多.比如油田系统从勘探.打井.投产等若干环节都涉及一些专业词汇. 再像电商,手机.手机配件.笔记本.笔记本配件之类.汽车,品牌.车系.车型等等,这一系列数据背后都涉及各自领域的专业名次,所以中文分词就最终的目的还是为了解决搜索结果的精确度和匹配度的问题. IK搜索预览 我的univeral Cor

Apache Lucene 几种分词系统

1. StopAnalyzer StopAnalyzer能过滤词汇中的特定字符串和词汇,并且完成大写转小写的功能. 2. StandardAnalyzer StandardAnalyzer根据空格和符号来完成分词,还可以完成数字.字母.E-mail地址.IP地址以及中文字符的分析处理,还可以支持过滤词表,用来代替StopAnalyzer能够实现的过滤功能. 3. SimpleAnalyzer SimpleAnalyzer具备基本西文字符词汇分析的分词器,处理词汇单元时,以非字母字符作为分割符号.

Spark 大数据中文分词统计(三) Scala语言实现分词统计

Java版的Spark大数据中文分词统计程序完成之后,又经过一周的努力,把Scala版的Spark 大数据中文分词统计程序也搞出来了,在此分享给各位想学习Spark的朋友. 如下是程序最终运行的界面截图,和Java版差别不大: 如下是Scala工程结构: 当你在工程主类文件WordCounter.scala上单击右键,选择Run As Scala Application: 然后选择唐诗宋词进行分词统计,就会出现前面显示的分词结果. 工程代码已经上传CSDN:http://download.csd

对本地Solr服务器添加IK中文分词器实现全文检索功能

在上一篇随笔中我们提到schema.xml中<field/>元素标签的配置,该标签中有四个属性,分别是name.type.indexed与stored,这篇随笔将讲述通过设置type属性的值实现中文分词的检索功能 首先下载IK中文分词项目,下载地址https://code.google.com/archive/p/ik-analyzer/downloads?page=1, 其中除了含有jar包之外,还有三个相关的配置文件 第一步,将IKAnalyzer2012FF_u1.jar添加到项目的WE