1.5.8 语言分析器(Analyzer)

时间:2022-01-07 02:54:41

语言分析器(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>

1.5.8 语言分析器(Analyzer)的更多相关文章

  1. Solr中的概念&colon;分析器&lpar;analyzer&rpar;、字符过滤器&lpar;character filter&rpar;、分词器(Tokenizer)、词元过滤器(Token Filter)、 词干化&lpar;Stemming&rpar;

    文本中包含许多文本处理步骤,比如:分词,大写转小写,词干化,同义词转化和许多的文本处理. 文本分析既用于索引时对一文本域的处理,也用于查询时查询字符串的文本处理.文本处理对搜索引擎的搜索结果有着重要的 ...

  2. 查看分析器&lpar;Analyzer&rpar;的分词效果

    1 测试代码 package com.test.lucene.helloworld; import org.apache.lucene.analysis.Analyzer; import org.ap ...

  3. 1&period;5 理解Analyzers&comma;Tokenizers&comma;Filters--目录

    这部分介绍了solr如何分解和处理文本数据的,它包含一下主题: 1.5.1 Analyzers,Tokenizers,Filters概述:主要介绍Analyzers,Tokenizers,Filter ...

  4. 通过lucene的StandardAnalyzer分析器来了解分词

    本文转载http://blog.csdn.net/jspamd/article/details/8194919 不同的Lucene分析器Analyzer,它对TokenStream进行分词的方法是不同 ...

  5. ES系列六、ES字段类型及ES内置analyzer分析

    一.背景知识 在Es中,字段的类型很关键: 在索引的时候,如果字段第一次出现,会自动识别某个类型,这种规则之前已经讲过了. 那么如果一个字段已经存在了,并且设置为某个类型.再来一条数据,字段的数据不与 ...

  6. ElasticSearch 2 &lpar;24&rpar; - 语言处理系列之停用词:性能与精度

    ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度 摘要 在信息检索早期,磁盘和内存相较我们今天的使用只是很小的一部分.将索引空间保持在一个较小的水平是至关重要的,节省每个 ...

  7. ElasticSearch 2 &lpar;23&rpar; - 语言处理系列之词根提取

    ElasticSearch 2 (23) - 语言处理系列之词根提取 摘要 世界上大多数语言都是屈折变化的,意思是词语可以通过变形来表达不同的含义: 数(Number): fox, foxes 时态( ...

  8. ElasticSearch 2 &lpar;21&rpar; - 语言处理系列之单词识别

    ElasticSearch 2 (21) - 语言处理系列之单词识别 摘要 一个英语单词相对容易识别:因为英语单词是被空格或(某些)标点符号隔开的.但在英语中也有反例:you're 这个词是一个单词还 ...

  9. ElasticSearch 2 &lpar;20&rpar; - 语言处理系列之如何开始

    ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...

随机推荐

  1. C&num;遍历得到checkboxlist选中值和设置选中项

    得到选中项的value值并拼接成一个字符串返回 public string GetChecked(CheckBoxList checkList, string separator) { string ...

  2. MessageFormat用法

    MessageFormat用来格式化一个消息,通常是一个字符串,比如: String str = "I'm not a {0}, age is {1,number,short}", ...

  3. WebService 学习过程

    //------------------------------------------------------------------------------------------ //windo ...

  4. 在C&num;中使用正则表达式自动匹配并获取所需要的数据

    转自:http://my.oschina.net/bv10000/blog/111736 正则表达式能根据设置匹配各种数据(比如:e-mail地址,电话号码,身份中号码等等).正则表达式功能强大,使用 ...

  5. Web前端开发面试题赋答案

    第一部分:用CSS实现布局 让我们一起来做一个页面 首先,我们需要一个布局. 请使用CSS控制3个div,实现如下图的布局. 第二部分:用javascript优化布局 由于我们的用户群喜欢放大看页面 ...

  6. &period;net MVC使用NPOI读取Excel模板,再写入数据

    NPOI其实已经介绍的差不多了,再贴一个方便以后复制粘贴. 亮点其实是 Server.MapPath 这个东西,可以找到MVC工程下的文件夹,找路径还是很方便的. /// <summary&gt ...

  7. java 重新抛出异常

    一.有时希望把刚捕获的异常重新抛出,尤其时在使用Exception捕获所以异常的时候,既然已经得到了对当前异常对象的引用,可以重新把它抛出: catch(Exception e){ System.ou ...

  8. 通过SourceTree连接SSL有问题的自建gitlab服务器

    我用的是 SourceTree 作为Git客户端的,用它连接一个HTTPS证书过期的自建git服务,会收到下面错误: abort: error: _ssl.c:507: error:14090086: ...

  9. 【转】使用 python IDLE 自带的 debuger 进行调试

    IDLE自带了调试器(虽然不怎么使吧). 关于如何在 IDLE 中进行调试网上的教程讲的很模糊,于是自己整理了一下,和大家分享~ 第一步:打开python shell,并在shell中打开debuge ...

  10. Java 写文件实现换行

    第一种: 写入的内容中利用\r\n进行换行 File file = new File("D:/text"); try { if(!file.exists()) file.creat ...