【问题标题】:Using Python's jellyfish module to get best match (partial string matching)使用 Python 的 jellyfish 模块获得最佳匹配(部分字符串匹配)
【发布时间】:2016-08-22 09:26:21
【问题描述】:

我正在尝试创建某种字典来附加我的结果并使用 jaro 距离函数获得最佳匹配。

这是我尝试匹配 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 函数,您可以将列表传递给 process.extractOne(<value you want to compare>,<list of items you want to compare>),您将获得最佳匹配。

我不使用 FuzzyWuzzy 的原因只是因为处理速度太慢而且我不确定后面发生了什么,与另一个 5000 个字符串列表相比,匹配 5000 个字符串最多需要 40 分钟。

【问题讨论】:

    标签: python string-matching fuzzywuzzy


    【解决方案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
    

    【讨论】:

    • 这是我使用的解决方案!谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2021-11-23
    • 2012-06-15
    • 2019-10-18
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多