向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条是相关的。
附件:
转载于:https://www.cnblogs.com/dark_acme/p/5352025.html
向Lucene增加中文分词功能相关推荐
- 如何在基于Lucene的中文分词器中添加自定义词典(如Paoding、mmseg4j、IK Analyzer)...
如何在基于Lucene的中文分词器中添加自定义词典(如Paoding.mmseg4j.IK Analyzer) 2013-07-08 21:54:29| 分类: 计算机 |字号 订阅 1. 使用Pa ...
- Lucene加中文分词paoding调研结果
Lucene加中文分词paoding调研结果 因为项目原因,调研了下全文检索.网上开源的最流行的检索好像是lucene,nutch据说是稳定性有待测试,所以没试.需要说明的是我要做的这个全文检索是搜索 ...
- Lucene.net中文分词探究
一.中文分词方式: 中文分词几种常用的方式: A. 单字分词 单字分词,顾名思义,就是按照中文一个字一个字地进行分词.如:我们是中国人,效果:我/们/是/中/国/人. B. 二分法 二分法,就是按两个 ...
- Lucene支持中文分词代码实现
支持中文分词 分析器(Analyzer)的执行过程 如下图是语汇单元的生成过程: 从一个Reader字符流开始,创建一个基于Reader的Tokenizer分词器,经过三个TokenFilter生成语 ...
- (转)全文检索技术学习(三)——Lucene支持中文分词
http://blog.csdn.net/yerenyuan_pku/article/details/72591778 分析器(Analyzer)的执行过程 如下图是语汇单元的生成过程: 从一个 ...
- 基于Tire树和最大概率法的中文分词功能的Java实现
对于分词系统的实现来说,主要应集中在两方面的考虑上:一是对语料库的组织,二是分词策略的制订. 1. Tire树 Tire树,即字典树,是通过字串的公共前缀来对字串进行统计.排序及存储的一种树形结构 ...
- [更新中]Lucene.net,中文分词技术 ICTCLAS研究
http://groups.google.com/group/ictclas http://blog.csdn.net/sinboy/archive/2006/03/12/622596.aspx ht ...
- lucene可用中文分词IKAnalyzer,maven pom下载代码及配置文件
1.pom代码 <dependency><groupId>com.janeluo</groupId><artifactId>ikanalyzer< ...
- 基于Lucene的中文文本分词
王继明,杨国林 (内蒙古工业大学信息工程学院,呼和浩特010051) 摘要:中文文本分词技术是文本挖掘领域的一个重要分支,在中国仍然处于发展阶段.Apache Jakarta的开源工程Lucene是一 ...
最新文章
- 悠悠二十载,Nginx创始人Igor宣布离职
- mysql5.5.28安装详最后一个步骤时为啥一直转_mysql5.7.28下载、安装、登陆步骤详解...
- Win7上防火墙开放FTP服务以及ping解决方案
- Java实例_综合实践3.K-Means聚类算法
- android 编译报错,android avc 编译报错neverallow问题查找
- TwoSum,从O(n^2)到O(nlogn)再到O(n)
- LINUX下的tty,console与串口分析
- 团队行为心理学读书笔记(8)绩效考核背后的行为心理学
- 比特大陆裁员 85%,区块链行业彻底入深冬
- JAVA程序员面试32问(附答案)(转载)
- struts入门实例
- idea回到上一个光标位置
- python识别重影验证码_python+opencv实现移动侦测(帧差法)
- 服务器怎么设置自动连接wifi,笔记本无线网络连接IP地址设置(自动获取IP)
- 数据库的schemas(模式)
- 基层管理者项目管理二三事
- 电钻、电锤、电镐的区别
- ThinkPad E545连WiFi教程(系统:ubuntu-20.04.3-live-server,无线网卡:BCM34142)
- C++ 中的指针参数传递和引⽤参数传递
- 互联网流量,让天下充满难做的生意
热门文章
- 怎么安装python3-如何装python3
- python编程小游戏-python编程游戏有哪些
- python3入门书籍-Python学习路上不可或缺的3本书籍【经验分享】
- python while循环语句-Python While 循环语句
- python代码示例下载-Python下载网易云歌单歌曲的示例代码
- 在哪里能收到python实例代码-用python做一个搜索引擎(Pylucene)的实例代码
- python安装包-Python软件包的安装(3种方法)
- python画图哆啦a梦-python 绘制哆啦A梦
- python使用什么注释语句和运算-怎么使用python注释语句
- python用途与前景-2019年Python就业及发展前景如何 看完你就清晰了