将单词还原为词根

大多数语言的单词都可以 词形变化 ,意味着 下列单词可以改变它们的形态用来表达不同的意思:

  • 单复数变化 : fox 、foxes
  • 时态变化 : pay 、 paid 、 paying
  • 性别变化 : waiter 、 waitress
  • 动词人称变化 : hear 、 hears
  • 代词变化 : I 、 me 、 my
  • 不规则变化 : ate 、 eaten
  • 情景变化 : so be it 、 were it so

虽然词形变化有助于表达,但它干扰了检索,一个单一的词根 词义 (或意义)可能被很多不同的字母序列表达。 英语是一种弱词形变化语言(你可以忽略词形变化并且能得到合理的搜索结果),但是一些其他语言是高度词形变化的并且需要额外的工作来保证高质量的搜索结果。

词干提取 试图移除单词的变化形式之间的差别,从而达到将每个词都提取为它的词根形式。 例如 foxes 可能被提取为词根 fox ,移除单数和复数之间的区别跟我们移除大小写之间的区别的方式是一样的。

单词的词根形式甚至有可能不是一个真的单词,单词 jumpingjumpiness 或许都会被提取词干为 jumpi 。 这并没有什么问题--只要在索引时和搜索时产生相同的词项,搜索会正常的工作。

如果词干提取很容易的话,那只要一个插件就够了。不幸的是,词干提取 是一种遭受两种困扰的模糊的技术:词干弱提取和词干过度提取。

词干弱提取 就是无法将同样意思的单词缩减为同一个词根。例如, jumpedjumps 可能被提取为 jump , 但是 jumping 可能被提取为 jumpi 。弱词干提取会导致搜索时无法返回相关文档。

词干过度提取 就是无法将不同含义的单词分开。例如, generalgenerate 可能都被提取为 gener 。 词干过度提取会降低精准度:不相干的文档会在不需要他们返回的时候返回。

首先我们会讨论下两个 Elasticsearch 使用的经典词干提取器 — 词干提取算法字典词干提取器 — 并且在 选择一个词干提取器 讨论了怎么根据你的需要选择合适的词干提取器。 最后将在 控制词干提取原形词干提取 中讨论如何裁剪词干提取。