C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 文章差分を解析する方法


(過去ログ 93 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■55405 / inTopicNo.1)  文章差分を解析する方法
  
□投稿者/ ゲロッパ (1回)-(2010/11/29(Mon) 16:24:36)

分類:[.NET 全般] 

変更前後の文章の差分を検出し、どこを修正したのかを一目でわかるようにしたいのですが、
そのようなアルゴリズムはご存知でしょうか?
例えば、削除したところは取り消し線(<S>タグで囲む)で、追加したところは下線(<U>タグで囲む)としたく、
以下の例のようにしたいのです。

・入力1(変更前テキスト)
 今日はとてもいい天気です。

・入力2(変更後テキスト)
 今日はいい日和です。

・出力(修正箇所のタグ表示)
 今日は<S>とても</S>いい<S>天気</S><U>日和</U>です。

ちなみに、VB2008で実現できればと思っています。
なにとぞよろしくお願い申し上げます。
引用返信 編集キー/
■55407 / inTopicNo.2)  Re[1]: 文章差分を解析する方法
□投稿者/ PATIO (61回)-(2010/11/29(Mon) 17:43:09)
2010/11/29(Mon) 17:46:05 編集(投稿者)

既にこの手の差分を表示してくれるツールは色々ありますが、
やっている事は両方のテキストをひたすら比べて違いを検出しているだけです。
但し、言われているような事を人が文章を見て判断するのと同じレベルで
行なうのは結構骨になります。

ご自分で書かれている文章を例に考えて見てください。
ああ、プログラムで処理するイメージで考えて見てくださいね。
一文字ずつ比較して行くと考えて違う部分を検出しました。
では、何処までは違うのかを探す必要がありますね。
そうやって考えて行くと一つの違いの検出する為に実際には
先の方まで見て行く必要がある事に気がつくと思います。
短いテキストなら比較的短時間で検索できますが、
文章が長くなってくると違いを見つける度に文章の最後まで先読みして
状況判断をすると言う事を繰り返すと時間が掛かり過ぎてしまいます。
特に同じようなフレーズが繰り返し出てくるようなケースでは、
途中で見つかったからといって止められないケースも有ったりするので
より意図にあった判断をするには結局最後まで見る必要があったりします。
スピードを重視すると毎回それはやってられないので結局ある程度までで
打ち切るわけですが、そうすると判断がうまく行かないケースが出てきます。
まあ、うまく行かないケースに関してはレアケースとしてあきらめると言う
選択肢も有りますけれど。

と言うわけで何か関数を一発呼べば何とかなるというような物では無いので
自分でゴリゴリプログラムを書くしか無いのではないかと思います。
この手の文書比較のアルゴリズムも調べれば出てくるかもしれませんが、
私は自分でゴリゴリ書いてある程度の結果までであきらめました。
今はおとなしくWinMergeというプログラムを使っています。

あまり参考になってませんが、
結構泥臭い処理をしないと期待した結果を出すのは難しいと思います。

ちなみにゴリゴリロジックを書くのであれば、
VBでもVC++でもVC#でも実現する事は可能だと思います。

引用返信 編集キー/
■55408 / inTopicNo.3)  Re[1]: 文章差分を解析する方法
□投稿者/ aetos (349回)-(2010/11/29(Mon) 18:34:10)
2010/11/29(Mon) 18:36:03 編集(投稿者)

No55405 (ゲロッパ さん) に返信
> 変更前後の文章の差分を検出し、どこを修正したのかを一目でわかるようにしたいのですが、
> そのようなアルゴリズムはご存知でしょうか?

俺はアルゴリズム自体の解説はできませんが、参考文献なら

http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm

とか

http://bbs.wankuma.com/search.cgi?mode=srch&ALL=1&word=49367&logs=all

とか。
引用返信 編集キー/
■55410 / inTopicNo.4)  Re[2]: 文章差分を解析する方法
□投稿者/ PATIO (62回)-(2010/11/29(Mon) 18:56:11)
No55408 (aetos さん) に返信
> 2010/11/29(Mon) 18:36:03 編集(投稿者)
>
> 俺はアルゴリズム自体の解説はできませんが、参考文献なら
>
> http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm
>
> とか
>
> http://bbs.wankuma.com/search.cgi?mode=srch&ALL=1&word=49367&logs=all
>
> とか。

なるほど既出でしたか。
私も参考にさせてもらいます。
これって真面目に考えだすと結構骨なんですよねぇ。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -