我正在使用 google-diff-match-patch比较自然语言中的纯文本。
如何让 google-diff-match-patch 忽略某些字符?
(我不在乎的一些微小差异。)
例如,给定 text1:
give me a cup of bean-milk. Thanks.
和文本2:
please give mom a cup of bean milk! Thank you.
(请注意,“谢谢”之前有两个空格字符。)
google-diff-match-patch 输出如下内容:
[please] give m(e)[om] a cup of bean(-)[ ]milk(.)[!] Thank(s)[ you].
似乎 google-diff-match-patch 只忽略了不同数量的空格。
我如何告诉 google-diff-match-patch 也忽略像
[-.!]
这样的字符?预期的结果是
[please] give m(e)[om] a cup of bean-milk. Thank(s)[ you].
谢谢。
最佳答案
google-diff-match-patch 可以输出元组列表
第一个元素指定它是插入 (1)、删除 (-1) 还是相等 (0)。第二个元素指定受影响的文本。
例如:
diff_main("Good dog", "Bad dog") => [(-1, "Goo"), (1, "Ba"), (0, "d dog")]
因此我们只需要过滤这个列表。
Python中的示例代码:
Ignored_marks = re.compile('[ ,\.;:!\'"?-]+$')
def unmark_minor_diffs(diffs): #diffs are list of tuples produced by google-diff-match-patch
cooked_diffs = []
for (op, data) in diffs:
if not Ignored_marks.match(data):
cooked_diffs.append((op, data))
else:
if op in (0, -1):
cooked_diffs.append((0, data))
return cooked_diffs
关于nlp - 在 google-diff-match-patch 中执行 diff 时如何忽略某些字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12578408/