给Lucene加入性能更好的中文分词
转自:http://blog.donews.com/windshow/archive/2005/09/23/564655.aspx
Lucene本身的StandardAnalyzer提供了中文分词接口,不过其采用的为1-gram.
这种分词方法虽然不会损失任何索引信息,但是造成的索引垃圾太多,用户得到的查询结果中垃圾也是很多.
经过认真研究了Lucene的Analysis包,我写了一个TjuChineseAnalyzer,效果不错.
简要介绍一下:
TjuChineseAnlyzer 的功能强大,在中文分词方面使用JNI调用ICTCLAS(中国科学院,算法为隐马尔可夫模型)的java接口. 所以其在中文方面性能上同与ICTCLAS.其在英文分词上采用了Lucene的StopAnalyzer,可以去除 stopWords,而且可以不区分大小写,过滤掉各类标点符号.完全兼容Lucene的底层分词格式.
核心代码如下:
/**
*Author:zhangbufeng
* TjuAILab (天津大学人工智能实验室)
* 2005.9.23
*
* TjuChineseAnlyzer的功能相当强大,在中文分词方面由于其调用的为ICTCLAS的java接口.
* 所以其在中文方面性能上同与ICTCLAS.其在英文分词上采用了Lucene的StopAnalyzer,可以去除
* stopWords,而且可以不区分大小写,过滤掉各类标点符号.
*/
public final class TjuChineseAnalyzer extends Analyzer {
private Set stopWords;
/** An array containing some common English words that are not usually useful
for searching. */
//可以在此扩展English stop words和Chinese stop words
public static final String[] ENGLISH_STOP_WORDS = {
"a", "an", "and", "are", "as", "at", "be", "but", "by",
"for", "if", "in", "into", "is", "it",
"no", "not", "of", "on", "or", "s", "such",
"t", "that", "the", "their", "then", "there", "these",
"they", "this", "to", "was", "will", "with",
"我","我们"
};
/** Builds an analyzer which removes words in ENGLISH_STOP_WORDS. */
public TjuChineseAnalyzer() {
stopWords = StopFilter.makeStopSet(ENGLISH_STOP_WORDS);
}
/** Builds an analyzer which removes words in the provided array. */
public TjuChineseAnalyzer(String[] stopWords) {
this.stopWords = StopFilter.makeStopSet(stopWords);
}
/** Filters LowerCaseTokenizer with StopFilter. */
public TokenStream tokenStream(String fieldName, Reader reader) {
try{
ICTCLAS splitWord = new ICTCLAS();
String inputString = FileIO.readerToString(reader);
String resultString = splitWord.paragraphProcess(inputString);
return new StopFilter(new LowerCaseTokenizer(new StringReader(resultString)),stopWords);
}
catch (IOException e){
System.out.println("转换出错");
return null;
}
}
}
进行测试:
我用Junit进行了测试,效果很好.同时我用TjuChineseAnalyzer进行索引,查询,测试
效果都很好.
下边给出用TjuChineseAnalyzer切分的词语
原文:
体育讯 在被尤文淘汰之后,皇马主帅博斯克拒绝接受媒体对球队后防线的批评,同时还为自己排出的首发阵容进行了辩护。“失利是全队的责任,而不仅仅是后防线该受指责,”博斯克说,“我并不认为我们踢得一塌糊涂。”“我们进入了半决赛,而且在晋级的道路上一路奋
战。即使是今天的比赛我们也有几个翻身的机会,但我们面对的对手非常强大,他们踢得非常好。”“我们的球迷应该为过去几个赛季里我们在冠军杯中的表现感到骄傲。”博斯克还说。对于博斯克在首发中排出了久疏战阵的坎比亚索,赛后有记者提出了质疑,认为完全应该将队内的另一
名球员帕文派遣上场以加强后卫线。对于这一疑议,博斯克拒绝承担所谓的“责任”,认为球队的首发没有问题。“我们按照整个赛季以来的方式做了,对于人员上的变化我没有什么可说的。”对于球队在本赛季的前景,博斯克表示皇马还有西甲联赛的冠军作为目标。“皇家马德里在冠军
杯中战斗到了最后,我们在联赛中也将这么做。”
A Java User Group is a group of people who share a common interest in Java technology and meet on a regular basis to share technical ideas and information. The actual structure of a JUG can vary greatly - from a small number of friends and coworkers meeting informally in the evening, to a large group of companies based in the same geographic area. Regardless of the size and focus of a particular JUG, the sense of community spirit remains the same.
切分结果如下:
体育 讯 在 被 尤文淘汰 之后 皇 马 主帅 博斯克 拒绝 接受 媒体 对 球队 后防线 的 批评 同时 还 为 自己 排 出 的 首发 阵容 进行 了 辩护失利 是 全队 的 责任 而 不仅仅 是 后防线 该 受 指责 博斯克 说 并 不 认为 踢 得 一塌糊涂 进入 了 半决赛 而且 在 晋级的 道路 上 一路 奋 战 即使 是 今天 的 比赛 也 有 几 个 翻身 的 机会 但 面对 的 对手 非常 强大 他们 踢 得 非常 好的 球迷 应该 为 过去 几 个 赛季 里 在 冠军杯 中 的 表现 感到 骄傲 博斯克 还 说 对于 博斯克 在 首发 中 排 出 了 久疏 战 阵 的 坎比亚索 赛后 有 记者 提出 了 质疑 认为 完全 应该 将 队 内 的 另 一 名 球员 帕 文 派遣 上场 以 加强后卫 线 对于 这 一 疑 议 博斯克 拒绝 承担 所谓 的 责任 认为 球队 的 首发 没有 问题 按照 整个 赛季 以来 的 方式 做 了对于 人员 上 的 变化 没有 什么 可 说 的 对于 球队 在 本 赛季 的 前景 博斯克 表示 皇 马 还有 西 甲 联赛 的 冠军 作为目标 皇家 马德里 在 冠军 杯 中 战斗 到 了 最后 在 联赛 中 也 将 这么 做 java user group group people who share common interest java technology meet regular basis share technical ideas information actual structure jug can vary greatly from small number friends coworkers meeting informally evening large group companies based same geographic area regardless size focus particular jug sense community spirit remains same
评析:从结果可以看出其切分效果,过滤掉了stop words(包括英文和中文).去除所有的标点符号.
分享到:
相关推荐
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
Lucene4.7+IK Analyzer中文分词入门教程
来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器。 1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP) 2. 对数量词、地名、路名的...
支持lucene3的庖丁解牛分词器和字典,可直接调用
Lucene关于几种中文分词的总结
Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器 Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器
本文设计实现了一个中文分词模块,其主要研究目的在于寻找更为有效的中文词汇 处理方法,提高全文检索系统的中文处理能力.整个模块基于当前最流行的搜索引擎架构 Lucene,实现了带有歧义消除功能的正向最大匹配算法...
赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...
lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词
Lucene中文分词器组件,不错的。
lucene6.6中适配的拼音分词jar包以及ik中文分词jar包,以及自定义的分词词组包和停词包,可以实现lucene建立索引时进行拼音和中文的分词。
本压缩包的主要内容是Lucene分词器的demo版本,可以导入到程序中直接使用,包含Lucene分词使用的pom文件,使用前请注意修改存储地址。
Lucene.Net:使用eaglet的盘古分词进行分词和搜索实例
Lucene与中文分词技术的研究及应用Lucene与中文分词技术的研究及应用Lucene与中文分词技术的研究及应用
hanlp-lucene-plugin, HanLP中文分词Lucene插件,支持包括Solr在内的基于Lucene的系统
自己做的一个中文分词,可以用在MONO下。根据IKAnalyzer Java版本移植到C#。采用了Powercollection类库。
lucene搜索引擎中文分词器,版本2.0.4,强大的中文分词效果在其它中文分词器当中独领风骚
中文分词器: 1. http://code.google.com/p/ik-analyzer/ (IK_Analyzer_2012FF_hf1.zip) 2. https://code.google.com/p/mmseg4j/ (mmseg4j-1.9.1.v20130120-SNAPSHOT.zip) 查看分词库: ...
用java写的图形分词测试的小东西,用的分词器是: 来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器,其使用“正向全切分算法”,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I...
赠送jar包:lucene-analyzers-smartcn-7.7.0.jar; 赠送原API文档:lucene-analyzers-smartcn-7.7.0-javadoc.jar; 赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-...