2016-08-22 13 views
0

私の結果を追加してjaro distance関数を使ってベストマッチを得るための辞書を作成しようとしています。Pythonのjellyfishモジュールを使ってベストマッチを得る(部分文字列マッチング)

これは、2つのリストを照合して、両方で最もよく一致する名前を取得しようとした私の試みの一部です。

例:私が何をしようとしています何

import jellyfish 
jellyfish.jaro_distance(u'jellyfish', u'sellyfish') 

output: 
0.9259259259259259 

がある。この場合、

listA = ['grellofish','mellofush','jellyfihs','sellyfish','salmonfish'] 
listB = ['jellyfish','salmonfish'] 

#convert to unicode 
listA = [unicode(i) for i in listA] 
listB = [unicode(i) for i in listB] 

for nickB in listB: 
    for nickA in listA: 
     results = jellyfish.jaro_distance(nickA, nickB) 
     print nickB,nickA,results 

output: 
jellyfish grellofish 0.825925925926 
jellyfish mellofush 0.777777777778 
jellyfish jellyfihs 0.962962962963 
jellyfish sellyfish 0.925925925926 
jellyfish salmonfish 0.685185185185 
salmonfish grellofish 0.733333333333 
salmonfish mellofush 0.7 
salmonfish jellyfihs 0.618518518519 
salmonfish sellyfish 0.755555555556 
salmonfish salmonfish 1.0 

私はそれが最高得点で2を返すようにしたい:

jellyfish jellyfihs 0.962962962963 
salmonfish salmonfish 1.0 

FuzzyWuzzyユーザーの場合、私はprocess.extractOne関数をエミュレートしようとしています。ここでは、リストをに渡すことができますあなたは最高のマッチを得るでしょう。

FuzzyWuzzyを使用していない理由は、処理が遅すぎて何が起こっているのか不明です。別の5000文字列のリストと比較して5000文字列の一致が最大40分かかります。

答えて

1

これはあなたの問題を解決する可能性があります:これは私が使用した溶液は

def get_closest_match(x, list_random): 
    best_match = None 
    highest_jaro_wink = 0 
    for current_string in list_random: 
     current_score = jf.jaro_winkler(x, current_string) 
     if(current_score > highest_jaro_wink): 
      highest_jaro_wink = current_score 
      best_match = current_string 
    return best_match 
for nickB in listB: 
    result = get_closest_match(nickB,listA) 
    print nickB, result 
+0

でした!とにかくお返事いただきありがとうございます。 – BernardL

関連する問題