python fuzzywuzzy的process.extract():它是如何工作的?

2024-05-19 12:04:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解python模块fuzzywuzzy的函数process.extract()是如何工作的?

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

1) Out Of Order
2) Token Sort
3) Token Set

然后,在这篇文章中: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)上找到的定义/信息,这个函数:

Find best matches in a list or dictionary of choices, return a list of tuples containing the match and it's score. If a dictionary is used, also returns the key for each match.

但是,它没有提供如何找到最好的细节?我上面提到的三个场景都找到了吗?

我问这个问题的原因是,当我使用这个函数时,有时有两个字符串非常相似,但不匹配。

例如,在我当前的示例数据集中

"Total replenishment lead time (in workdays)"

它与

"PLANNING_TIME_FENCE_CODE", "BUILD_IN_WIP_FLAG"

但不是(正确答案)

"FULL_LEAD_TIME"

即使正确的答案和待匹配字符串一样有“提前期”,但它与待匹配字符串根本不匹配。为什么?不知怎么的,其他看起来不像是匹配字符串的字符串也会被匹配。为什么?我现在完全糊涂了。


Tags: and函数字符串inhttpscomtoken信息
1条回答
网友
1楼 · 发布于 2024-05-19 12:04:05

模糊模糊比较有四个比例。

  • base_ratio:两个字符串的Levenshtein距离。
  • 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))

结果将是:

50
[('Lead_time_planning', 50), ('PLANNING_TIME_FENCE_CODE', 38), ('BUILD_IN_WIP_FLAG', 26)]

这表明它在默认情况下使用部分比例,您可以随时覆盖。

相关问题 更多 >

    热门问题