词干提取
编辑词干提取
编辑词干提取是将单词还原为其词根形式的过程。这确保在搜索期间匹配单词的变体。
例如,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
参数来指定不提取词干的单词列表。