2

2 つのバージョンのテキストがあり、Google ドキュメントやスタック オーバーフローに表示されるものと同様のリビジョンの HTML ビューを作成したいと考えています。これをPythonで行う必要があります。この手法が何と呼ばれているかはわかりませんが、名前があり、うまくいけばそれを実行できる Python ライブラリがあると思います。

バージョン 1:

ウィリアム ヘンリー "ビル" ゲイツ III (1955 年 10 月 28 日生まれ)[2] は、アメリカの実業家であり、慈善家であり、ポール アレンと共に設立したソフトウェア会社であるマイクロソフトの会長[3] です。

バージョン 2:

William Henry "Bill" Gates III (1955 年 10 月 28 日生まれ)[2] は、実業家であり、慈善家であり、Paul Allen と共に設立したソフトウェア会社である Microsoft の会長[3] です。彼はアメリカ人です。

望ましい出力:

ウィリアム ヘンリー "ビル" ゲイツ III (1955 年 10 月 28 日生まれ)[2] は、アメリカの実業家であり、慈善家であり、ポール アレンと共に設立したソフトウェア会社であるマイクロソフトの会長[3] です。 彼はアメリカ人です。

diff コマンドを使用しても、どの行が異なるかはわかりますが、どの列/単語が異なるかはわかりません。

$ echo 'William Henry "Bill" Gates III (born October 28, 1955)[2] is an American business magnate, philanthropist, and chairman[3] of Microsoft, the software company he founded with Paul Allen.' > oldfile
$ echo 'William Henry "Bill" Gates III (born October 28, 1955)[2] is a business magnate, philanthropist, and chairman[3] of Microsoft, the software company he founded with Paul Allen.  He is American.' > newfile
$ diff -u oldfile newfile
--- oldfile 2010-04-30 13:32:43.000000000 -0700
+++ newfile 2010-04-30 13:33:09.000000000 -0700
@@ -1 +1 @@
-William Henry "Bill" Gates III (born October 28, 1955)[2] is an American business magnate, philanthropist, and chairman[3] of Microsoft, the software company he founded with Paul Allen.
+William Henry "Bill" Gates III (born October 28, 1955)[2] is a business magnate, philanthropist, and chairman[3] of Microsoft, the software company he founded with Paul Allen.  He is American.' > oldfile
4

3 に答える 3

1

Google Diff Merge Patchには、純粋な python でのかなり優れた diff 実装があります。

于 2010-04-30T21:01:18.150 に答える
0

difflibモジュールは、この問題に役立つ可能性があります。

于 2010-04-30T21:02:23.233 に答える
0

wdiffを使用できます。Python の実装があるかどうかはわかりません。

$ wdiff oldfile newfile
William Henry "Bill" Gates III (born October 28, 1955)[2] is [-an American-] {+a+} business magnate, philanthropist, and chairman[3] of Microsoft, the software company he founded with Paul Allen.  {+He is American.+}
于 2010-04-30T20:56:33.520 に答える