词干提取
词干提取 (Stemming) 是将单词还原为词根形式的过程。这可确保在搜索时单词的变体能够匹配。
例如,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 参数来指定不进行词干提取的单词列表。