1. 首页 » 知识阅读

免费英语句子分析器(Elasticsearch)

文本分析是将非结构化文本(例如电子邮件的正文或产品说明)转换为针对搜索优化的结构化格式的过程。

何时配置文本分析

当索引或搜索text字段时,Elasticsearch执行文本分析。

如果索引不包含text字段,则无需进一步设置;您可以跳过本节中的页面。

但是,如果您使用text字段或文本搜索未返回预期的结果,则配置文本分析通常会有所帮助。如果您正在使用Elasticsearch执行以下操作,则还应该研究分析配置:

建立一个搜索引擎矿山非结构化数据优化搜索特定语言进行词典或语言研究

文字分析概述

文本分析使Elasticsearch能够执行全文搜索,其中搜索返回所有相关结果,而不仅仅是精确匹配。

如果要搜索Quick fox jumps,则可能需要包含的文档,A quick brown fox jumps over the lazy dog也可能需要包含诸如fast fox或的相关单词的文档foxes leap。

代币化

通过令牌化,分析使全文搜索成为可能:将文本分解为较小的块,称为令牌。在大多数情况下,这些标记是单个单词。

如果您将该词组索引the quick brown fox jumps为单个字符串,并且用户搜索quick fox,则不会将其视为匹配项。但是,如果您对词组进行标记并分别索引每个词,则可以单独查询查询字符串中的词。这意味着他们可以通过搜索进行匹配quick fox,fox brown或其他变化。

正常化

令牌化可以根据单个条件进行匹配,但是每个令牌仍在字面上进行匹配。这意味着:

即使您可能希望一个字词与另一个字词Quick匹配quick,也 不会进行 搜索尽管fox和foxes共享相同的词根,但搜索foxes 将不匹配fox,反之亦然。搜索jumps将不匹配leaps。尽管它们不共享根词,但它们是同义词,并且具有相似的含义。

为了解决这些问题,文本分析可以这些标记标准化为标准格式。这样,您就可以匹配与搜索字词不完全相同但足够相似且仍然相关的令牌。例如:

Quick可以小写:quick。foxes可以词干或简化为词根:fox。jump并且leap是同义词,可以将其索引为一个单词:jump。

为确保搜索词按预期与这些单词匹配,您可以将相同的标记化和规范化规则应用于查询字符串。例如,Foxes leap可以将搜索标准化为搜索fox jump。

自定义文本分析

文本分析由分析器执行,它是控制整个过程的一组规则。

Elasticsearch包含一个默认的分析器,称为 标准分析器,它在开箱即用的情况下适用于大多数用例。

如果要定制搜索体验,则可以选择其他 内置分析仪,甚至可以 配置自定义分析仪。定制分析器使您可以控制分析过程的每个步骤,包括:

标记化 之前 对文本的更改文本如何转换为令牌在索引或搜索之前对令牌进行规范化更改

分析仪的解剖

分析  -无论是内置或自定义-只要是包含三个低级别的积木包:字符过滤器断词记号过滤

内置的分析器将这些构件预先打包到适合于不同语言和文本类型的分析器中。Elasticsearch还公开了各个构建基块,以便可以将它们组合以定义新的custom分析器。

字符过滤器

字符过滤器接收原始文本字符的流,并且可以通过添加,移除,或改变字符变换流。例如,可以使用字符过滤器将印度-阿拉伯数字(٠ ١٢٣٤٥٦٧٨ ٩)转换为其等效的阿拉伯-拉丁语(0123456789),或从流中剥离HTML元素。

分析器可能具有零个或多个 按顺序应用的字符过滤器。

分词器

标记生成器 接收字符流,其分成单个 令牌(通常单个单词),并且输出流的令牌。例如,whitespace令牌生成器在看到任何空格时都会将文本分成令牌。它将把文本 "Quick brown fox!"转换成术语[Quick, brown, fox!]。

分词器还负责记录每个术语的顺序或位置以及该术语表示的原始单词的开始和结束字符偏移量

分析器必须恰好 具有一个标记器。

令牌过滤器

令牌滤波器接收到令牌流,并且可以添加,删除或改变令牌。例如,lowercase令牌过滤器将所有令牌转换为小写字母, stop令牌过滤器从令牌流中删除常见词(停用词)the,然后 synonym令牌过滤器将同义词引入令牌流。

令牌过滤器不允许更改每个令牌的位置或字符偏移量。

分析器可能具有零个或多个 按顺序应用的令牌过滤器。

索引和搜索分析

