2016-03-29 26 views
1

PUANI ALMAK: Ben parametresini 'cutoff' ekleme seçeneği biliyordifflib.get_close_matches Ben <code>difflib.get_close_matches</code> kullanarak en iyi maç puanı almaya çalışıyorum

import difflib 

best_match = difflib.get_close_matches(str,str_list,1)[0] 

, ama nasıl almak için dışarı bulamadık eşiği ayarladıktan sonra gerçek skor. Bir şey mi eksik? Unicode dizeleri eşleştirmek için daha iyi bir çözüm var mı?

+0

2 tel arasında hızlı ve doğru bir şekilde benzerlik gösterebilen harika bir kütüphane bulundu - fuzzywuzzy [link] (https://pypi.python.org/pypi/fuzzywuzzy) – Gil

cevap

1

Bu difflib.get_close_matches eşleşen/bulanık eşleşen dizeleri için en kolay yol olduğunu buldum. Ama yorumlarda bahsettiğiniz gibi bulanık birkaçz gibi birkaç tane daha gelişmiş kütüphane var. Eğer difflib kullanmak istiyorsanız aşağıdaki gibi

Ama puanı almak için difflib.SequenceMatcher kullanabilirsiniz:

import difflib 
my_str = 'apple' 
str_list = ['ape' , 'fjsdf', 'aerewtg', 'dgyow', 'paepd'] 
best_match = difflib.get_close_matches(my_str,str_list,1)[0] 
score = difflib.SequenceMatcher(None, my_str, best_match).ratio() 

Bu örnekte, 'elma' ve liste arasında en iyi eşleşme 'maymun' olduğunu ve skor 0.75.

Ayrıca listesinde döngü ve tüm puanları hesaplamak kontrol etmek edebilirsiniz: difflib için

score for: apple vs. ape = 0.75 
score for: apple vs. fjsdf = 0.0 
score for: apple vs. aerewtg = 0.333333333333 
score for: apple vs. dgyow = 0.0 
score for: apple vs. paepd = 0.4 

Belgeler burada bulunabilir:

for word in str_list: 
    print "score for: " + my_str + " vs. " + word + " = " + str(difflib.SequenceMatcher(None, my_str, word).ratio()) 

Bu örnek için, aşağıdaki olsun: https://docs.python.org/2/library/difflib.html

İlgili konular