当前位置: 首页 > 知识库问答 >
问题:

使用FuzzyWuzzy的字符串匹配-是使用Levenshtein距离还是Ratclifg/Obershelp模式匹配算法?

仲孙鸣
2023-03-14

fuzzywuzzy是一个非常流行的字符串匹配库。根据库的文档,它提到它使用Levenshtein距离来计算序列之间的差异。但是仔细检查后,我发现它实际上使用了Difflib库中的SequenceMatcher函数。根据文档,该函数使用RatClifg/Obershelp模式匹配算法。

根据定义,Levenshtein距离是将一个字符串转换为另一个字符串所需的最小编辑次数,Ratclifg/Obershelp模式匹配算法计算匹配字符数除以两个字符串中字符总数的倍数。比较两者的密切相关的帖子。

from difflib import SequenceMatcher
from fuzzywuzzy import fuzz
s = SequenceMatcher(None, "abcd", "bcde")
s.ratio()
# 0.75
fuzz.ratio("abcd", "bcde")
# 75

如果我手动计算两个字符串之间的Levenshtein距离,我猜它将只是2。在这种情况下,它是如何像贡献者在文档中所写的那样使用Levenshtein距离的?

共有1个答案

耿学义
2023-03-14

使用python-Levenshtein的fuzzywuzzy.ratio不返回Levenshtein分数,而是返回Levenshtein比率,即(a+b-levenshteinscore)/(a+b),其中a和b是要比较的两个字符串的长度。

如果您没有安装python-Levenshtein,那么fuzzywuzzy根本不使用Levenshtein。FuzzyWuzzy的主页在这方面有误导性,尽管它确实建议安装Python-Levenshtein。

python-Levenshtein在安装时有一些问题;我使用这个stackoverflow问题的第二个响应来解决它。

如果您没有安装python-Levenshtein,FuzzyWuzzy将使用difflib,这对许多输入值都是一样的,但不是所有的输入值都是一样的。开发人员建议使用Python-Levenshtein。请参阅FuzzyWuzzy的git上的这个问题,其中包括一个示例,其中使用该包与不使用该包时的结果是不同的。这可能不应该发生,或者至少文档应该明确这一点,但FuzzyWuzzy的开发人员似乎满足于至少功能。

 类似资料:
  • 问题内容: 我刚刚开始探索Elasticsearch。我创建了一个文档,如下所示: 我现在尝试对Levenshtein距离为5的名称字段进行模糊搜索,如下所示: 但是它没有返回任何匹配。我希望圣路易斯的记录能归还。我该如何解决我的查询? 谢谢。 问题答案: 您的查询存在的问题是,最大编辑距离为2。 在上述情况下,您可能想要做的是将St.改为Saint 的同义词,这将与您匹配。当然,这将取决于您的数

  • 本文向大家介绍python fuzzywuzzy模块模糊字符串匹配详细用法,包括了python fuzzywuzzy模块模糊字符串匹配详细用法的使用技巧和注意事项,需要的朋友参考一下 github主页 导入: 1) fuzz.ratio()对位置敏感,全匹配。fuzz.partial_ratio()对位置敏感,搜索匹配。 2) 对字符串s排序。force_ascii:True 或者False。为T

  • 如何检查字符串是否与此模式匹配? 大写字母,数字,大写字母,数字。。。 例如,这些将匹配: 这些不会(“^”表示问题)

  • 我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点:

  • 问题内容: 我想在输入字符串中搜索给定的字符串模式。 例如 现在,我需要搜索字符串URL是否包含“ ”。请帮我。 这是一个例子。实际上,我需要检查URL是否包含匹配“ / {a-zA-Z0-9} /”的字符串。 问题答案: 您可以为此使用类。如果您只想在中匹配单词字符,则可以使用以下正则表达式。是的简写。如果您可以,请使用或。

  • 串的模式匹配 给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。 本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下: 数据0:小规模字符串,测试基本正确性; 数据1:随机数据,String 长度为 105,Pa