文本分析发生两次:

索引时间

索引文档后,text将分析所有字段值。

搜索时间

在字段上进行全文搜索时text,将分析查询字符串(用户正在搜索的文本)。

搜索时间也称为查询时间

每次使用的分析器或一组分析规则分别称为索引分析器搜索分析器

索引和搜索分析器如何协同工作

在大多数情况下,应在索引和搜索时使用同一台分析仪。这样可以确保将字段的值和查询字符串更改为相同形式的标记。反过来,这可以确保令牌在搜索过程中符合预期。

在text字段中使用以下值索引文档:

在敏捷的棕色狐狸跳过了狗!

字段的索引分析器将值转换为令牌并对其进行规范化。在这种情况下,每个标记都代表一个词:

[快速,棕色,狐狸,跳跃,跳过,狗]

这些索引然后被索引。

稍后,用户在同一text字段中搜索:

“狐狸”

用户期望此搜索与之前索引的句子匹配 The QUICK brown foxes jumped over the dog!。

但是,查询字符串不包含文档原始文本中使用的确切单词:

quick 与 QUICKfox 与 foxes

为了解决这个问题,使用相同的分析器分析查询字符串。该分析器产生以下令牌:

[快,狐狸]

为了执行搜索,Elasticsearch将这些查询字符串标记与text字段中索引的标记进行比较。

代币

请求参数

text 领域

quick

X

X

brown

X

fox

X

X

jump

X

over

X

dog

X

因为字段值和查询字符串的分析方法相同,所以它们创建了相似的标记。标记quick和fox是完全匹配。这意味着搜索与"The QUICK brown foxes jumped over the dog!"用户期望的匹配包含的文档。

何时使用其他搜索分析器

尽管不那么常见,但有时在索引和搜索时使用不同的分析器是有意义的。为此,Elasticsearch允许您 指定一个单独的搜索分析器。

通常,仅当对字段值使用相同形式的标记时,才应指定单独的搜索分析器,并且查询字符串会创建意外或不相关的搜索匹配项。

Elasticsearch用于创建仅与以提供的前缀开头的单词匹配的搜索引擎。例如,搜索tr应返回tram或 trope-但从不返回taxi或bat。

文档被添加到搜索引擎的索引中;该文档在一个text字段中包含一个这样的词:

“apple”

字段的索引分析器将值转换为令牌并对其进行规范化。在这种情况下,每个标记都表示该词的潜在前缀:

[ a ,ap ,app ,appl ,apple ]

这些索引然后被索引。

稍后,用户在同一text字段中搜索:

“ appli”

用户希望此搜索仅匹配以开头的单词appli,例如appliance或application。搜索不匹配apple。

但是,如果使用索引分析器来分析此查询字符串,它将产生以下标记:

[ a ,ap ,app ,appl ,appli ]

当Elasticsearch将这些查询字符串标记与为索引的标记进行比较时apple,它会找到多个匹配项。

代币

appli

apple

a

X

X

ap

X

X

app

X

X

appl

X

X

appli

X

这意味着搜索将错误地匹配apple。不仅如此,它还可以匹配以开头的任何单词a。

要解决此问题,您可以为该text字段上使用的查询字符串指定其他搜索分析器。

在这种情况下,您可以指定一个搜索分析器,该分析器生成一个令牌而不是一组前缀:

[应用]

此查询字符串标记将仅与以开头的单词的标记匹配 appli,从而更好地符合用户的搜索期望。

词干

词干是将单词还原为词根形式的过程。这样可以确保在搜索过程中单词匹配的变体。

例如,walking和walked可以被词干为同一个词根: walk。词干一旦词干出现,就会在搜索中匹配另一个词。

词干依赖于语言,但通常涉及从单词中删除前缀和后缀。

在某些情况下,词干的词根形式可能不是真实词。例如,jumping和jumpiness都可以作为jumpi。虽然jumpi 不是真正的英语单词,但搜索无关紧要。如果将单词的所有变体都简化为相同的词根形式,则它们将正确匹配。

词干令牌过滤器编辑

在Elasticsearch中,词干由词干令牌过滤器处理。这些令牌过滤器可以根据其词干的方式进行分类:

算法词干分析器,它基于一组规则来 词干字典词干,通过在字典中查找来 词干

由于词干会更改令牌,因此我们建议在索引和搜索分析期间使用相同的词干令牌过滤器。

算法词干编辑

