问题标签 [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.
python - 使用 difflib.get_close_matches() 忽略大小写
如何告诉 difflib.get_close_matches() 忽略大小写?我有一本字典,它有一个定义的格式,包括大写。但是,测试字符串可能有全大写或没有大写,它们应该是等价的。但是,结果需要正确大写,所以我不能使用修改过的字典。
输出:
工作代码:
根据 Hugh Bothwell 的回答,我对代码进行了如下修改以获得一个可行的解决方案(当返回多个结果时它也应该有效):
输出:
python - difflib.SequenceMatcher get_matching_blocks() 出现无法解释的行为
我正在尝试fuzzywuzzy,并遇到了很多情况下它会产生错误的结果。我尝试调试并遇到了一个难以解释的 get_matching_blocks() 场景。
我对 get_matching_blocks() 的理解是,它应该返回一个三元组 (i,j,n),其中n
索引处第一个字符串中长度的子字符串应与索引 处第二个字符串i
中长度的子字符串完全匹配n
j.
那么为什么上面的代码找不到匹配的块呢?
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']
-- 显然不是我需要的。有任何想法吗?
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)]
在此先感谢您的帮助!
python - 作者姓名的近似字符串匹配 - 模块和策略
我创建了一个小程序来检查作者是否存在于作者数据库中。我无法找到任何特定的模块来解决这个问题,所以我使用模块从头开始编写它以进行近似字符串匹配。
该数据库包含大约 6000 位作者,并且格式很差(许多拼写错误、变体、诸如“博士”之类的标题等)。查询作者列表通常在 500-1000 之间(我有很多这样的列表),因此速度非常重要。
我的一般策略是尽可能地修剪和过滤数据库并寻找精确匹配。如果没有找到匹配项,我将继续进行近似字符串匹配。
我目前正在使用内置的,difflib.get_close_matches
它完全符合我的要求 - 但是,它非常慢(几分钟)。因此,我正在寻找其他选择:
- 什么是最快的模块,它可以返回最好的,比如说,在数据库中给出查询字符串的某个阈值以上的 3 个匹配?
- 比较两个字符串最快的模块是什么?
我发现的唯一一个是fuzzy wuzzy,它甚至比difflib 还要慢。
python - difflib 的 charjunk 可以用来忽略空格吗?
我想比较两个字符串列表之间的差异。出于我的目的,空白是噪音,不需要显示这些差异。阅读difflib 的文档,“默认 [for charjunk
] 是模块级函数IS_CHARACTER_JUNK()
,它过滤掉空白字符”。完美,除非我认为它不起作用,或者没有太大的不同(<- 双关语!)。
输出:
我尝试了其他一些linejunk
选项,但没有一个实际上忽略了空格导致的差异。我对什么有错误的解释charjunk
吗?
作为旁注,我可以通过预处理我的字符串以使用re.sub(r'\W+', ' ', 'foo\t bar')
.
python - 在python中比较两个字符串
好吧,我需要比较两个字符串,或者至少找到从一个字符串到另一个字符串的字符序列。这两个字符串包含md5
我必须比较的文件并说出我是否找到匹配项。
我当前的代码是:
我得到的输出是:
因此!有一个匹配项dlmd5
,origmd5
但不知何故找不到它......我在某处做错了什么......请帮帮我:/
python - python difflib比较文件
我正在尝试使用 difflib 为包含推文的两个文本文件生成差异。这是代码:
这是PTITVProgs
文本文件:
这是new_tweets
文本文件:
这是我从程序中得到的差异:
通过快速比较两个源文件(PTITVProgs 和 new_tweets)可以看出,它们之间的区别在于4 月 7 日的3条推文和 4 月 3 日的 3 条推文。
我只希望new_tweets
那些不在差异中的行PTITVProgs
出现在差异中。
但它会抛出一堆我不想看到的文本。我不知道差异输出代表什么*** 1,7***
和...?仅获取更改的行*** 1,3***
的正确方法是什么?
python - 在python中比较字符串时忽略空格
我正在使用 difflib python 包。无论我是否设置isjunk
参数,计算的比率都是相同的。isjunk
is 时不忽略空格的差异lambda x: x == " "
吗?