标签: difflib

Difflib.SequenceMatcher isjunk可选参数查询:如何忽略空格,制表符,空行?

我正在尝试使用Difflib.SequenceMatcher来计算两个文件之间的相似性.这两个文件几乎相同,只是一个包含一些额外的空格,空行和其他文件没有.我正在尝试使用

s=difflib.SequenceMatcher(isjunk,text1,text2)
ratio =s.ratio()
Run Code Online (Sandbox Code Playgroud)

以此目的.

所以,问题是如何为这个isjunk方法编写lambda表达式,所以SequenceMatcher方法将折扣所有的空格,空行等.我试图使用参数lambda x:x =="",但结果不是太棒了 对于两个非常相似的文本,比率非常低.这非常反直觉.

出于测试目的,以下是您可以在测试时使用的两个字符串:

什么激励jwovu做好你的工作?好吧,这是一个试图赢得价值100美元的软件开发书籍的条目,尽管我不读

编程书籍.为了赢得奖品,你必须写一个条目,以及
什么激励fggmum做好你的工作.因此这篇文章.第一动机

钱.我知道,这对许多人来说听起来并不是一个很好的灵感,并说金钱是激励因素之一,可能会让我失去机会.

好像金钱是编程世界的禁忌.我知道有些人不能被钱所激励.嗯,另一方面,我生活在一个现实世界中,

房屋抵押支付,我自己喂和账单覆盖.所以我无法将钱从我的考虑中排除.如果我能得到一大笔钱

做得好,然后肯定会提高我的士气.我不在乎我是使用旧工作站,还是被迫与其他人共用房间或隔间

人们,或者不得不忍受讨厌的老板,或其他什么.事实上,在一天结束的时候,我将带着一大笔钱走下去就足够了

为了我克服所有的障碍,忍受所有的艰难感受和伤害自我,容忍一台缓慢的计算机,甚至忍受

这是另一个字符串

是什么激励你做好你的工作?好吧,这是一个试图赢得价值100美元的软件开发书籍的条目,尽管我不读编程书籍.为了赢得奖品,你必须写一个条目,并描述促使你做好工作的动力.因此这篇文章.

第一个动机,钱.我知道,这对许多人来说听起来并不是一个很好的灵感,并说金钱是激励因素之一,可能会让我失去机会.好像金钱是编程世界的禁忌.我知道有些人不能被钱所激励.感谢他们.另一方面,我生活在一个现实世界中,房屋抵押贷款支付,我自己饲料和账单.所以我无法将钱从我的考虑中排除.

如果我可以获得一大笔钱来做好工作,那那肯定会提振我的士气.我不在乎我是使用旧工作站,还是被迫与其他人共用房间或隔间,或者不得不忍受烦人的老板等等.事实上,在一天结束的时候,我将带着一大笔钱离开,这足以让我克服所有障碍,忍受所有的艰难感受和伤害自我,忍受慢速计算机,甚至忍受

我运行了上面的命令,并将isjunk设置为lambda x:x =="",比率仅为0.36.

python lambda difflib

2
推荐指数
1
解决办法
2050
查看次数

difflib输出很奇怪,在每个字符上添加额外的空格

我正在使用Python中的difflib,我在使输出看起来很好时遇到了一些困难.出于某些奇怪的原因,difflib在每个字符前添加一个空格.例如,我有一个文件(textfile01.txt),如下所示:

测试没有意义的文本

和textfile02.txt

测试没有意义的文本

但看起来不错

这是一个关于我如何完成比较的小代码示例:

import difflib

handle01 = open(text01.txt , 'r')
handle02 = open(text02.txt , 'r')

d = difflib.ndiff( handle01.read() , handle02.read() )
print "".join(list(diff))
Run Code Online (Sandbox Code Playgroud)

然后,我得到这个丑陋的输出看起来......非常奇怪:

testtextwhichhasnomea nin g-

- b- u- t- - l- o- o- k- s- - n-c-e

如你所见,输出看起来很糟糕.我刚刚在网上找到了基本的difflib教程,根据这些教程,输出应该看起来完全不同.我不知道我做错了什么.有任何想法吗?

python difflib

2
推荐指数
1
解决办法
1308
查看次数

按单词匹配更改,而不是按字符

我正在使用difflib's SequenceMatchertoget_opcodes()而不是突出显示更改css以创建某种 web diff

首先,我设置 amin_delta以便我认为两个字符串不同,如果整个字符串中只有 3 个或更多字符不同,一个接一个(delta意味着一个真实的,遇到的增量,它总结了所有一个字符的变化):

matcher = SequenceMatcher(source_str, diff_str)
min_delta = 3
delta = 0

for tag, i1, i2, j1, j2 in matcher.get_opcodes():
    if tag == "equal":
        continue  # nothing to capture here
    elif tag == "delete":
        if source_str[i1:i2].isspace():
            continue  # be whitespace-agnostic
        else:
            delta += (i2 - i1)  # delete i2-i1 chars
    elif tag == "replace":
        if source_str[i1:i2].isspace() or diff_str[j1:j2].isspace():
            continue  # be whitespace-agnostic …
Run Code Online (Sandbox Code Playgroud)

python string diff difflib python-3.x

2
推荐指数
1
解决办法
1445
查看次数

提取段落中与列表中单词相似的单词

我有以下字符串:

"The boy went to twn and bought sausage and chicken. He then picked a tddy for his sister"
Run Code Online (Sandbox Code Playgroud)

要提取的单词列表:

["town","teddy","chicken","boy went"]
Run Code Online (Sandbox Code Playgroud)

注意:town 和 teddy 在给定的句子中拼写错误。

我尝试了以下方法,但我得到了不属于答案的其他词:

import difflib

sent = "The boy went to twn and bought sausage and chicken. He then picked a tddy for his sister"

list1 = ["town","teddy","chicken","boy went"]

[difflib.get_close_matches(x.lower().strip(), sent.split()) for x in list1 ]
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

[['twn', 'to'], ['tddy'], ['chicken.', 'picked'], ['went']]
Run Code Online (Sandbox Code Playgroud)

代替:

'twn', 'tddy', 'chicken','boy went'
Run Code Online (Sandbox Code Playgroud)

python difflib python-3.x

2
推荐指数
1
解决办法
109
查看次数

在Python中,是否可以将生成器(context_diff)输出写入文本文件?

difflib.context_diff方法返回一个生成器,显示2个比较字符串的不同行.如何将结果(比较)写入文本文件?

在这个示例代码中,我想要从第4行到文本文件末尾的所有内容.

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)  # doctest: +NORMALIZE_WHITESPACE
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
  guido
--- 1,4 ----
! python
! eggy
! hamster
  guido
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python generator difflib

0
推荐指数
1
解决办法
1355
查看次数

计算python中的字符串差异

我试图计算python中两个字符串之间不同的字符数.理想情况下,我想要一个函数,就像在C中的strdif一样.我在python的difflib中看到ndiff,但是返回一个Differ对象,而我想要一个简单的整数(例如:"10011"vs"00110"返回3).我知道答案必须简单,但我无法理解,我宁愿使用库函数而不是自己编写

python string difflib

-3
推荐指数
1
解决办法
140
查看次数

标签 统计

difflib ×6

python ×6

python-3.x ×2

string ×2

diff ×1

generator ×1

lambda ×1