【发布时间】:2010-11-20 01:33:16
【问题描述】:
我有以下要求:-
我有很多(比如 100 万个)值(名称)。 用户将键入一个搜索字符串。
我不希望用户正确拼写名称。
所以,我想做一种谷歌“你的意思是”。这将列出我的数据存储中的所有可能值。有一个类似但不相同的问题here。这没有回答我的问题。
我的问题:- 1) 我认为不建议将这些数据存储在 RDBMS 中。因为那样我就不会对 SQL 查询进行过滤。而且我必须进行全表扫描。那么,在这种情况下应该如何存储数据?
2) 第二个问题同this。但是,只是为了我的问题的完整性:我如何搜索大型数据集? 假设数据集中有一个名字 Franky。 如果用户键入为 Phranky,我如何匹配 Franky?我必须遍历所有名称吗?
我遇到了Levenshtein Distance,这将是一种查找可能字符串的好方法。但同样,我的问题是我是否必须对数据存储中的所有 100 万个值进行操作?
3) 我知道,Google 通过观察用户行为来做到这一点。但我想在不观察用户行为的情况下做到这一点,即使用我还不知道的距离算法。因为前一种方法需要大量搜索才能开始!
4) 正如Kirk Broadhurst 在回答below 中指出的那样,有两种可能的情况:-
- 用户输入错误的单词(编辑 距离算法)
- 用户不认识单词并猜测 (语音匹配算法)
我对这两个都感兴趣。它们实际上是两个不同的东西。例如Sean 和 Shawn 听起来一样,但编辑距离为 3 - 太高而不会被视为错字。
【问题讨论】:
-
Google 确实“您的意思是?” (粗略地说)通过观察用户自己如何纠正,然后将最受欢迎的纠正提供给其他用户。
-
我同意。但我的问题是如何实现类似的功能。我相信也有可能实现类似的计算功能。
-
这里几乎所有的答案都是有用的。所以,我认为我们应该评估解决方案并形成一个组合完整的分析。我会在几个周末尝试做。
标签: language-agnostic nlp spell-checking information-retrieval autosuggest