读书人

Lucene4.3开发之第四步之洗心革面(四)

发布时间: 2013-08-11 22:22:29 作者: rapoo

Lucene4.3开发之第四步之脱胎换骨(四)
为防止,一些小网站私自盗用原文,请支持原创
原文永久链接:http://qindongliang1922.iteye.com/blog/1922742

前面几章笔者把Lucene基本入门的任督二脉给打通了,从此篇开始,就开始进行Lucene的进阶开发了,那么首先摆在我们面前的第一个必须要解决的问题,就是关于中文分词的问题,因为Lucene毕竟是国外的大牛们开发的,显然会比较侧重英文文章,不过还好,在Lucene的下载包里同步了SmartCN的分词器针对中文发行的,每一次Lucene有新的版本发行,这个包同时更新。

笔者比较推荐的中文分词器是IK分词器,在进入正式的讲解之前,我们首先对Lucene里面内置的几个分析器做个了解.



添加扩展词库后运行结果如下:


添加禁用词库后运行结果如下:

添加同义词库后运行结果如下:
package com.ikforlucene;import java.io.IOException;import java.io.Reader;import java.util.HashMap;import java.util.Map;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.Tokenizer;import org.apache.lucene.analysis.synonym.SynonymFilterFactory;import org.apache.solr.core.SolrResourceLoader;import org.wltea.analyzer.lucene.IKTokenizer;/** * 可以加载同义词库的Lucene * 专用IK分词器 *  *  * */public class IKSynonymsAnalyzer extends Analyzer { @Overrideprotected TokenStreamComponents createComponents(String arg0, Reader arg1) {Tokenizer token=new IKTokenizer(arg1, true);//开启智能切词Map<String, String> paramsMap=new HashMap<String, String>();paramsMap.put("luceneMatchVersion", "LUCENE_43");paramsMap.put("synonyms", "E:\\同义词\\synonyms.txt");SynonymFilterFactory factory=new SynonymFilterFactory(paramsMap); SolrResourceLoader loader=new SolrResourceLoader("");try {factory.inform(loader);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} return new TokenStreamComponents(token, factory.create(token));}}

关于同义词部分的使用,各位道友,可以先去官网上下载源码,然后将此同义词扩展部分放进去即可,非常简单方便。
1 楼 ansjsun 昨天 不错。。写的很详细。。还有一种情况
假如我词典中有词

“中国银行”---》搜索“中国”的时候是出不来的。。想听听楼主的解决方案 2 楼 qindongliang1922 昨天 ansjsun 写道不错。。写的很详细。。还有一种情况
假如我词典中有词

“中国银行”---》搜索“中国”的时候是出不来的。。想听听楼主的解决方案


关于中国银行这个词,建议开启最细粒度切分,可以切分成,中国,银行,中国银行,可以解决此类问题 3 楼 ansjsun 20 小时前 qindongliang1922 写道ansjsun 写道不错。。写的很详细。。还有一种情况
假如我词典中有词

“中国银行”---》搜索“中国”的时候是出不来的。。想听听楼主的解决方案


关于中国银行这个词,建议开启最细粒度切分,可以切分成,中国,银行,中国银行,可以解决此类问题

那"旅游和服务"-->会被分成--旅游/和服/服务

又该怎么解决呢? 4 楼 qindongliang1922 12 小时前 ansjsun 写道qindongliang1922 写道ansjsun 写道不错。。写的很详细。。还有一种情况
假如我词典中有词

“中国银行”---》搜索“中国”的时候是出不来的。。想听听楼主的解决方案


关于中国银行这个词,建议开启最细粒度切分,可以切分成,中国,银行,中国银行,可以解决此类问题

那"旅游和服务"-->会被分成--旅游/和服/服务

又该怎么解决呢?


我觉得如果这是一篇没有和和服有关的东西,那么可以把和服作为禁用词库里,或者把和作为禁用词处理,请教一下这种问题在ansj里面怎么处理?

读书人网 >编程

热点推荐