zoukankan      html  css  js  c++  java
  • solr 中文分词相关(转载)

    smartcn和ik的对比,来自http://www.cnblogs.com/hadoopdev/p/3465556.html

    一、引言:

      中文分词一直是自然语言处理的一个痛处,早在08年的时候,就曾经有项目涉及到相关的应用(Lunce构建全文搜索引擎),那时的痛,没想到5年后的今天依然存在,切分效果、扩展支持、业务应用等方面依然不甚理想。收费的版本不提了,原因自不必言表,开源版本中,发现之前曾经活跃的版本,大多已经没落(好几年没更新了),存活下来的寥寥无几。我是一个守旧的人,评估版本的选择有些保守,至少目前为止,只看1.0正式版本之后的版本,0.XX的不在考虑范围之内,用了一个周末的时间,对比了十多款的样子,个人感觉源于中科院ICTCLASsmartcnIKAnanlyzer效果还是不错的。

    二、结果对比

    2.1 原始文本

    "lucene分析器使用分词器过滤器构成一个"管道",文本流经这个管道成为可以进入索引最小单位,因此,一个标准的分析器有两个部分组成,一个是分词器tokenizer,它用于将文本按照规则切分为一个个可以进入索引的最小单位。另外一个是TokenFilter,它主要作用是对切出来的词进行进一步的处理(如去掉敏感词、英文大小写转换、单复数处理)等。lucene中的Tokenstram方法首先创建一个tokenizer对象处理Reader对象中的流式文本,然后利用TokenFilter对输出流进行过滤处理";
    2.2 smartcn

    lucen分析器使用分词过滤器构成一个管道文本流经这个管道成为可以进入索引单位因此一个标准分析器部分组成一个分词 oken用于文本按照规则切分一个可以进入索引单位另外一个 okenfilt主要作用出来进行进一步处理去掉敏感英文大小写转换复数处理lucen okenstram方法首先创建 oken对象处理 eader对象文本然后利用 okenfilt输出进行过滤处理

    2.3 IKanalyzer

    lucene分析器分析器使使用分词器分词过滤器过滤滤器构成一个管道文本流经这个管道成为可以进入索引最小单位因此一个标准分析器分析两个部分分组组成一个是一个分词器分词 okenizer它用用于文本按照规则切分分为一个个一个个个可以进入索引最小单位另外一个是一个 okenfilter主要作用用是切出来切出出来进行行进进一步进一一步处理去掉敏感英文大小写大小小写转换复数处理lucene okenstram方法首先创建一个 okenizer对象处理 eader对象流式文本然后利用 okenfilter输出流进进行过滤处理

     

    我的选择:虽然IK有很多碎片,但是可以提高查询的准确率。碎片带来的效果就是,需要占用更大的空间。最终仍然选择IK,原因如下:

    比如我输入"北京市美食",如果使用smartcn,将会分词为"北京市""美食",那么如果文档中存储的是"北京美食"就查询不到了。

    以下介绍solr 5.X版本中IK的配置,来自http://www.cnblogs.com/zhangweizhong/p/5593909.html

      1. 首先,下载IKAnalyzer 下载

        注意:以前老的IK 不支持Solr 5.3的版本 ,请注意下载最新的。

       

      2. ik的相关文件 拷贝到 webappssolrWEB-INFlib 目录下

       

      3. solr_homemycore1confschema.xml 增加如下配置

    <!-- 我添加的IK分词 -->

    <fieldType name="text_ik" class="solr.TextField">

    <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

    <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

    </fieldType>

       同时,把需要分词的字段,设置为text_ik

      <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />

    <field name="name" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />

    <field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />

    <field name="category" type="int" indexed="true" stored="true" required="true" multiValued="false" />

    <field name="content" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />

    <field name="price" type="double" indexed="true" stored="true" required="true" multiValued="false" />

    <field name="color" type="string" indexed="true" stored="true" required="true" multiValued="false" />

    <field name="orderBy" type="int" indexed="true" stored="true" required="true" multiValued="false" />

    <field name="updatetime" type="date" indexed="true" stored="true" required="true" multiValued="false" />

       

      4. 重启服务

        注意:如果之前已经创建了索引,需要将之前的索引删掉,重新创建分词后的索引。

       

      5. admin后台, analysis 下查看分词效果

        1. 中文分词效果

        

        2. 索引查询效果

        

       

      6. 配置IKAnalyzer分词器的扩展词典,停止词词典

        1.  文件夹下的IKAnalyzer.cfg.xml , ext.dicstopword.dic 三个文件 复制到/webapps/solr/WEB-INF/classes 目录下,并修改IKAnalyzer.cfg.xml

        <?xml version="1.0" encoding="UTF-8"?>

        <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

        <properties>

         <comment>IK Analyzer 扩展配置</comment>

         <!--用户可以在这里配置自己的扩展字典 -->

        <entry key="ext_dict">ext.dic;</entry>

     

         <!--用户可以在这里配置自己的扩展停止词字典-->

        <entry key="ext_stopwords">stopword.dic;</entry>

        </properties>

        2. ext.dic 里增加自己的扩展词典,例如,婴儿奶粉3

         

       

        注意:  记得将stopword.dicext.dic的编码方式为UTF-8 BOM的编码方式。 

       

  • 相关阅读:
    JavaScript Patterns 5.7 Object Constants
    JavaScript Patterns 5.6 Static Members
    JavaScript Patterns 5.5 Sandbox Pattern
    JavaScript Patterns 5.4 Module Pattern
    JavaScript Patterns 5.3 Private Properties and Methods
    JavaScript Patterns 5.2 Declaring Dependencies
    JavaScript Patterns 5.1 Namespace Pattern
    JavaScript Patterns 4.10 Curry
    【Android】如何快速构建Android Demo
    【Android】如何实现ButterKnife
  • 原文地址:https://www.cnblogs.com/xiaolang8762400/p/7451044.html
Copyright © 2011-2022 走看看