如何在两个文档中提取不匹配的文本

时间:2016-11-08 03:01:22

标签: python diff

假设我有两个字符串。

  

a ='我是山姆。我爱下厨。'

     

b ='我是山姆。我以前经常喝酒。'

我正在使用以下方法计算他们的相似度得分:

from difflib import SequenceMatcher
s = SequenceMatcher(lambda x: x == " ",a,b)
print s.ratio()

现在我想在两个字符串中打印不匹配的句子。喜欢这个

  

a ='我喜欢烹饪。'

     

b ='我以前经常喝酒。'

我可以用什么模块或方法来做这个建议?我在difflib https://pymotw.com/2/difflib/中看到了一个模块但是在这里它用(+, - ,!,...)打印我不希望以那种格式输出。

2 个答案:

答案 0 :(得分:0)

这是一个非常简单的脚本。但我希望它能让你了解如何做到:

a = 'I am Sam. I love cooking.'    
b = 'I am sam. I used to drink a lot.'

a= a.split('.')
b=b.split('.')

ca=len(a)
cb=len(b)

if ca>cb:l=cb
else :l=ca

c=0

while c<l:
    if a[c].upper() == b[c].upper():pass
    else:print b[c]+'.'
    c=c+1

答案 1 :(得分:0)

使用difflib。您可以轻松地对difflib.Differ的输出进行后处理,以去除每个单元的前两个字符,并将它们转换为您想要的任何格式。或者,您可以使用SequenceMatcher.get_matching_blocks返回的路线,并生成自己的输出。

这是你怎么做的。如果这不是您想要的,编辑您的问题,以提供一个不那么简单的比较示例和您需要的输出格式。

differ = difflib.Differ()
for line in differ.compare(list1, list2):
    if line.startswith("-"):
        print("a="+line[2:])
    elif line.startswith("+"):
        print("b="+line[2:])
    # else just ignore the line