我有一个包含文本的列表,我想从中提取一个百分比来说明相似性 它们介于[0,1]之间。这是我的代码:
from difflib import SequenceMatcher
listA = ['aaa','sss','ba']
listB = ['aa','aa']
def compare_strings(mylist):
if (len(mylist) < 2):
return 0.00
else:
cnt = 0
total = 0.0
for i in range(len(mylist)):
for j in range(i + 1, len(mylist)):
val = SequenceMatcher(None, mylist[i], mylist[j]).ratio()
total += val
cnt += 1
return (total / cnt)
print( "Sting simalarity in list 1 is %.5f" % (compare_strings(listA)))
print( "Sting simalarity in list 2 is %.5f" % (compare_strings(listB)))
>>>
Sting simalarity in list 1 is 0.13333
Sting simalarity in list 2 is 1.00000
这段代码是功能性的,但我不喜欢它看起来有点复杂。有没有更好或更优雅的方法来解决这个问题?有没有一种方法可以用lambda运算符来表达?在
这里有它,在一行中有一个lambda函数。Numpy mean是可选的(oyu可以实现自己的mean)
您可以使用
itertools.combinations
来获得所有的组合,然后使用sum
,直接计算组合的数量,而不是计数。在相关问题 更多 >
编程相关推荐