nlp - 在 google-diff-match-patch 中执行 diff 时如何忽略某些字符?

标签 nlp diff text-processing

我正在使用 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/

相关文章:

c# - 替换大文本文件中的长列表单词

linux - 将 'git status' 和 find 命令与 mmin 或 mtime 选项结合起来

diff - 是否有任何开源二进制文件不同?

nlp - 最好的交 key 关系检测库?

python - 在 python 3 中匹配和替换多个字符串的有效方法?

git - 如何将补丁应用于 git,包括新文件和提交消息?

bash - 文本处理 - 如何使用 sed 从搜索结果中删除部分字符串?

python - Nltk 斯坦福 pos 标记器错误 : Java command failed

python - 从 python3.3 中的两个嵌套列表添加一元值

python - Huggingface 上的 mT5 模型可以用于机器翻译吗?