【发布时间】:2015-04-04 14:35:21
【问题描述】:
我有一个字符串列表,我想根据列文斯坦距离过滤掉过于相似的字符串。所以如果lev(list[0], list[10]) < 50;然后del list[10]。有什么方法可以更有效地计算列表中每对字符串之间的距离吗?谢谢!!
data2= []
for i in data:
for index, j in enumerate(data):
s = levenshtein(i, j)
if s < 50:
del data[index]
data2.append(i)
上面相当愚蠢的代码计算时间太长...
【问题讨论】:
-
需要更多信息才能回答。据说 Levenshtein 算法很慢。此外,未定义 data 和 data1。你看过levenshtein.net吗?外字节?你用过python的profiler吗?
-
Levenshtein 是对称的。您可能希望相应地构建嵌套的 for 循环。见,stackoverflow.com/questions/9722022/…
-
谢谢。我正在使用来自link 的第 5 个 Levenshtein 实现。数据是一个包含 6000 个句子的列表,我只想保留一个非常相似的句子对..
-
您是否考虑过使用记忆版(rosettacode.org/wiki/Levenshtein_distance#Python),如果单词特别相似,这可能会为您节省很多时间。其次,如果您正在删除,枚举中的索引不会与数据索引不同步,您可以简单地存储一个列表来解决这个问题。
-
你可以试试github.com/ztane/python-Levenshtein 基于C 版本的Levenstein 算法比Python 快得多。如果您想进一步加快速度,可以添加一些逻辑,例如比较字符串的前 10 个字符,如果它们足够相似,则在整个字符串中搜索相似度。然后您可以使用多处理模块进行并行化。有了这些基本想法,与非常原始的、顺序的、全字符串比较相比,我得到了 100 倍的巨大速度提升。
标签: python levenshtein-distance edit-distance