我应该使用什么数据结构来查找类似的字符串?

时间:2011-07-04 16:05:00

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

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

在空间和时间上进行此类操作的数据结构最有效?

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

2 个答案:

答案 0 :(得分:6)

由于您要求提供数据结构,我将推荐Levenshtein automata

这些可以扩展到概率变量,该变量返回最可能(根据语料库统计)字符串的校正。请参阅Google的Peter Norvig撰写的文章"How to Write a Spelling Corrector",了解其基本概念;将其与Levenshtein自动机结合起来需要一些有限状态传感器的知识。有关详细信息,请参阅Hassan, Noeman and Hassan

答案 1 :(得分:1)

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

另一种基于相同行的评分机制可帮助谷歌提供更多可接受的拼写更正,即搜索" hapyp brithdya"导致用户点击链接(由谷歌搜索建议)包含"生日快乐"。这增加了生日快乐的接近度#34; " hapyp brithdya",与(比如)"尿布生日相比#34;它存在于用户未访问的链接中