我使用difflib.get_close_matches遇到了不连贯的结果。
我试图在列表中找到字符串的最佳匹配(' Adeline,L。Marie')([' L.Marie,Adeline',&# 39; Allain,Martine' Ndiaye,Marie',' AdelaiDe Mori,Maria']
import difflib
string = 'Adeline,L. Marie'
list = ['L. Marie,Adeline','Allain,Martine', 'Ndiaye,Marie', 'AdelaiDe Mori,Maria']
matches = difflib.get_close_matches(string, list,3, cutoff=0.4)
print ('Matches found: ' + ";".join(matches))
for element in list:
print (element + ': ' + str(difflib.SequenceMatcher(None, 'Adeline,L. Marie', element).ratio()))
应用difflib:
difflib.get_close_matches(string, list,3, cutoff=0.4)
我得到三个结果,根据可用的documentation应该"按相似性得分排序,最相似的第一个"。
但是当我检查字符串和列表中每个元素之间的相似性得分时:
for element in list:
print (element + ': ' + str(difflib.SequenceMatcher(None, 'Adeline,L. Marie', element).ratio()))
我不明白我为什么会这样做:
Matches found: Allain,Martine;Ndiaye,Marie;AdelaiDe Mori,Maria
当列表中的第一个元素(' L.Marie,Adeline')得分高于Allain,Martine'
L. Marie,Adeline: 0.5
Allain,Martine: 0.3333333333333333
Ndiaye,Marie: 0.6428571428571429
AdelaiDe Mori,Maria: 0.6285714285714286
我做错了什么?
感谢您的帮助。