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

fuzzywuzzy:计算两个字符串之间的相似度fuzzywuzzy是用来计算两个字符串之间的相似度的,它是依据LevenshteinDistance算法来进行计算的。LevenshteinDistance算法,又叫EditDistance算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字

大家好,欢迎来到IT知识分享网。

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

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

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

当我们使用 git 的时候,如果命令输错了,那么会告诉你此命令不是一个 git 命令,这是理所应当的。然后重点来了,并且 git 还会提示一些与你输错的命令长得非常相似的一些命令。

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

所以这里面也用到了字符串的相似度原理,找出 git 命令中和你输错的命令最相似的几个,然后进行提示。

如果我们也写了一个类似的程序,需要用户通过命令行参数的方式,那么当用户输入了一个不存在的命令,我们也可以这么做。而实现方法也很简单,就是将所有的命令和用户输错的命令都计算一个字符串相似度,然后返回相似度最高的 n 个即可。

使用上面的 fuzz 函数完全可以实现,当然 fuzzywuzzy 模块还提供了一个 extract 函数,可以让我们更加轻松地做到这一点。

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 进行匹配,只是会弹出警告罢了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27768.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信