繁体   English   中英

Python:在矩阵中查找Levenshtein编辑距离的有效方法

[英]Python: Efficient way to find Levenshtein edit distance in a matrix

在想对描述进行聚类之后,我想确定两个列表之间的相似性。

          L2D1    L2D2     L2D2 .........L2Dn
  L1D1     0       0.3     0.8............0.5  
  L1D2     0.2     0.7     0.3............0.2
  L1D3     0       0.3     0.8............0.5   
  .        .        .       .              .
  .        .        .       .              .   
  .        .        .       .              .
  L1Dn    0.6      0.1     0.9............0.4           

from Levenshtein import distance
List1 = list(new['Description'])
List2 = list(clean['Description'])

Matrix = np.zeros((len(List1),len(List2)),dtype=np.int)

for i in range(0,len(List1)):
  for j in range(0,len(List2)):
      Matrix[i,j] = distance(List1[i],List2[j])

由于上述方法是费时的数据大小和长度。

我尝试比较描述的前五个词(如果仅匹配),然后计算两个字符串之间的距离,否则移至method2中列表的下一个描述。

#Method2
for i in range(0,len(List1)):
    K1[i]=str(List1[:1]).split()[0:5]
    for j in range(0,len(List2)):
        K1[i]=str(List2[:1]).split()[0:5]
        if (distance(K1[i],K2[j]))==0:
            Matrix[i,j]=distance(List1[i],List2[j])
        else:
            Matrix[i,j]=1000

但是由于我是新手,因此缺少一些逻辑并得到:

TypeError:“ int”对象不支持项目分配

我也想在接下来的10个和100个单词中实现相同的功能。 提前致谢。

我认为,您应该检查numpy文档和ndarray类

这是一点pythonic方式:

for i, new_value in enumerate(List1):
   for j, clean_value in enumerate(List2):
      Matrix[i,j] = distance(new_value, clean_value)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM