词干提取

编辑

词干提取 是将单词简化为其词根形式的过程。这确保了单词的不同形式在搜索期间能够匹配。

例如,walkingwalked 可以被词干提取为相同的词根:walk。词干提取后,这两个词的任何一个出现都可以在搜索中匹配另一个。

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

在某些情况下,词干提取后的词根形式可能不是一个真实的单词。例如,jumpingjumpiness 都可以被词干提取为 jumpi。虽然 jumpi 不是一个真实的英语单词,但这对于搜索并不重要;如果单词的所有变体都被简化为相同的词根形式,它们将正确匹配。

词干提取器词元过滤器

编辑

在 Elasticsearch 中,词干提取由词干提取器词元过滤器 处理。这些词元过滤器可以根据它们词干提取单词的方式进行分类

由于词干提取会改变词元,我们建议在索引和搜索分析期间使用相同的词干提取器词元过滤器。

算法词干提取器

编辑

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

算法词干提取器有一些优势

  • 它们需要很少的设置,通常开箱即用。
  • 它们使用的内存很少。
  • 它们通常比字典词干提取器快。

然而,大多数算法词干提取器只改变单词的现有文本。这意味着它们可能不适用于不包含其词根形式的不规则单词,例如

  • beaream
  • mousemice
  • footfeet

以下词元过滤器使用算法词干提取:

  • stemmer,它为多种语言提供算法词干提取,其中一些语言还有其他变体。
  • kstem,一种用于英语的词干提取器,它结合了算法词干提取和内置字典。
  • porter_stem,我们推荐用于英语的算法词干提取器。
  • snowball,它使用Snowball 基于规则的词干提取规则进行多种语言的词干提取。

字典词干提取器

编辑

字典词干提取器在一个提供的字典中查找单词,用字典中的词干词替换未词干提取的单词变体。

理论上,字典词干提取器非常适合:

  • 词干提取不规则单词
  • 区分拼写相似但概念上不相关的单词,例如:

    • organorganization
    • brokerbroken

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

  • 字典质量
    字典词干提取器的好坏取决于其字典。为了良好运行,这些字典必须包含大量单词,定期更新,并随着语言趋势而变化。通常,当字典可用时,它是不完整的,并且其中的一些条目已经过时了。
  • 大小和性能
    字典词干提取器必须将其字典中的所有单词、前缀和后缀加载到内存中。这可能会使用大量的 RAM。低质量的字典在去除前缀和后缀方面也可能效率较低,这可能会大大减慢词干提取过程。

您可以使用 hunspell 词元过滤器执行字典词干提取。

如果可用,我们建议在使用 hunspell 词元过滤器之前尝试使用您的语言的算法词干提取器。

控制词干提取

编辑

有时词干提取会产生拼写相似但概念上不相关的共享词根词。例如,词干提取器可能会将 skiesskiing 都简化为相同的词根词:ski

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

  • stemmer_override,它允许您定义特定词元的词干提取规则。
  • keyword_marker,它将指定的词元标记为关键词。关键词词元不会被后续的词干提取器词元过滤器词干提取。
  • conditional,它可以用于将词元标记为关键词,类似于 keyword_marker 过滤器。

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