搜索引擎:solr--搭建和分析中文分词器。上

上文文:一共介绍2种简单的中文分词,本人采用的是最新的solr4.9.0版本。

1:solr搜索引擎(4.9.0)本身只带中文分词器。建议初接触搜索引擎的采用这个方案,该分词器源码用java写的。

首先将下载解压后的solr-4.9.0的目录里面F:\大数据\solr\tools\solr-4.9.0\contrib\analysis-extras\lucene-libs找到lucene-analyzers-smartcn-4.9.0.jar文件

把这个分词jar包拷贝到项目中。

 第二步,配置schema.xml文件,把这个jar包加载到配置文件中。

 <fieldType name="text_solr" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
      <!-- 此处需要配置主要的分词类 -->
        <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
         <!--
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory"/>
         -->
         <!-- in this example, we will only use synonyms at query time
         <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
         -->
        <filter class="solr.SmartChineseWordTokenFilterFactory"/>
       </analyzer>
       <analyzer type="query">
       <!-- 此处配置同上 -->
         <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
         <!--
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
         <filter class="solr.LowerCaseFilterFactory"/>
         -->
        <filter class="solr.SmartChineseWordTokenFilterFactory"/>
       </analyzer>
</fieldType>

配置之后 重启服务器。访问solr--从网上借了个图。。不得不说现在的solr4.9版本很先进了。当初公司用的solr3.6 一把眼泪的。。如下图:





刚我做了一个小测试。从上图来看,看这7个字‘中华人民共和国’这7个字明显没有分词切割。分析其分词效果,可以发现这条语句分词效果不是很。。。可见自带的分词器的算法不是很...  一般自带都能理解。咱就不对其算法进行分析了。


2:接下来我们分析用的比较多的开源中文分词器IK Analysis

   lucene的分词基类是Analyzer,所以IK提供了Analyzer的一个实现类IKAnalyzer。首先,我们要实例化一个IKAnalyzer,它有一个构造方法接收一个参数isMaxWordLength,这个参数是标识IK是否采用最大词长分词,还是采用最细粒度切分两种分词算法。实际两种算法的实现,最大词长切分是对最细粒度切分的一种后续处理,是对最细粒度切分结果的过滤,选择出最长的分词结果。

  IK 分词算法理解

根据作者官方说法 IK 分词器采用“正向迭代最细粒度切分算法”, 分析它 的源代码, 可以看到分词工具类 IKQueryParser 起至关重要的作用, 它对搜索 关键词采用从最大词到最小词层层迭代检索方式切分,比如搜索词:“中华人 民共和国成立了”, 首先到词库中检索该搜索词中最大分割词, 即分割为: “中 华人民共和国”和“成立了”, 然后对“中华人民共和国”切分为“中华人民”和“人 民共和国”,以此类推。最后,“中华人民共和国成立了”切分为:“中华人民 | 中华 | 华人 | 人民 | 人民共和国 | 共和国 | 共和 | 成立 | 立了”,当然, 该切分方式为默认的细粒度切分,若按最大词长切分,结果为:“中华人民共 和国 | 成立 | 立了”。 

 solr中,可以搭建很多种分词器。。只需要在之前配置的那个schema.xml文件中追加就行。配置方式大同小异。在网上下载最新的ik分词器,本人采用的是IK Analyzer 2012FF_hf1.zip

http://pan.baidu.com/s/1jGmR9iA


1、将IKAnalyzer2012FF_u1.jar放入webapps\solr\WEB-INF\lib下。

2、将IKAnalyzer配置文件IKAnalyzer.cfg.xml和stopword.dic放入webapps\solr\WEB-INF\classes目录下。

3、在schema.xml中添加IKAnalyzer配置,如下



  <!-- ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
   <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>


重启服务。发现:



中华人民共和国这7个字 分词效果极为明显,被分为各种常用的词组。具体算法下下次咱分析其源码。




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值