问题标签 [fuzzywuzzy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
12523 浏览

python - Python中的模糊字符串匹配

我有 2 个超过一百万个名称的列表,命名约定略有不同。这里的目标是匹配那些相似的记录,具有 95% 的置信度的逻辑。

我知道有些库可以利用,例如 Python 中的 FuzzyWuzzy 模块。

但是,在处理方面,将一个列表中的每个字符串与另一个进行比较似乎会占用太多资源,在这种情况下,这似乎需要 100 万次乘以另外 100 万次迭代。

对于这个问题还有其他更有效的方法吗?

更新:

所以我创建了一个桶函数并应用了一个简单的规范化删除空格、符号并将值转换为小写等......

通过使用 pythons pandas,将数据加载到按年份分组的较小存储桶中,然后使用 FuzzyWuzzy 模块process.extractOne来获得最佳匹配。

结果仍然有些令人失望。在测试期间,上面的代码用于仅包含 5000 个名称的测试数据帧,并且占用了将近一个小时。

测试数据被分割。

  • 姓名
  • 年份 出生日期 月份

我正在通过它们的 YM 在同一个存储桶中的存储桶来比较它们。

问题可能是因为我使用的 FuzzyWuzzy 模块吗?感谢任何帮助。

0 投票
1 回答
56 浏览

python - 使用fuzzywuzzy时cx_Freeze给出错误

我已经为 python3.4 中的调查条目构建了一个 tkinter GUI,它使用了许多包。然后我需要将它编译成一个可执行文件,这样我就可以把它放在同事的机器上(我们都在 windows7 平台上)我已经将 setup.py 构建成如下所示:

这对于大量版本来说都非常有效。但后来我添加了一个使用fuzzywuzzy 来比较字符串的功能。当我包含它并添加fuzzywuzzy到选项字典中的包列表并编译它时,当我尝试运行以结尾的 exe 时出现大错误ImportError: No module named 'Levenshtein'

我不明白,因为在我的开发中该模块工作正常。我试图包含Levenshtein在设置中,但它不作为模块存在。我没有安装 python-Levenshtein,因为我无法在我的 Windows 机器上安装 .whl。

有没有人遇到过这个?当通过python运行良好时,为什么fuzzywuzzy会导致这个错误?有什么我想念的吗?

完整的错误可以在这里看到:http: //imgur.com/a/rSKsS

编辑:我能够弄清楚 - 我需要安装 python-Levenshtein 模块,必须继续努力才能安装 .whl (显然我并不像我想相信的那样精通命令提示符) . 之后,我将Levenshtein和包含fuzzywuzzy在包列表中,并且编译没有错误。

我要留下这个,因为我在谷歌搜索中找不到这个,所以希望没有其他人成为受害者!

0 投票
1 回答
990 浏览

python - Python FuzzyWuzzy fuzz.ratio 和 process.extractOne 结果之间的意外不匹配

我正在编写一个代码,该代码使用模糊字符串匹配将用户输入的数据帧(经过一些清理后的字符串列表的数据帧)与感兴趣的特定单词进行匹配。我使用Python Pandas来处理数据帧,使用FuzzyWuzzy包来匹配字符串。我在 Anaconda 的Jupyter中做所有事情 notebook 中做所有事情。

代码工作得很好(它有大约 90% 的匹配准确度),我正处于试图找出为什么代码在某些情况下给出误报或误报的阶段。该代码仅标记 FuzzyWuzzyprocess.extractOne()函数得分高于 80 分的匹配项。

然而,我偶然发现了一个奇怪的问题:在一个单元格中,测试人员输入的只是一个['x'],而且它仍然被标记为'minimax'一个感兴趣的词,这意味着它的分数一定在 80 以上,但它绝对不应该是。

似乎模块fuzzywuzzy.fuzzfuzzywuzzy.process产生不同的结果。

这是预期的,分数fuzz.ratio()足够低:

这是我实际使用的代码,其结果与上一个不匹配:

我检查并测试了代码的许多变体,无论process.extractOne函数的哪个参数包含“x”,问题仍然存在。同样更改字符串中x的位置(例如, )也不会改变分数。当我使用不同的过程函数(例如)时也是如此。'minimax''xminima''mixnima'process.Bests()

可能是什么问题呢?是我用错了功能还是包错了?不要忘记,在大多数情况下,我的代码都能正常工作。

0 投票
4 回答
7477 浏览

python - Python中两个列表的全面比较

我正在努力解决一些性能问题。手头的任务是提取两个字符串之间的相似度值。为此,我正在使用fuzzywuzzy

但是,这没关系。我面临的问题是我有两个列表,一个有 1500 行,另一个有几千行。我需要将第一个的所有元素与第二个的所有元素进行比较。for 循环中的简单 for 将花费大量时间来计算。

如果有人建议我如何加快速度,将不胜感激。

0 投票
1 回答
3566 浏览

python - 使用 Python 的 jellyfish 模块获得最佳匹配(部分字符串匹配)

我正在尝试创建某种字典来附加我的结果并使用 jaro 距离函数获得最佳匹配。

这是我尝试匹配 2 个列表并在两者中获得最佳匹配名称的一部分。

例子:

我想做的是:

在这种情况下,我希望它返回得分最高的 2:

对于 FuzzyWuzzy 用户,我正在尝试模拟process.extractOne您可以将列表传递到其中的功能,process.extractOne(<value you want to compare>,<list of items you want to compare>)您将获得最佳匹配。

我不使用 FuzzyWuzzy 的原因只是因为处理速度太慢而且我不确定后面发生了什么,与另一个 5000 个字符串列表相比,匹配 5000 个字符串最多需要 40 分钟。

0 投票
1 回答
617 浏览

python - Python:Fuzzywuzzy 不适用于外来字符

当我尝试使用外来字符的简单模糊模糊表达式时,使用 process.extractOne 方法得到错误结果(我尝试过使用和不使用 u):

然而,对于 fuzz.ratio,它运行平稳:

相同的代码适用于常规字符:

可能是什么问题?

0 投票
0 回答
559 浏览

python - FuzzyWuzzy 使用两个熊猫数据框 python

我想找到两个数据帧中字符串的 fuzz.ratio。假设我有 2 个数据帧 df,其中 A、B 列和 bt_df 列 A1、B1 .. 我想比较列 df['B'] 和 bt_df['B1'] 并返回最佳匹配分数及其对应的 id在 df[A] 和 .

提前致谢。

0 投票
0 回答
226 浏览

php - Fuzzywuzzy 显示类 Diff_SequenceMatcher 未找到

当我使用 Phalcon 用 PHP 编写的 Diff_SequenceMatcher 扩展 SequenceMatcher 类时。这表明,在fuzzywuzzy中找不到类?

0 投票
1 回答
986 浏览

python - Python的fuzzywuzzy返回不可预测的结果

我在python中使用fuzzy wuzzy,虽然它声称它适用于levenshtein距离,但我发现许多具有单个字符不同的字符串会产生不同的结果。例如。

我想 levenshtein 距离应该与所有示例中的单个字符距离相同,但我知道这不是简单的距离,它是某种“平等百分比”。

我试图了解它是如何工作的,但我似乎无法理解。我很长的字符串给出了 97,而很短的字符串给出了 67。我想这意味着字符串越大,对单个字符的影响就越小。但是对于 "vendor","vendora" 和 "estagiário","estagiária" 示例,情况并非如此,因为后者比前者大。

这是如何运作的?

我目前正在匹配用户输入的职位,尝试将输入错误的名称与正确输入的名称等联系起来。我的任务是否有更好的包?

0 投票
1 回答
911 浏览

python - 从模糊模糊 partial_ratio 获得不正确的分数

我对 Python 相当陌生,我正在尝试使用模糊 wuzzy 进行模糊匹配。我相信我使用 partial_ratio 函数得到的匹配分数不正确。这是我的探索性代码:

我相信这应该返回 100 分,因为第二个字符串“Barbil”包含在第一个字符串中。当我尝试在第一个字符串的末尾或开头删除几个字符时,我得到的匹配分数为 100。

当第一个字符串的长度变为 199 时,它似乎从 50 分变为 100 分。有没有人知道可能发生什么?