如何提取两个文档中不匹配的文本
How to extract non-matching text in two documents
假设我有两个字符串。
a = 'I am Sam. I love cooking.'
b = 'I am sam. I used to drink a lot.'
我正在计算他们的相似度得分:
from difflib import SequenceMatcher
s = SequenceMatcher(lambda x: x == " ",a,b)
print s.ratio()
现在我想在两个字符串中打印不匹配的句子。像这样
a = 'I love cooking.'
b = 'I used to drink a lot.'
任何建议,比如我可以使用什么模块或方法来做到这一点?我在 difflib 中看到了一个模块 https://pymotw.com/2/difflib/ 但是在这个模块中它打印了 (+,-,!,...) 我不想要那种格式的输出。
这是一个非常简单的脚本。但我希望它能让你知道如何做:
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
使用difflib
。您可以轻松地 post 处理 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
假设我有两个字符串。
a = 'I am Sam. I love cooking.'
b = 'I am sam. I used to drink a lot.'
我正在计算他们的相似度得分:
from difflib import SequenceMatcher
s = SequenceMatcher(lambda x: x == " ",a,b)
print s.ratio()
现在我想在两个字符串中打印不匹配的句子。像这样
a = 'I love cooking.'
b = 'I used to drink a lot.'
任何建议,比如我可以使用什么模块或方法来做到这一点?我在 difflib 中看到了一个模块 https://pymotw.com/2/difflib/ 但是在这个模块中它打印了 (+,-,!,...) 我不想要那种格式的输出。
这是一个非常简单的脚本。但我希望它能让你知道如何做:
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
使用difflib
。您可以轻松地 post 处理 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