我想了解 python 模块 fuzzywuzzy 的函数 process.extract() 是如何工作的?
我主要在这里阅读了 fuzzywuzzy 包: http ://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/,这是一篇很好的文章,解释了尝试进行模糊匹配时的不同场景。他们讨论了部分字符串相似性的几种情况:
- 故障
2)令牌排序
3)令牌集
然后,从这篇文章: https ://pathindependence.wordpress.com/2015/10/31/tutorial-fuzzywuzzy-string-matching-in-python-improving-merge-accuracy-across-data-products-and-naming -约定/ 我学会了如何使用 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”
尽管正确答案与待匹配字符串一样具有“准备时间”,但它根本不匹配待匹配字符串。为什么?不知何故,其他看起来不像待匹配字符串的字符串会被匹配。为什么?我现在很无知。
原文由 alwaysaskingquestions 发布,翻译遵循 CC BY-SA 4.0 许可协议
另一个答案在一个关键方面是错误的——推断
process.extract
的结果与fuzz.partial_ratio
在一种情况下相同,因此他们默认做同样的事情。process.extract
实际上默认使用WRatio()
,这是四个fuzz
比率的加权组合。这实际上是一个很酷的功能,根据经验,它在模糊匹配场景中运行良好。不过,您可以通过
scorer
参数手动指定字符串比较函数extract
来源
process.extract
: https ://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/process.py