2

私は現在、ある種のテキストバージョン(リビジョン)比較の視覚化を実装しており、ウィキペディアが現在のリビジョンを古いリビジョンと比較できる「履歴の表示」機能をどのように実現するかについての情報を見つけようとしています。

ここに1つの例(stackoverflowについて!)があります:

http://en.wikipedia.org/w/index.php?title=Stack_Overflow&diff=512241244&oldid=458578615

私はこれまでにいくつかのアイデアを実装し、ウィキペディアのやり方を再現しようとしました。このために、私はレーベンシュタイン距離アルゴリズム(http://en.wikipedia.org/wiki/Levenshtein_distance)を実装しました。

私が2つのリストを持っていると仮定しましょう。最初のリストを繰り返し処理し、2番目のリストの最初のリストのインデックス位置をチェックして、そこにある文字列が50%以上等しいかどうかを確認します。そうである場合は、比較ビューで両方の文字列を並べて印刷し、最初のリストの次の項目に進みます。そうでない場合は、2番目のリストの次の項目を見つけるまでチェックします。見つからない場合は、2番目のリストのフィールドを空白のままにします。(基本的には、2番目のリストの文も、たとえば最初のリストフィールドに空白のフィールドがある場合など、除外するのではなく、常に比較ビューに表示されることをお勧めします)

この方法にはいくつかの弱点があります。最初に、一部の文が削除された場合、単にそれを「忘れる」のではなく、インデックスの周りの位置を確認する必要があります。ただし、そうしてもテキストの位置が反転しないように注意する必要があります。

Javaで似たようなことを達成しようとした人はいますか?他の人やあなたがそれをどのように達成したかというコード例があれば、喜んでそれから学ぶことを検討したいと思います。

そしてもちろん、ウィキペディア(および私が想定している一般的なウィキ)がリビジョン比較に使用するアルゴリズムについて何か知っているなら、それを聞いてうれしいです。

どうもありがとう

4

2 に答える 2

4

ウィキペディアは、ウィキの階差機関がどのように機能するかを説明しています-http://en.wikipedia.org/wiki/Help: Diff

詳細については、ページの下部にあるリンクをたどることができますが、このページには使用されているテンプレートが一覧表示されています。

于 2012-09-17T19:01:29.137 に答える
3

ウィキペディアのバージョン管理以外の別の実装はdiff、Unixフレーバーシステムです。GNUは実際にソースコードをdiffで利用できるようにします。これにより、ここでアルゴリズムを確認できるようになります。

http://ftp.gnu.org/gnu/diffutils/

于 2012-09-17T18:57:35.727 に答える