#クロスポスト先注意。内容に応じて適宜絞ってください。
現在、テキストファイルの差分をとるツールを探しています。
行単位での差分ならば UNIX の diff コマンド
(Windows 版は http://www.vector.co.jp/soft/winnt/prog/se015009.html
あたりから引っ張ってくればいいでしょう)で取れますが、
文字単位で差分をとりたいのです。たとえば、
[file1.txt]
現在、テキストの差分をとる<改行>
ツールを探しています。行単<改行>
位での差分ならば…以下略
[file2.txt]
テキストファイルの差分をと<改行>
るツールを探しています。行<改行>
単位での差分ならば…以下略
という場合に、diff では「file1.txt の 1 行目から x 行目までと、
file2 の 1 行目から y 行目までが違う」という結果を出しますが、
「file1 から file2 では、『現在、』がなくなり、『ファイル』が
追加された」という情報を出してくれるものがほしいのです。
文字コードは、とりあえず Shift_JIS か EUC-JP の決め打ちでいいの
ですが、これに ISO-2022-JP を加えた三者の自動判別ができればなお可。
動作環境は、次のどれかで動くものを。
○Windows 98 で動くバイナリ、または Visual C++ 4.0(^^;) か
LSI C-86 3.30C 試食版あたりでコンパイル可能なソース
○FreeBSD 3.4(x86)か Solaris 2.6(SPARC)で動くバイナリ、
またはこれらの上の gcc でコンパイル可能なソース
○Perl 5.005_03(Windows なら ActivePerl build 5xx)で
動作するスクリプト
○Netscape 4.73 で動作する JavaScript スクリプト
○一太郎 8、Word 98、秀丸 3.05 で動くマクロ
○その他いろいろあるけど省略
出力形式は特にこだわりませんが、たとえば HTML か RTF(rich text
format)あたりの形式で
<s>現在、</s>テキスト<b>ファイル</b>の差分をとる
ツールを探しています。行単位での差分ならば…
のように(<s>...</s>=取消線、<b>...</b>=太字)ファイルに保存
できればうれしいです。
#ひょっとして、diff にオプションをつければそれで簡単に
#できるのかな?
なければ自作する用意はあるので、この手の差分検出アルゴリズムに
関する情報もあればよろしくお願いします。
☆------ Delmonta / IIJIMA Hiromitsu (飯嶋 浩光) -------------------☆
【宣伝】EmacsのVZ+ATOK+カナ入力化など外道カスタマイズの数々
近日メールマガジン配信再開予定
http://user.ecc.u-tokyo.ac.jp/~l94102/emacs/
☆------ L94...@mail.ecc.u-tokyo.ac.jp / delm...@ht.sakura.ne.jp --☆
> 現在、テキストファイルの差分をとるツールを探しています。
> 行単位での差分ならば UNIX の diff コマンド
> (Windows 版は http://www.vector.co.jp/soft/winnt/prog/se015009.html
> あたりから引っ張ってくればいいでしょう)で取れますが、
> 文字単位で差分をとりたいのです。たとえば、
英語であれば wdiff が即座に思い浮かびます。日本語には使えませんが。
http://www.fsf.org/software/wdiff/wdiff.html
docdiff というものがあるらしいですが、どこにあるのかは知りません。
http://www.topstudio.co.jp/~kmuto/d/?2001020&to=2001020711#2001020711
ちなみに、
#!/bin/sh
tmp1=/tmp/jwdiff$$-1
tmp2=/tmp/jwdiff$$-2
trap "rm -f $tmp1 $tmp2" 0 1 2 3 15
cat "$1" |nkf -e|kakasi -s > $tmp1
cat "$2" |nkf -e|kakasi -s > $tmp2
wdiff $tmp1 $tmp2|tr -d ' '
という wrapper を使っていたこともありましたが、あまりうまくないですね。
> なければ自作する用意はあるので、この手の差分検出アルゴリズムに
> 関する情報もあればよろしくお願いします。
http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm とか?
--
[田中 哲][たなか あきら][Tanaka Akira]
「ああ、それは大丈夫だよぉ。カイロを持って行くもぉん⊇」
(気象精霊記2 爆弾気分の低気圧, 清水文化)
<3A83C0E4...@ht.sakura.ne.jp>の記事において
delm...@ht.sakura.ne.jpさんは書きました。
> 現在、テキストファイルの差分をとるツールを探しています。
> 行単位での差分ならば UNIX の diff コマンド
> (Windows 版は http://www.vector.co.jp/soft/winnt/prog/se015009.html
> あたりから引っ張ってくればいいでしょう)で取れますが、
> 文字単位で差分をとりたいのです。たとえば、
"単語単位" であれば wdiff というのがあります.
FreeBSD の distfiles mirror には転がっています.
> 出力形式は特にこだわりませんが、たとえば HTML か RTF(rich text
> format)あたりの形式で
{} で括られるような感じですが,私はあまり使っていないので
試してみてください.
--
∧∧
Zzz.. (- - )⌒⌒⊇~ 川口 銀河
############## gi...@athena.club.ne.jp
> 現在、テキストファイルの差分をとるツールを探しています。
> 行単位での差分ならば UNIX の diff コマンド
> (Windows 版は http://www.vector.co.jp/soft/winnt/prog/se015009.html
> あたりから引っ張ってくればいいでしょう)で取れますが、
> 文字単位で差分をとりたいのです。たとえば、
英語であれば wdiff が即座に思い浮かびます。文字単位でなく単語単位です
し、日本語には使えませんが。
http://www.fsf.org/software/wdiff/wdiff.html
docdiff というものがあるらしいですが、どこにあるのかは知りません。
http://www.topstudio.co.jp/~kmuto/d/?2001020&to=2001020711#2001020711
ちなみに、
#!/bin/sh
tmp1=/tmp/jwdiff$$-1
tmp2=/tmp/jwdiff$$-2
trap "rm -f $tmp1 $tmp2" 0 1 2 3 15
cat "$1" |nkf -e|kakasi -s > $tmp1
cat "$2" |nkf -e|kakasi -s > $tmp2
wdiff $tmp1 $tmp2|tr -d ' '
という wrapper を使っていたこともありましたが、あまりうまくないですね。
> なければ自作する用意はあるので、この手の差分検出アルゴリズムに
> 関する情報もあればよろしくお願いします。
http://todo.org/cgi-bin/jp/tiki.cgi?c=v&p=diff とか?
ここにも載っていますが、perl には Algorithm::Diff というモジュールがあ
ります。
http://bike-nomad.com/perl/
> ○一太郎 8、Word 98、秀丸 3.05 で動くマクロ
前提として、Wordの「変更履歴の作成」では、判定品質が
低すぎるという事ですね?
--
Tomoaki Nishiyama
e-mail:tom...@nibb.ac.jp
National Institute for Basic Biology
$ cat tmp1
現
在
、
テ
キ
ス
ト
の
差
分
を
と
る
ツ
ー
ル
を
探
し
て
い
ま
す
。
行
単
位
で
の
差
分
な
ら
ば
$ cat tmp2
テ
キ
ス
ト
フ
ァ
イ
ル
の
差
分
を
と
る
ツ
ー
ル
を
探
し
て
い
ま
す
。
行
単
位
で
の
差
分
な
ら
ば
$ diff -u tmp1 tmp2
--- tmp1 Fri Feb 9 23:33:10 2001
+++ tmp2 Fri Feb 9 23:32:53 2001
@@ -1,10 +1,11 @@
-現
-在
-、
テ
キ
ス
ト
+フ
+ァ
+イ
+ル
の
差
分
うーん、上出来スギ。:-)
--
ウエ林
任意のテキストを「一行/『一文字』」に変換 ("diff" コマンドのため) して
出力する、これをコマンドラインで行ううまい方法が見つかれば、後は、何を
「一文字」 (要素) として見るかが問題であって、その「一文字」 (要素) の並
び (sequence) から、何を差分とみなすのか、は、"diff" コマンドが行うそれ
と同じでいいですよね。
(なんていいつつ "diff" のアルゴリズムすら分かっていないオレ…)
--
ウエ林
> > ○一太郎 8、Word 98、秀丸 3.05 で動くマクロ
>
> 前提として、Wordの「変更履歴の作成」では、判定品質が
> 低すぎるという事ですね?
いえ、Word は常用していないので、そういう機能の存在を知らない
だけです(^^;) 勉強してみます。
ある程度入り組んだ差分になる場合は、DPマッチングが定番だ
と思うんです。パターン認識の教科書にはほぼ100%書いてある、
あれです。
実装は簡単ですが、そのまま使うと入力文字列の2乗に比例する
空間計算量が必要なのが、難点になりかねませんね。
しかしそこは、一致した箇所がある程度以上連続したらそこで文
字列を区切り、差分発生箇所だけマッチングを行うなどの処理を
ツールの内部で行えば、大丈夫かと。
---
佐渡詩郎 (さど しろう) / e-mail : sa...@smlab.tutkie.tut.ac.jp
ありがとうございます。
> > 現在、テキストファイルの差分をとるツールを探しています。
(中略)
> > 文字単位で差分をとりたいのです。
>
> 英語であれば wdiff が即座に思い浮かびます。文字単位でなく単語単位です
> し、日本語には使えませんが。
> http://www.fsf.org/software/wdiff/wdiff.html
見てみました。なるほど、diff へのフロントエンドですか。
同じ要領でテキトーにスクリプトを作れば文字単位での差分検出も
できそうですね。
いま抱えてる仕事(シグナチャに書いてある記事と、本業のほうと…)が
片付いたらテキトーに perl で書いてみよう。
diff -U 1000 あたりで何とかなりそうだな…
> docdiff というものがあるらしいですが、どこにあるのかは知りません。
> http://www.topstudio.co.jp/~kmuto/d/?2001020&to=2001020711#2001020711
そうですねぇ…どこにあるんでしょう。chasen を使うところから判断して
http://www.ruby-lang.org/en/raa-list.rhtml?name=DocDiff でしょうか?
Ruby か…使う気が萎えるなあ(^^;)
> perl には Algorithm::Diff というモジュールがあります。
> http://bike-nomad.com/perl/
ダウンロードしてみました。
…Windows(ActivePerl)でも単純にファイルのコピーだけすれば
使えそうな気配ですが、中身を見たところ、全然使い方を知らない
大括弧 [] の山が(^^;)
というわけでこれは断念です(^^;)
<< エキサイティング・ダウンロード! for Windows >>
http://www.so-net.ne.jp/download/win/util/text/
にもfc、diff系のソフトウェアのコレクションがありました。
---
> 出力形式は特にこだわりませんが、たとえば HTML か RTF(rich text
> format)あたりの形式で
上記のサイトからたどっていった結果、
<< MarkDiff トップ >>
http://www.userssoft.co.jp/markdiffj/index/default.htm
が、Word2000環境に特化していて、「HTML か RTF(rich text
format)あたりの形式で」Output可能な感じがしました。
冗長性を排した、いわゆるインテリジェントな比較・差分が可能な
ようです。
# ただし、この製品の価格は業務用の感じです(\88,000)。
---
> なければ自作する用意はあるので、この手の差分検出アルゴリズムに
> 関する情報もあればよろしくお願いします。
<< MarkDiff の作り方 >>
http://www.userssoft.co.jp/markdiffj/contents/secret.html
にちょっとしたsecretが載っていますが、人工知能技術を駆使しなけ
ればならないのでなかなか大変なようです。
---
テキストファイル用で間に合うのであれば、
<< Eagle Compare トップ >>
http://www.userssoft.co.jp/eagle/index/default.htm
<< ファイル比較ツール「Eagle Compare」(Windows95/ユーティリティ) >>
http://www.vector.co.jp/soft/win95/util/se124257.html?s
の「Eagle Compare」がよいかも知れません。
# こちらの方は、Personal用の価格ですね(\3,500)。
# また、比較エンジンを部品として使用可能なようです。
} [ReadMe.txtより引用]
} (3)比較エンジンを部品としても使用できる
} ご自身のプログラム(C++,VB)にファイル比較機能を組
} み込むことが可能です。
} 詳しくは下記のホームページをご覧ください。
} http://www.userssoft.co.jp/eagle/index/techinfo.htm
--
Shuichi YAMAGAMI, Kyoto, JAPAN
yam...@mbox.kyoto-inet.or.jp
fj.comp.misc,fj.os.ms-windows.win98,fj.questions.unix の <3A83C0E4...@ht.sakura.ne.jp> の記事において
2001-02-09(金) 19:05頃、delm...@ht.sakura.ne.jpさんは書きました。
> 現在、テキストファイルの差分をとるツールを探しています。
> 行単位での差分ならば UNIX の diff コマンド
> (Windows 版は http://www.vector.co.jp/soft/winnt/prog/se015009.html
> あたりから引っ張ってくればいいでしょう)で取れますが、
> 文字単位で差分をとりたいのです。たとえば、
Emacs で ediff-files とか ediff-buffers は駄目ですか?
> 出力形式は特にこだわりませんが、たとえば HTML か RTF(rich text
> format)あたりの形式で
出力はたぶん Emacs 上にしかできません。
> なければ自作する用意はあるので、この手の差分検出アルゴリズムに
> 関する情報もあればよろしくお願いします。
には役立つかも。
--
猿丸芳彦 (Yoshihiko SARUMARU)
mail: mis...@imasy.or.jp web: http://www.imasy.or.jp/~mistral/
> 任意のテキストを「一行/『一文字』」に変換 ("diff" コマンドのため) して
> 出力する、これをコマンドラインで行ううまい方法が見つかれば、後は、何を
> 「一文字」 (要素) として見るかが問題であって、その「一文字」 (要素) の並
> び (sequence) から、何を差分とみなすのか、は、"diff" コマンドが行うそれ
> と同じでいいですよね。
その作業をするツールを書こうと考えています。
たぶん perl で書いて、diff の出力を取り込んで再加工する
形になるんだと思います。
> (なんていいつつ "diff" のアルゴリズムすら分かっていないオレ…)
おなじく。
直接の答えではありませんが、以前 (一年位前?) bit 誌に文書校正記述用言語
(?) の話があったような覺えがあります。竹内郁雄御大の記事でした。名前も
面白かったけれども思い出せません。
--
ウエ林
もしかして真鵺道(まぬえど)
http://www.archi.is.tohoku.ac.jp/~yamauchi/projects/manued/index-j.shtml
のことかいね?
分散環境での校正をサポートするメソッドでありシステムですね。
では
はは
--
Hideyuki ENDO end...@remus.dti.ne.jp
>> 文書校正記述用言語
と聞くと、「トルツメ」なんかも言語かなと思ってしまいます。
Yorihito Tanaka
Keio University
Graduate School of Media and Governance
E-mail: yo...@tom.sfc.keio.ac.jp
> 現在、テキストファイルの差分をとるツールを探しています。
> 行単位での差分ならば UNIX の diff コマンド
> (Windows 版は http://www.vector.co.jp/soft/winnt/prog/se015009.html
> あたりから引っ張ってくればいいでしょう)で取れますが、
> 文字単位で差分をとりたいのです。たとえば、
ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/cdif-1.15
--
酒井 清隆 (E-mail: ksa...@kso.netwk.ntt-at.co.jp)