算法词干对每个单词应用一系列规则,以将其简化为词根形式。例如,英语的算法词干可以从复数单词的末尾删除-s 和-es后缀。

算法词干有一些优点:

他们需要很少的设置,并且通常开箱即用。他们使用很少的内存。它们通常比字典词干分析器快。

但是,大多数算法词干仅会更改单词的现有文本。这意味着它们可能不适用于不包含其词根形式的不规则单词,例如:

be,are和ammouse 和 micefoot 和 feet

以下令牌过滤器使用算法词干:

stemmer,它提供了几种语言的算法词干,其中一些带有其他变体。kstem,是英语的词干分析器,它将算法词干与内置词典结合在一起。porter_stem,是我们推荐的英语算法提取器。snowball,它对几种语言使用 基于Snowball的词干规则。

字典词干编辑

字典词干查找提供的字典中的词,用字典中的词干词替换未阻止的词变体。

从理论上讲,字典词干非常适合:

阻止不规则单词辨别拼写相似但概念上不相关的单词,例如:organ 和 organizationbroker 和 broken

在实践中,算法词干分析器通常优于字典词干分析器。这是因为字典词干提取器具有以下缺点:

词典质量词典词干分析器仅与其词典一样好。为了运作良好,这些词典必须包含大量单词,并定期更新并随语言趋势而变化。通常,当提供字典时,它是不完整的,并且其某些条目已经过时了。大小和性能词典词干必须将其词典中的所有单词,前缀和后缀加载到内存中。这会占用大量RAM。低质量词典在删除前缀和后缀时也可能效率较低,这会大大减慢词干的处理速度。

您可以使用hunspell令牌过滤器执行字典词干。

如果可用,我们建议您在使用hunspell令牌过滤器之前尝试针对您的语言的算法词干分析器。

控制词干编辑

有时,词干可以产生共享的根词,这些词的拼写相似但在概念上不相关。例如,词干提取器可以将skies和 都减少skiing为相同的词根:ski。

为了防止这种情况并更好地控制词干,可以使用以下令牌过滤器:

stemmer_override,可让您定义用于阻止特定令牌的规则。keyword_marker,将指定的标记标记为关键字。关键字令牌不会被后续的词干令牌过滤器阻止。conditional,可用于将标记标记为关键字,类似于keyword_marker过滤器。

对于内置语言分析器,您还可以使用 stem_exclusion参数来指定不会被词干限制的单词列表。

令牌图

当令牌生成器将文本转换为令牌流时,它还会记录以下内容:

的position流中的每个标记的的positionLength,位置是令牌的跨距数

使用这些,您可以为流创建一个有 向无环图,称为令牌图。在令牌图中,每个位置代表一个节点。每个标记都表示指向下一个位置的边或弧。

Elasticsearch 的文字分析(搜索的原理)

同义词编辑

一些令牌过滤器可以将新的令牌(例如同义词)添加到现有令牌流中。这些同义词通常与现有标记的位置相同。

在下图中,quick其同义词fast都具有的位置 0。它们跨越相同的位置。

Elasticsearch 的文字分析(搜索的原理)

多位置代币编辑

一些令牌过滤器可以添加跨多个位置的令牌。这些可以包括用于多词同义词的令牌,例如使用“ atm”作为“自动柜员机”的同义词。

但是,只有某些令牌过滤器(称为图形令牌过滤器)positionLength才能准确记录多位置令牌。此过滤器包括:

synonym_graphword_delimiter_graph

在下面的图形domain name system及其同义词中dns,两者的位置均为0。然而,dns有一个positionLength的3。图中的其他标记的默认positionLength值为1。

Elasticsearch 的文字分析(搜索的原理)

使用令牌图进行搜索编辑

索引将忽略该positionLength属性,并且不支持包含多位置标记的标记图。

但是,查询(例如match或 match_phrase查询)可以使用这些图从单个查询字符串生成多个子查询。

无效的令牌图编辑

以下令牌过滤器可以添加跨多个位置但仅记录默认值positionLength的令牌1:

synonymword_delimiter

这意味着这些过滤器将为包含此类令牌的流生成无效的令牌图。

在下图中,dns是的多位置同义词domain name system。但是,dns默认positionLength值为1,导致图形无效。

Elasticsearch 的文字分析(搜索的原理)

避免使用无效的令牌图进行搜索。无效的图形可能会导致意外的搜索结果。

声明:本文由"麦兜"发布,不代表"知识分享"立场,转载联系作者并注明出处:https://www.029ipr.com/zhishi/11263.html