zoukankan      html  css  js  c++  java
  • 1.5.8 语言分析器(Analyzer)

    语言分析器(Analyzer)

      这部分包含了分词器(tokenizer)和过滤器(filter)关于字符转换和使用指定语言的相关信息.对于欧洲语言来说,tokenizer是相当直接的,Tokens被空格或者是一个简单的连接字符设置分隔的.在其他语言中,分词规则就不是那么简单了,一些欧洲语言也可能指定一些特殊的分词规则,如分解德国语言的规则.

      关于在索引时的语言探测,参考Detecting Languages During Indexing.

    KeyWordMarkerFilterFactory

      保护词免于被词干分析器修改.自定义的保护词列表需要在schema中指定protected属性.

    <fieldtype name="myfieldtype" class="solr.TextField">
        <analyzer>
            <tokenizer class="solr.WhitespaceTokenizerFactory" />
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
            <filter class="solr.PorterStemFilterFactory" />
        </analyzer>
    </fieldtype>

    StemmerOverrideFilterFactory

      通过一个自定义的映射覆盖(重写)次干提取算法.

      自定义的词干提取映射可以在schema中设置 "dictionary"属性来完成.映射的单词将被提取到文件中词干.并且不会被其他词干提取器做更深一步处理.

    <fieldtype name="myfieldtype" class="solr.TextField">
        <analyzer>
            <tokenizer class="solr.WhitespaceTokenizerFactory" />
            <filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" />
            <filter class="solr.PorterStemFilterFactory" />
        </analyzer>
    </fieldtype>

    Dictionary Compound Word Token Filter

      这个过滤器使用它这个单词组件词典拆分或者是分解,混合单词成单个单词.每一个输入的token都不会改变,如果token能够被分解成子单词同样被添加在同样的位置.

       复合词在日耳曼语最常见的.

       工厂类: solr.DictionaryCompoundWordTokenFilterFactory

       参数:

        dictionary:(必填),文件路径.文件中包含了简单单词的列表.

        minWordSize:(integer,默认为5), 小于这个长度的token将不会被分解.

        minSubwordSize:(integer,默认为2),子单词短于这个长度的不能发出token.

        maxSubwordSize:(integer,默认为15),子单词长于这个长度的不能发出token.

        onlyLongestMatch:(true/false,默认为true),如果为true,最长匹配的子单词成为新的token.

       例子:

        假设germanwords.txt文件中包含这些内容:dumm kopf donau dampf schiff

    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.DictionaryCompoundWordTokenFilterFactory"
            dictionary="germanwords.txt" />
    </analyzer>

       输入:"Donaudampfschiff dummkopf"

      Tokenizer to Filter: "Donaudampfschiff"(1), "dummkopf"(2),

      输出:"Donaudampfschiff"(1), "Donau"(1), "dampf"(1), "schiff"(1), "dummkopf"(2), "dumm"(2), "kopf"(2)

    Unicode Collation

      Unicode Collation是一个语言敏感的排序文本的方法,它可以用于高级搜索的用途.

      在solr中,Unicode Collation是非常快的,因为所有的工作在索引的时候处理完毕.

      而不是在<fieldtype ... class="solr.TextField">指定一个分析器.solr.CollationField和solr.ICUCollationField字段类型的类提供了这个功能.solr.ICUCollationField通过ICU4J库支持,提供了许多灵活的配置,有更多的语言环境(locales),更快的速度,需要更少的内存和更少的索引空间,因为它的keys小于JDK支持实现的solr.CollationField的keys.

      solr.ICUCollationField包含在 solr的analysis-extras贡献模块.参考solr/contrib/analysis-extras/README.tx来说明使用哪些jar包才能使用这个功能.

      solr.CollationField和solr.ICUCollationField字段可以用两种方式创建:

    •   基于关联本地环境的系统校正
    •   基于定制的RuleBasedCollator规则设置.

    solr.ICUCollationField的参数:

      使用系统校正:

        locale:(必填),RFC 3306 区域ID,参考ICU区域页面,用于区域支持列表.

        strength:有效值为primary ,secondary, tertiary, quaternary和identical.

        decomposition:

      使用定制的规则:

        custom:

        strength:

        decomposition:

      专业选项:

        alternate:

        caseLevel:

        caseFirst:

        numeric:

        variableTop:

    Sorting Text for a Specific Language

    (待补充)

    Sorting Text for Multiple Languages

    (待补充)

    Sorting Text with Custom Rules

    (待补充)

    JDK Collation

    (待补充)

    ASCII Folding Filter

    (待补充)

    Language-Specific Factories

      Simplified Chinese

      对于简体中文,solr提供了支持句子和单词的分词方法.在analysis-extras的贡献模块使用了solr.SmartChineseSentenceTokenFilterFactory和solr.SmartChineseWordTokenFilterFactory.这个组件包含了一个巨大的词典,使用隐藏的马尔代夫模型分解中文文本成单词.要使用这个过滤器,参考e solr/contrib/analysis-extras/README.txt说明哪些jar包被使用.

      工厂类:solr.SmartChineseWordTokenFilterFactory

      参数:none

      例子:

        使用默认设置,不支持英语中的单词词干提取.

      <analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>

        或者配置自定义的分析器.使用SmartChineseSentenceTokenizerFactory作为自定义的过滤器设置,这个句子分词器以句子的边界符号来分解句子,SmartChineseWordTokenFilter将句子更深一步的分解为单词.

    <analyzer>
        <tokenizer class="solr.SmartChineseSentenceTokenizerFactory" />
        <filter class="solr.SmartChineseWordTokenFilterFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.PositionFilterFactory" />
    </analyzer>

      CJK

      这个分词器分解中文,日文,韩文为tokens.这些都不是以空格来划定界限的语言.tokens的生成是通过文本字段中找到的CJK字符双的交叉的字符对来完成的.

      工厂类:solr.CJKTokenizerFactory

      参数:None

      例子:

    <analyzer type="index">
        <tokenizer class="solr.CJKTokenizerFactory" />
    </analyzer>
  • 相关阅读:
    Archlinux笔记本安装手记
    linux下activemq安装与配置activemq-5.15.2
    在 CentOS7 上安装 Zookeeper-3.4.9 服务
    VMware虚拟化kvm安装部署总结
    打印机故障总结
    fluentd安装和配置,收集docker日志
    使用Python和AWK两种方式实现文本处理的长拼接案例
    MySQL数据库使用xtrabackup备份实现小例子
    shell脚本实现ftp上传下载文件
    Linux系统中创建大文件,并作为文件系统使用
  • 原文地址:https://www.cnblogs.com/a198720/p/4302744.html
Copyright © 2011-2022 走看看