【问题标题】:What data structure should I use to find similar strings?我应该使用什么数据结构来查找相似的字符串?
【发布时间】:2011-07-04 16:05:00
【问题描述】:

我应该使用什么数据结构来查找相似的字符串?例如,当您向 Google 查询字符串“hapyp brithdya”时,Google 会询问您的意思是“生日快乐”,这个字符串与之前拼写错误的字符串“hapyp brithdya”非常相似。

什么数据结构在空间和时间上执行这种操作最有效?

请帮忙。非常感谢您的宝贵时间。

【问题讨论】:

  • 在您的示例中,您仅显示通过字母排列不同的单词。您是否还想查找“相似”但实际上具有不同字母的单词(例如“happy”和“hbppy”)?
  • 是的,确实如此。我也想得到像“快乐”或“hbppy”这样的词

标签: string algorithm data-structures language-agnostic matching


【解决方案1】:

既然你要数据结构,我就推荐Levenshtein automata

这些可以扩展到一个概率变体,它返回最有可能(根据语料库统计)的字符串更正。有关基本思想,请参阅 Google 的 Peter Norvig 的文章 "How to Write a Spelling Corrector";将此与 Levenshtein 自动机结合起来需要一些有限状态换能器的知识。详情请见Hassan, Noeman and Hassan

【讨论】:

    【解决方案2】:

    Google 使用的一种学习机制是搜索历史记录。例如,我搜索了“hapyp brithdya”,然后发现拼写不正确,因此没有选择任何链接。我的下一个搜索将是“生日快乐”的正确拼写。从这一系列搜索中,谷歌可以发现“hapyp brithdya”实际上意味着“生日快乐”。

    另一种基于同一行的评分机制有助于 google 提供更可接受的拼写更正,即搜索“hapyp brithdya”导致用户点击包含“生日快乐”的链接(由 google 搜索建议) .这增加了“生日快乐”与“hapyp brithdya”的接近度,与用户未访问的链接中出现的(例如)“生日快乐”相比

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-12
      • 2011-10-24
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2016-03-06
      • 2021-02-26
      相关资源
      最近更新 更多