自动完成算法的新功能

时间:2018-11-10 19:50:06

标签: algorithm autocomplete search-engine

我在一次采访中遇到了这个问题。实现基本的自动完成系统(https://www.futurice.com/blog/data-structures-for-fast-autocomplete/)可以从前缀字符串中获取字符串列表很容易。现在我们要添加一些新功能。

例如, 用户输入:lun pla输出:午餐计划(多个单词自动完成)

用户输入:pla输出:午餐计划

用户输入:unc输出:午餐(单词中自动填充形式的一部分)

如何实现这些功能?

1 个答案:

答案 0 :(得分:0)

您可以尝试以下(基本)方法,稍后我将提供扩展建议:

  • 加载接受的单词的字典
  • 使用BK-Tree作为基础指标从这些单词中构建一个Levenshtein-Damerau distance
  • 在空白字符上分割输入序列以获取单词
  • 对于每个单词,检查它是否为可接受的单词。如果在BK树中找不到最近的词(在可接受的距离内)

现在需要改进:

  • 正如您所指出的,有时将两个单词组合在一起时,匹配更有意义
  • 为此使用Google word2Phrase算法。您可以找到C ++版本here
  • 使用更聪明的方法来查找单词边界。诸如HMM(隐马尔可夫模型)之类的随机方法可能很有用(避免日期,时间,缩写等被拆分)
  • 使用更智能的错误度量。您可以考虑常见的拼写错误,键盘布局错误(对于习惯于突然遇到azerty的qwerty打字人员来说,会有非常具体的错误)等
  • 尝试确定单词part-of-speech type。 (形容词,名词,动词等)。通过这样做,您可以完成更好的工作。