Ber*_*rdL 5 python string-matching fuzzywuzzy
我正在尝试创建某种字典来附加我的结果并使用 jaro 距离函数获得最佳匹配。
这是我尝试匹配两个列表并在两个列表中获得最佳匹配名称的一部分。
例子:
import jellyfish
jellyfish.jaro_distance(u'jellyfish', u'sellyfish')
output:
0.9259259259259259
Run Code Online (Sandbox Code Playgroud)
我想做的是:
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
Run Code Online (Sandbox Code Playgroud)
在本例中,我希望它返回得分最高的 2:
jellyfish jellyfihs 0.962962962963
salmonfish salmonfish 1.0
Run Code Online (Sandbox Code Playgroud)
对于 FuzzyWuzzy 用户,我正在尝试模拟process.extractOne可以将列表传递到其中的函数process.extractOne(<value you want to compare>,<list of items you want to compare>),并且您将获得最佳匹配。
我不使用 FuzzyWuzzy 的原因只是因为处理速度太慢,而且我不确定后面发生了什么,与另一个 5000 个字符串列表相比,5000 个字符串的匹配需要长达 40 分钟的时间。
小智 2
这可能会解决您的问题:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6246 次 |
| 最近记录: |