5

自然言語のプレーンテキストを比較するためにgoogle-diff-match-patchを使用しています。

特定の文字を無視するように google-diff-match-patch を作成するにはどうすればよいですか? (私が気にしないいくつかの小さな違い。)

たとえば、text1 が与えられた場合:

give me a cup of bean-milk. Thanks.

と text2:

please give mom a cup of bean milk!  Thank you.

(「Thank you」の前に 2 つのスペース文字があることに注意してください。)

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].

ありがとう。

4

1 に答える 1

2

google-diff-match-patch はタプルのリストを出力できます

最初の要素は、挿入 (1)、削除 (-1)、または等価 (0) のいずれであるかを指定します。2 番目の要素は、影響を受けるテキストを指定します。

例えば:

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
于 2012-09-25T08:22:45.553 に答える