我想构建一个索引,其中包含输入文件中每一行的 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 中实现它,而不是在命令行上构建索引。
最佳答案
有很多不同的方法可以解决这个问题,Lucene 有很多工具可以帮助解决这些问题。在我看来,N-Grams 可能不是这种情况下的最佳方法。
- 词干提取器根据语言规则(例如匹配“fishing”、“fished”和“fish”)将术语缩减为词根(我不声称知道
GermanStemmer
如何处理“ge”前缀,但将是词干分析器可能处理的事情的一个很好的例子) - 同义词过滤器可以处理您想要识别的特定已知同义词(例如“astrology”=“astronomy”)
- 模糊查询可用于获得低编辑距离的匹配。
还有其他可能性。
就 NGrams 的实现而言,NGramTokenizer
将是正确的分词器。
关于java - 使用 lucene 创建和查询 n-gram 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090387/