【发布时间】:2012-04-18 14:34:31
【问题描述】:
假设我有一个 string "Hello" 和一个列表
words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo','question', 'Hallo', 'format']
如何找到最接近"Hello" 并出现在列表words 中的n words?
在这种情况下,我们将拥有['hello', 'hallo', 'Hallo', 'hi', 'format'...]
所以策略是从最近的单词到最远的单词对列表单词进行排序。
我想过这样的事情
word = 'Hello'
for i, item in enumerate(words):
if lower(item) > lower(word):
...
但在大型列表中非常慢。
更新
difflib 有效,但也很慢。 (words list 里面有 630000+ 个单词(已排序,每行一个))。因此,每次搜索最接近的单词时,检查列表需要 5 到 7 秒!
【问题讨论】:
-
也许您正在寻找诸如编辑距离或 Levinshtein 距离之类的东西?
-
没错,这在很大程度上取决于您对“最接近”的定义。
-
这630,000字是否排序?它们是否在一个文件中,每行一个单词?
-
您打算如何定义“最接近”?在您的示例代码中,您使用的是字典比较,但是这将 'hermitage' 列为比 'jello' 更适合 'hello' 的匹配项。
-
您是否为超过 6M 的字典项找到了有效的解决方案?我这里也有货。
标签: python string algorithm list