问题标签 [difflib]

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 回答
5758 浏览

python - 使用 difflib.get_close_matches() 忽略大小写

如何告诉 difflib.get_close_matches() 忽略大小写?我有一本字典,它有一个定义的格式,包括大写。但是,测试字符串可能有全大写或没有大写,它们应该是等价的。但是,结果需要正确大写,所以我不能使用修改过的字典。

输出:

工作代码:

根据 Hugh Bothwell 的回答,我对代码进行了如下修改以获得一个可行的解决方案(当返回多个结果时它也应该有效):

输出:

0 投票
1 回答
1682 浏览

python - difflib.SequenceMatcher get_matching_blocks() 出现无法解释的行为

我正在尝试fuzzywuzzy,并遇到了很多情况下它会产生错误的结果。我尝试调试并遇到了一个难以解释的 get_matching_blocks() 场景。

我对 get_matching_blocks() 的理解是,它应该返回一个三元组 (i,j,n),其中n索引处第一个字符串中长度的子字符串应与索引 处第二个字符串i中长度的子字符串完全匹配nj.

那么为什么上面的代码找不到匹配的块呢?

0 投票
3 回答
248 浏览

python - 使用设置差异来获取缺失值的行号

我有两个列表,我使用以下函数来分配行号(类似于 unix 中的 nl):

这将返回列表,如:1: 12 14 2: 20 49 3: 21 28。对于infile我正在使用的,行号非常重要。我的第二个列表的结构相同,但行号没有任何意义。我需要从第二个文件中找到列表差异并从第一个文件中返回行号。例如:如果第二个文件有:5: 12 14 48: 20 49我只想返回3第一个列表中缺失值的行号。

这是我尝试过的:

返回:[12 14\n', '20 49\n', '21 28\n']-- 显然不是我需要的。有任何想法吗?

0 投票
1 回答
2906 浏览

python - Python difflib 中的 SequenceMatcher 是否有可能提供一种更有效的方法来计算 Levenshtein 距离?

这是计算 Levenshtein 距离的通用算法的教科书示例(我从Magnus Hetland 的网站中提取):

但是,我想知道是否可能存在使用 difflib 的 SequenceManager 的更高效(并且可能更优雅)的纯 Python 实现。在玩了它之后,这就是我想出的:

我想不出一个失败的测试用例,而且性能似乎明显优于标准算法。

以下是依赖 difflib 的 levenshtein 算法的结果:

这是标准的纯python实现:

使用 difflib 的 SequenceMatcher 算法的性能真的更好吗?或者它是否依赖于完全使比较无效的 C 库?如果它依赖于 C 扩展,我如何通过查看 difflib.py 实现来判断?

使用 Python 2.7.3 [GCC 4.2.1 (Apple Inc. build 5666)]

在此先感谢您的帮助!

0 投票
2 回答
2337 浏览

python - 作者姓名的近似字符串匹配 - 模块和策略

我创建了一个小程序来检查作者是否存在于作者数据库中。我无法找到任何特定的模块来解决这个问题,所以我使用模块从头开始编写它以进行近似字符串匹配。

该数据库包含大约 6000 位作者,并且格式很差(许多拼写错误、变体、诸如“博士”之类的标题等)。查询作者列表通常在 500-1000 之间(我有很多这样的列表),因此速度非常重要。

我的一般策略是尽可能地修剪和过滤数据库并寻找精确匹配。如果没有找到匹配项,我将继续进行近似字符串匹配。

我目前正在使用内置的,difflib.get_close_matches它完全符合我的要求 - 但是,它非常慢(几分钟)。因此,我正在寻找其他选择:

  • 什么是最快的模块,它可以返回最好的,比如说,在数据库中给出查询字符串的某个阈值以上的 3 个匹配?
  • 比较两个字符串最快的模块是什么?

我发现的唯一一个是fuzzy wuzzy,它甚至比difflib 还要慢。

0 投票
0 回答
2456 浏览

python - difflib 的 charjunk 可以用来忽略空格吗?

我想比较两个字符串列表之间的差异。出于我的目的,空白是噪音,不需要显示这些差异。阅读difflib 的文档,“默认 [for charjunk] 是模块级函数IS_CHARACTER_JUNK(),它过滤掉空白字符”。完美,除非我认为它不起作用,或者没有太大的不同(<- 双关语!)。

输出:

我尝试了其他一些linejunk选项,但没有一个实际上忽略了空格导致的差异。我对什么有错误的解释charjunk吗?

作为旁注,我可以通过预处理我的字符串以使用re.sub(r'\W+', ' ', 'foo\t bar').

0 投票
3 回答
3231 浏览

python - 在python中比较两个字符串

好吧,我需要比较两个字符串,或者至少找到从一个字符串到另一个字符串的字符序列。这两个字符串包含md5我必须比较的文件并说出我是否找到匹配项。

我当前的代码是:

我得到的输出是:

因此!有一个匹配项dlmd5origmd5但不知何故找不到它......我在某处做错了什么......请帮帮我:/

0 投票
2 回答
46773 浏览

python - python difflib比较文件

我正在尝试使用 difflib 为包含推文的两个文本文件生成差异。这是代码:

这是PTITVProgs文本文件:

这是new_tweets文本文件:

这是我从程序中得到的差异:

通过快速比较两个源文件(PTITVProgs 和 new_tweets)可以看出,它们之间的区别在于4 月 7 日的3条推文和 4 月 3 日的 3 条推文。

我只希望new_tweets那些不在差异中的行PTITVProgs出现在差异中。

但它会抛出一堆我不想看到的文本。我不知道差异输出代表什么*** 1,7***和...?获取更改的行*** 1,3***的正确方法是什么?

0 投票
3 回答
1803 浏览

python - Python Difflib - 如何通过“更改”操作获取 SDiff 序列

我正在阅读 Python 的diffllib的文档。根据每个文档,Differ delta 给出了一个序列

但是“更改”操作呢?如何获得类似于 Perl 的 sdiff中结果的“c”指令?

0 投票
3 回答
7688 浏览

python - 在python中比较字符串时忽略空格

我正在使用 difflib python 包。无论我是否设置isjunk参数,计算的比率都是相同的。isjunkis 时不忽略空格的差异lambda x: x == " "吗?