• fuzzywuzzy:计算两个字符串之间的相似度


    楔子

    fuzzywuzzy是用来计算两个字符串之间的相似度的,它是依据Levenshtein Distance算法来进行计算的

    Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越高。

    fuzz

    from fuzzywuzzy import fuzz
    
    # 调用fuzz.ratio即可计算两个字符串之间的相似度
    print(fuzz.ratio("古明地觉", "古明地恋"))  # 75
    
    # 我们看到ratio是完全匹配的,它把字符串的长度也考虑在内了
    print(fuzz.ratio("古明地觉", "古明地觉aa"))  # 80
    
    # partial_ratio是非完全匹配,如果一方结束了,那么剩下的就不考虑了
    print(fuzz.partial_ratio("古明地觉", "古明地觉也叫小五萝莉"))  # 100
    
    # token_sort_ratio表示忽略顺序匹配,但前提是多个词,以空格进行分隔。所以明显是针对英文的
    print(fuzz.ratio("古 明 地 觉", "古 明 地 觉"[:: -1]))  # 25
    print(fuzz.token_sort_ratio("古 明 地 觉", "古 明 地 觉"[:: -1]))  # 100
    
    # token_set_ratio表示去重匹配,同样:前提是多个词,以空格进行分隔
    print(fuzz.ratio("a a a he", "a he"))  # 67
    print(fuzz.token_set_ratio("a a a he", "a he"))  # 100
    

    process

    from fuzzywuzzy import process
    
    words = ["hello python", "hello java", "hello golang", "hello php"]
    # 会自动和words里面每一个元素进行比较,然后按照相似度从高到低排列
    print(process.extract("hello thon", words))
    # [('hello python', 91), ('hello php', 74), ('hello golang', 73), ('hello java', 64)]
    
    # 还可以传入一个limit参数,表示只返回前limit个,默认为5
    print(process.extract("hello thon", words, limit=2))  # [('hello python', 91), ('hello php', 74)]
    
    # 返回分数最高的
    print(process.extractOne("hello thon", words))  # ('hello python', 91)
    

    另外使用fuzzywuzzy这个模块的时候,会弹出一个警告

    """
    UserWarning: Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning
    """
    

    提示我们可以通过pip install python-Levenshtein得到解决,python-Levenshtein是一个用于加速字符串匹配的库,可提供4到10倍的加速。另外这个库在Windows上通过pip安装会失败,如果你本地没有vscode的话,不过我们可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/这个网站上面下载。当然即使没有这个库也是可以的,没有的话fuzzywuzzy底层会使用python的标准库difflib进行匹配,只是会弹出警告罢了。

  • 相关阅读:
    测试随笔
    ECNU 3530 和你在一起
    ECNU 1030 母牛生小牛
    ECNU 3081 购房还款
    PPP模式下的融资结构优化
    决策树分类
    关联规则-R语言实现
    中国快递包裹总量的预测-基于SARIMA模型
    LeetCode 2 :Swap Nodes in Pairs
    2018092609-2 选题 Scrum立会报告+燃尽图 04
  • 原文地址:https://www.cnblogs.com/traditional/p/12554215.html
Copyright © 2020-2023  润新知