python3(nltk / numpy / etc):ISO高效计算查找类似字符串对的方法

时间:2018-01-05 14:19:08

标签: python string numpy nltk similarity

我有一个N字符串列表。我的任务是找到足够相似的所有字符串对。也就是说,我需要(i)一个相似性度量,它会产生一个预定义范围(比如介于0和1之间)的数字,用于衡量两个字符串的相似程度,以及(ii)通过O(N ^ 2)的方式快速配对以找到高于某种阈值的那些(例如,如果度量为更多类似的字符串提供更大的数字,则> = 0.9)。我现在正在做的事情很慢(正如人们所预料的那样)对于一个大的N:

import difflib

num_strings = len(my_strings)
for i in range(num_strings):
    s_i = my_strings[i]

    for j in range(i+1,num_strings):
        s_j = my_strings[j]
        sim = difflib.SequenceMatcher(a=s_i, b=s_j).ratio()
        if sim >= thresh:
            print("%s\t%s\t%f" % (s_i,s_j,sim))

问题:

  1. 矢量化这个双循环以加速它的好方法 可能使用NLTK,numpy或任何其他库?
  2. 您是否会推荐比difflib的比率更好的指标(再次,来自NLTK,numpy等)?
  3. 谢谢

1 个答案:

答案 0 :(得分:1)

如果你想要最优解你必须是O(n ^ 2),如果你想要最优解的近似,你可以选择一个阈值并删除具有公平相似比的对。 我建议您使用其他指标,因为您需要使用difflib比率添加复杂性(这取决于字符串的长度)。这些比率可以是熵或曼哈顿/欧几里德距离。