Python Fuzzywuzzy的process.extract():它是如何工作的?

alw*_*ons 6 python string fuzzywuzzy

我试图了解python模块Fuzzywuzzy的功能process.extract()如何工作?

我主要在这里阅读有关Fuzzywuzzy软件包的信息:http ://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/ ,这是一篇很棒的文章,解释了尝试进行模糊匹配时的不同情况。他们讨论了部分字符串相似性的几种方案:

1)乱序
2)令牌排序
3)令牌集

然后,从这篇文章中:https : //pathindependence.wordpress.com/2015/10/31/tutorial-fuzzywuzzy-string-matching-in-python-improving-merge-accuracy-across-data-products-and-naming -conventions /我学习了如何使用Fuzzywuzzy的process.extract()函数基本上选择前k个匹配项。

我找不到太多有关process.extract()函数如何工作的信息。这是我在其GitHub页面(https://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/process.py)上找到的定义/信息,该功能是:

在选择的列表或词典中查找最佳匹配,返回包含匹配及其得分的元组列表。如果使用字典,则还返回每个匹配项的键。

但是,它没有提供有关如何找到最佳方法的详细信息?是否需要我在上面提到的所有3个方案中找到该方案?

我之所以问是因为,当我使用此函数时,有时会有两个非常相似但不匹配的字符串。

例如在我当前的样本数据集中,要匹配的字符串

“总补货提前期(以工作日为单位)”

它与

“ PLANNING_TIME_FENCE_CODE”,“ BUILD_IN_WIP_FLAG”

但不是(正确的答案)

“ FULL_LEAD_TIME”

即使正确的答案像“待匹配字符串”那样具有“提前期”,但它根本不与待匹配字符串匹配。为什么?并以某种方式使看起来不像待匹配字符串的其他匹配。为什么?我现在很笨。

Jac*_*ree 12

另一个答案在一个关键方面是错误的 - 结果与一种情况process.extract相同的推断fuzz.partial_ratio,因此默认情况下它们正在做同样的事情。

process.extract实际上WRatio()默认使用,是四个fuzz比率的加权组合。这实际上是一个很酷的功能,凭经验在模糊匹配场景中效果很好。

不过,您可以通过scorer参数手动指定字符串比较函数extract

来源process.extracthttps : //github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/process.py


小智 8

模糊模糊比较中有四个比率。

  • base_ratio:两个字符串的编辑距离。
  • partial_ratio: 最相似子串的比率。
  • token_sort_ratio:在比较之前对标记进行排序的序列相似性的度量。
  • token_set_ratio:查找每个字符串中的所有字母数字标记。

更多关于配给的细节可以在这里找到http://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/

默认情况下process.extract()使用Partial_ratio的比较,但你也可以用第三个参数来覆盖它process.extract()

前任。

print(fuzz.partial_ratio('Total replenishment lead time (in workdays)', 'Lead_time_planning'))
query = 'Total replenishment lead time (in workdays)'
choices = ['PLANNING_TIME_FENCE_CODE', 'BUILD_IN_WIP_FLAG','Lead_time_planning']
print(process.extract(query, choices))
Run Code Online (Sandbox Code Playgroud)

结果将是:

50
[('Lead_time_planning', 50), ('PLANNING_TIME_FENCE_CODE', 38), ('BUILD_IN_WIP_FLAG', 26)]
Run Code Online (Sandbox Code Playgroud)

这表明它默认使用 partial_ratio,您可以随时覆盖它。

  • 覆盖示例 `process.extract(query,choices, Scorer=fuzzywuzzy.token_set_ratio` (4认同)