我正在编写一个代码,该代码使用模糊字符串匹配将用户输入的数据帧(经过一些清理后的字符串列表的数据帧)与感兴趣的特定单词进行匹配。我使用Python Pandas来处理数据帧,使用FuzzyWuzzy包来匹配字符串。我在 Anaconda 的Jupyter中做所有事情 notebook 中做所有事情。
代码工作得很好(它有大约 90% 的匹配准确度),我正处于试图找出为什么代码在某些情况下给出误报或误报的阶段。该代码仅标记 FuzzyWuzzyprocess.extractOne()
函数得分高于 80 分的匹配项。
然而,我偶然发现了一个奇怪的问题:在一个单元格中,测试人员输入的只是一个['x']
,而且它仍然被标记为'minimax'
一个感兴趣的词,这意味着它的分数一定在 80 以上,但它绝对不应该是。
似乎模块fuzzywuzzy.fuzz
并fuzzywuzzy.process
产生不同的结果。
这是预期的,分数fuzz.ratio()
足够低:
In [1]: fuzz.ratio('x', 'minimax')
Out [1]: 25
这是我实际使用的代码,其结果与上一个不匹配:
In [2]: process.extractOne('minimax', ['x'])
Out [2]: ('x', 90)
我检查并测试了代码的许多变体,无论process.extractOne
函数的哪个参数包含“x”,问题仍然存在。同样更改字符串中x的位置(例如, )也不会改变分数。当我使用不同的过程函数(例如)时也是如此。'minimax'
'xminima'
'mixnima'
process.Bests()
可能是什么问题呢?是我用错了功能还是包错了?不要忘记,在大多数情况下,我的代码都能正常工作。