【问题标题】:How to ignore certain characters while doing diff in google-diff-match-patch?在 google-diff-match-patch 中进行 diff 时如何忽略某些字符?
【发布时间】:2012-09-16 16:51:29
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: nlp diff text-processing


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-08
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多