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>
1.5.8 语言分析器(Analyzer)的更多相关文章
- Solr中的概念:分析器(analyzer)、字符过滤器(character filter)、分词器(Tokenizer)、词元过滤器(Token Filter)、 词干化(Stemming)
文本中包含许多文本处理步骤,比如:分词,大写转小写,词干化,同义词转化和许多的文本处理. 文本分析既用于索引时对一文本域的处理,也用于查询时查询字符串的文本处理.文本处理对搜索引擎的搜索结果有着重要的 ...
- 查看分析器(Analyzer)的分词效果
1 测试代码 package com.test.lucene.helloworld; import org.apache.lucene.analysis.Analyzer; import org.ap ...
- 1.5 理解Analyzers,Tokenizers,Filters--目录
这部分介绍了solr如何分解和处理文本数据的,它包含一下主题: 1.5.1 Analyzers,Tokenizers,Filters概述:主要介绍Analyzers,Tokenizers,Filter ...
- 通过lucene的StandardAnalyzer分析器来了解分词
本文转载http://blog.csdn.net/jspamd/article/details/8194919 不同的Lucene分析器Analyzer,它对TokenStream进行分词的方法是不同 ...
- ES系列六、ES字段类型及ES内置analyzer分析
一.背景知识 在Es中,字段的类型很关键: 在索引的时候,如果字段第一次出现,会自动识别某个类型,这种规则之前已经讲过了. 那么如果一个字段已经存在了,并且设置为某个类型.再来一条数据,字段的数据不与 ...
- ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度
ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度 摘要 在信息检索早期,磁盘和内存相较我们今天的使用只是很小的一部分.将索引空间保持在一个较小的水平是至关重要的,节省每个 ...
- ElasticSearch 2 (23) - 语言处理系列之词根提取
ElasticSearch 2 (23) - 语言处理系列之词根提取 摘要 世界上大多数语言都是屈折变化的,意思是词语可以通过变形来表达不同的含义: 数(Number): fox, foxes 时态( ...
- ElasticSearch 2 (21) - 语言处理系列之单词识别
ElasticSearch 2 (21) - 语言处理系列之单词识别 摘要 一个英语单词相对容易识别:因为英语单词是被空格或(某些)标点符号隔开的.但在英语中也有反例:you're 这个词是一个单词还 ...
- ElasticSearch 2 (20) - 语言处理系列之如何开始
ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...
随机推荐
- AutoCAD DxfCode组码值说明
值 说明 -5 APP:永久反应器链 -4 APP:条件运算符(仅与 ssget 一起使用) -3 APP:扩展数据 (XDATA) 标记(固定) -2 APP:图元名参照(固定) -1 APP:图元 ...
- HDU1150Machine Schedule(二分图最大匹配的DFS解法)
题目大意就是说有两台机器,分别有n,m种模式可以调节,有k个工作,某一个工作i可以在第一台机器的a[i]模式下或第二台机器的b[i]模式下工作,两台机器的初始模式为0,问如何分配这K件工作使得两台机器 ...
- C#中的结构体与类的区别
经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字str ...
- branch
1.删除分支 git branch -d branch_name error: The branch 'branch_name' is not fully merged. If you are sur ...
- 一个可创建读取日志的管理类(可固定创建2M大小的日志文件)
这里,将日志管理基类命名为LogManagerBase(抽象类),具体的不同类型的日志可以通过继承完成.该基类可将日志以每个2M的方式存储起来,并可以读取当前正在使用的日志的所有内容. 要实现该基类, ...
- Merge into 使用
在进行SQL语句编写时,我们经常会遇到这样的问题:当存在记录时,就更新(Update),不存在数据时,就插入(Insert),oracle为我们提供了一种解决方法——Merge into ,具体语法如 ...
- NBearV3中文教程总目录
1.NBearV3 Step by Step教程——ORM篇 摘要:本教程演示如何基于NBearV3的ORM模块开发一个Web应用程序的全过程.本教程演示的实体关系包括:继承.1对1关联.1对多关联, ...
- 关于使用Transaction对于非数据库事务的操作
在操作数据库的过程中,为了数据的一致性,我们可以使用Transaction,要么成功的时候全部提交,要么有任何一个操作失败立即全部回滚.不仅仅是在数据库方面,有时候操作其他的内容,比如说对于系统文件的 ...
- HTML第七天学习笔记
今天主要是学习如何使用JS,第一个就是先是使用JS输出"Hello world" <!doctype html> <html lang="en" ...
- 分享一个导出Excel时页面不跳转的小技巧
今天在点击客户档案导出的时候,发现先是打开了一个新标签,然后新标签自动关掉,弹出一个文件下载确认的窗口,点击确认后开始下载导出的Excel文件.这样的过程感觉窗口闪来闪去,而且可能会给用户带来困惑,是 ...