【问题标题】:Matching two string that contain same words from left to right in Python在Python中从左到右匹配两个包含相同单词的字符串
【发布时间】:2015-07-29 05:36:51
【问题描述】:

我正在尝试找到一种方法来匹配两个字符串,以查看它们在 python 中是否匹配或相似。

例子:

from fuzzywuzzy import fuzz

string1 = 'Green apple'
string2 = 'Apple, green' 
string3 = 'Green apples - grow on trees'

#Test with Fuzzy Wuzzy
print(fuzz.partial_ratio(string1, string2))
> 50
print(fuzz.partial_ratio(string1, string3))
> 100
print(fuzz.partial_ratio(string2, string3))
> 58

#Testing with DiffLib SequenceMatcher
print(difflib.SequenceMatcher(None, string1, string2).ratio())
> 0.34782608695652173
print(difflib.SequenceMatcher(None, string1, string3).ratio())
> 0.5641025641025641
print(difflib.SequenceMatcher(None, string2, string3).ratio())
> 0.45

在上面的示例中,所有三个字符串都应该相似,因为它们都包含相同的单词 green apple。是否有任何匹配算法可以匹配包含相同单词的字符串,而不管顺序如何,从左到右匹配,并且忽略在找到字符串 1 和字符串 3 等匹配之后出现的单词。

【问题讨论】:

    标签: python regex string-matching levenshtein-distance fuzzy-search


    【解决方案1】:

    fuzzywuzzy 中还有另一种方法称为partial_token_set_ratio。我想这会解决你的问题

    from fuzzywuzzy import fuzz
    string1 = 'Green apple'
    string2 = 'Apple, green' 
    string3 = 'Green apples - grow on trees'
    fuzz.partial_token_set_ratio(string1,string3)
    100
    fuzz.partial_token_set_ratio(string1,string2)
    100
    string4="apple"
    fuzz.partial_token_set_ratio(string1,string4)
    100
    fuzz.partial_token_set_ratio(string4,string1)
    100
    string4="app"
    fuzz.partial_token_set_ratio(string4,string1)
    100
    string4="appld"
    fuzz.partial_token_set_ratio(string4,string1)
    80
    

    【讨论】:

    • 谢谢。这看起来就像我刚需要的。我需要进行更多测试以确保它涵盖所有可能的场景。
    猜你喜欢
    • 1970-01-01
    • 2019-11-07
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2023-03-11
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多