5

我想从我的输入文件中构建一个包含每行 n-gram 的索引,如下所示:

Segeln bei den Olympischen Sommerspielen
Erdmond
Olympische Spiele
Turnen bei den Olympischen Sommerspielen
Tennis bei den Olympischen Sommerspielen
Geschichte der Astronomie

我需要 n-gram,因为我想在索引中搜索,但我必须假设搜索词中有很多输入错误。例如,如果我使用术语“schichte astrologie”进行搜索,我想找到“Geschichte der Astronomie”。如果它能给我一个可能的最佳匹配列表会更好,比如说最好的 10 场匹配,不管它们有多糟糕。如果有比使用 n-gram 更好的方法来实现这一点,或者您有提示如何创建索引以及如何查询它,我希望您能指出正确的方向。我很高兴有一个例子可以帮助我理解如何去做。我目前使用 lucene 4.3.1。我宁愿在 java 中实现它,而不是在命令行上构建索引。

4

1 回答 1

3

有很多不同的方法可以解决这个问题,Lucene 有很多工具可以帮助解决这些问题。在我看来,在这种情况下,N-Grams 可能不是最好的方法。

  • 词干根据语言规则(例如匹配“fishing”、“fished”和“fish”)将术语简化为词根(我不声称知道如何GermanStemmer处理“ge”前缀,但这将是一个很好的例子词干分析器可能会处理的东西)
  • 同义词过滤器可以处理您想要识别的特定已知同义词(例如“astrology”=“astronomy”)
  • 模糊查询可用于获得具有低编辑距离的匹配。

在其他可能性中。

就在 NGrams 上实现而言,NGramTokenizer这将是正确的标记器。

于 2013-09-30T17:03:08.897 回答