词干提取
编辑词干提取编辑
词干提取 是将单词还原到其词根形式的过程。这可以确保单词的不同变体在搜索时能够匹配。
例如,walking
和 walked
可以被词干提取到相同的词根词:walk
。一旦词干提取完成,这两个词的任何一个出现都会在搜索中匹配另一个。
词干提取依赖于语言,但通常涉及从单词中删除前缀和后缀。
在某些情况下,词干提取后的词根词可能不是一个真实的单词。例如,jumping
和 jumpiness
都可以被词干提取到 jumpi
。虽然 jumpi
不是一个真实的英语单词,但对于搜索来说并不重要;如果一个单词的所有变体都被还原到相同的词根形式,它们将正确匹配。
词干提取词元过滤器编辑
在 Elasticsearch 中,词干提取由词干提取 词元过滤器 处理。这些词元过滤器可以根据它们词干提取单词的方式进行分类
由于词干提取会更改词元,因此我们建议在 索引和搜索分析 期间使用相同的词干提取词元过滤器。
算法词干提取器编辑
算法词干提取器对每个单词应用一系列规则,以将其还原到其词根形式。例如,英语的算法词干提取器可能会从复数词的末尾删除 -s
和 -es
后缀。
算法词干提取器有一些优势
- 它们需要很少的设置,通常可以开箱即用。
- 它们使用的内存很少。
- 它们通常比 词典词干提取器 更快。
但是,大多数算法词干提取器只改变单词的现有文本。这意味着它们可能不适用于不包含其词根形式的不规则单词,例如
-
be
、are
和am
-
mouse
和mice
-
foot
和feet
以下词元过滤器使用算法词干提取
-
stemmer
,它为多种语言提供算法词干提取,其中一些语言还有额外的变体。 -
kstem
,一种英语词干提取器,它将算法词干提取与内置词典相结合。 -
porter_stem
,我们推荐的英语算法词干提取器。 -
snowball
,它使用 Snowball 基于的词干提取规则,适用于多种语言。
词典词干提取器编辑
词典词干提取器在提供的词典中查找单词,用词典中的词干提取后的单词替换未词干提取的单词变体。
理论上,词典词干提取器非常适合
- 词干提取不规则单词
-
区分拼写相似但概念上无关的单词,例如
-
organ
和organization
-
broker
和broken
-
实际上,算法词干提取器通常优于词典词干提取器。这是因为词典词干提取器有以下缺点
-
词典质量
词典词干提取器只有在其词典质量足够高的情况下才能发挥作用。为了有效地工作,这些词典必须包含大量的单词,定期更新,并随着语言趋势的变化而变化。通常,当词典可用时,它是不完整的,其中一些条目已经过时。 -
大小和性能
词典词干提取器必须将其词典中的所有单词、前缀和后缀加载到内存中。这可能会使用大量的 RAM。质量较差的词典在删除前缀和后缀方面也可能效率较低,这会显著减慢词干提取过程。
您可以使用 hunspell
词元过滤器来执行词典词干提取。
如果可用,我们建议在使用 hunspell
词元过滤器之前尝试使用您语言的算法词干提取器。
控制词干提取编辑
有时词干提取会产生拼写相似但概念上无关的共享词根词。例如,词干提取器可能会将 skies
和 skiing
都还原到相同的词根词:ski
。
为了防止这种情况并更好地控制词干提取,您可以使用以下词元过滤器
-
stemmer_override
,它允许您定义词干提取特定词元的规则。 -
keyword_marker
,它将指定的词元标记为关键字。关键字词元不会被后续的词干提取词元过滤器词干提取。 -
conditional
,它可以用来将词元标记为关键字,类似于keyword_marker
过滤器。
对于内置的 语言分析器,您还可以使用 stem_exclusion
参数来指定一个不会被词干提取的单词列表。