为全文检索方案更新词库

在全文检索应用中,为了提高检索的准确性,我们时常需要定期去更新分词库,以

保证各种网络用语、火文(如“屌丝”、“高帅富”,“美富白”),能正确的被识别。 

目前对中文分词比较好的插件主要有ik-analyzer、mmseg、庖丁等。ik是目前使用比较广泛,而且作者刚对其进行了更新,目前已经能支持简单的分词歧义排除算法,详细情况请参见ik的开发网站。本文将以ik来测试新添加的分词。 

下面我们开始更新词库: 

1.从http://pinyin.sogou.com/dict/下载选择scel格式的细胞词库 

2.下载深蓝词库转换工具,将scel词库转化为无拼音纯汉字格式的txt文件 

3.用ultraedit将txt文件保存为无bom utf-8格式的文本 

这样我们已经将词库准备完毕了,接下来我们用ik来测试新词库的准确性。

 

首先在ik网站上下载IKAnalyzer2012_u6.zip文件,需要说明的是u6是支持lucene3.6的,IKAnalyzer 2012FF_hf1.zip 是支持lucene4的。

1.创建一个app java工程。

 

2.创建一个java类ParticipleTest,并加入IKAnalyzer2012_u6.jar、lucene-core-3.6.2.jar两个jar包。 

[java]  view plain copy print ?
  1. import java.io.IOException;  
  2. import java.io.StringReader;  
  3.   
  4. import org.apache.lucene.analysis.Analyzer;  
  5. import org.apache.lucene.analysis.TokenStream;  
  6. import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;  
  7. import org.wltea.analyzer.lucene.IKAnalyzer;  
  8.   
  9.   
  10. public class ParticipleTest {  
  11.   
  12.     /** 
  13.      * @param args 
  14.      * @throws IOException 
  15.      */  
  16.     public static void main(String[] args) throws IOException {  
  17.         // TODO Auto-generated method stub  
  18.         String keyWord = "11月3日,《人民日报》十八大特刊刊发《激发中国前行的最大力量》一文,文中写道:“市场经济的冲击余波未了,全球化、民主化、信息化的浪潮又不期叠加。分配焦虑、环境恐慌,拼爹时代、屌丝心态,极端事件、" +  
  19.                 "群体抗议,百姓、社会、市场、政府的关系进入‘敏感期’。”";  
  20.          IKAnalyzer analyzer = new IKAnalyzer();  
  21.          //使用智能分词  
  22.          analyzer.setUseSmart(true);  
  23.   
  24.          //打印分词结果  
  25.          printAnalysisResult(analyzer,keyWord);  
  26.     }  
  27.     /** 
  28.      * 打印出给定分词器的分词结果 
  29.      * @param analyzer 分词器 
  30.      * @param keyWord 关键词 
  31.      * @throws Exception 
  32.      */  
  33.     private static void printAnalysisResult(Analyzer analyzer, String keyWord) {  
  34.         System.out.println("当前使用的分词器:" + analyzer.getClass().getSimpleName());  
  35.         TokenStream tokenStream = analyzer.tokenStream("content"new StringReader(keyWord));  
  36.         tokenStream.addAttribute(CharTermAttribute.class);  
  37.         StringBuffer buffer=new StringBuffer();  
  38.         try {  
  39.             while (tokenStream.incrementToken()) {  
  40.                 CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);  
  41.                 buffer.append(charTermAttribute.toString()).append("|");  
  42.             }  
  43.             System.out.println(buffer.toString());  
  44.         } catch (IOException e) {  
  45.             // TODO Auto-generated catch block  
  46.             e.printStackTrace();  
  47.         }  
  48.     }  
  49. }  

 

3.将IKAnalyzer.cfg.xml、chinese_stopword.dic、stopword.dic、myext.dic放到src目录中。

 

4.修改IKAnalyzer.cfg.xml文件:

 

<properties>
 <comment>IK Analyzer 扩展配置</comment>
 <!--用户可以在这里配置自己的扩展字典-->
 <entry key="ext_dict">myext.dic;</entry>

 <!--用户可以在这里配置自己的扩展停止词字典-->
 <entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry>

</properties>

 

4.在myext.dic中添加“屌丝”,如下
屌丝
拼爹

 

5.运行结果比对

 

未更新词库的情况下:

 11月|3日|人民日报|十|八大|特刊|刊发|激发|中国|前行|最大|力量|一文|文中|写道|市场经济|冲击|余波|未了|全球化|民主化|信息化|浪潮|又|不期|叠加|分配|焦虑|环境|恐慌|拼|爹|时代|屌|丝|心态|极端|事件|群体|抗议|百姓|社会|市场|政府|关系|进入|敏感期|

 

更新完词库后:

11月|3日|人民日报|十八大|特刊|刊发|激发|中国|前行|最大|力量|一文|文中|写道|市场经济|冲击|余波|未了|全球化|民主化|信息化|浪潮|又|不期|叠加|分配|焦虑|环境|恐慌|拼爹|时代|屌丝|心态|极端|事件|群体|抗议|百姓|社会|市场|政府|关系|进入|敏感期|

 

 这说明我们更新的词库已经起作用了。

 

另外需要说明的是,

 //使用智能分词
         analyzer.setUseSmart(true);

如果值为false的情况下是最细粒分词

 

运行结果如下:

11|月|3|日|人民日报|人民日|人民|日报|十八大|十八|八大|特刊|刊发|激发|中国|前行|最大|大力|力量|一文|一|文|文中|写道|市场经济|市场|经济|冲击|余波|未了|全球化|全球|化|民主化|民主|化|信息化|信息|化|浪潮|又不|不期|叠加|分配|焦虑|环境|恐慌|拼爹|时代|屌丝|心态|极端|事件|群体|抗议|百姓|百|姓|社会|市场|政府|关系|进入|敏感期|敏感|期|

 

开发人员可以根据自己项目的情况酌情处理。


转自:http://blog.csdn.net/eagler006/article/details/8493564

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值