2012-09-25 59 views
4

我使用google-diff-match-patch來比較自然語言中的純文本。如何在google-diff-match-patch中做差異時忽略某些字符?

如何讓Google-diff-match-patch忽略某些字符? (一些微小的差異,我不關心。)

例如,給定文本1:

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

感謝。

回答

1

谷歌的Diff-匹配貼片可以輸出元組

第一元素指定,如果它是一個插入的列表(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