文章の違いを比較する
例を入れて試す:
比較結果
2つの文章を入力すると、ここに違いを表示します。
入力と同時に比較します。Ctrl + Enter で変更後の文章をコピーできます。
日本語の文章を差分比較すると読みにくい理由
差分ツールには、空白で区切った単語ごとに違いを出すものが多くあります。 英語では単語の境目が空白なので読みやすくなりますが、日本語の文章には通常、単語の間に空白がありません。 そのため助詞を1文字直しただけでも、文全体が変更されたように見えてしまいます。
反対に1文字ずつ比較すると、細かな修正は分かる一方で、長い文章では変更箇所が虫食いになりがちです。 このツールでは、行・文・文字の3つから、用途に合う粒度を選べます。単語単位は日本語では安定して使えず、 形態素解析を加えると処理も複雑になるため、扱いません。
粒度の選び方
| 粒度 | 向いているもの | 特徴 |
|---|---|---|
| 行 | コード、ログ、箇条書き | 改行ごとの変更を追えます |
| 文 | 日本語の文章 | 句点・感嘆符・改行で区切ります。括弧や引用符の内側は特別扱いしない近似です |
| 文字 | 細かな修正、英数字 | 絵文字や結合文字を途中で割らない、見た目に近い単位で比較します |
迷ったときの初期値は「文字」です。句点のないコードや箇条書きでも差分を出せるためです。 日本語の段落を読み比べる場合は、「文」に切り替えると変更のまとまりを追いやすくなります。
差分はどう計算しているか
追加・削除の回数が最も少なくなる並びを探す、Myers の差分アルゴリズムを使っています。 置換も「削除して追加」として表示するため、何がなくなり何が加わったかを1つの流れで確認できます。 同じ箇所が長く続くときは、変更の前後3要素だけを残して折り畳みます。
実測では、同一の10万文字を2つ比較した場合は約28ms、完全に異なる1万文字を2つ比較した場合は約1秒でした。 差分が小さいほど速く、全く異なる長文ほど時間がかかります。入力は各10万文字まで、選んだ粒度での要素数は合計2万件までにしています。
うまく表示されない場合
- 要素数が多すぎる — 「文字」から「文」や「行」に切り替えるか、比較する範囲を短くします
- 文章が長すぎる — 変更前・変更後とも10万文字以内に分けます
- 文の区切りが意図と違う — 句点のない文章や、引用符内の句点は文単位では正確に判定できません。「行」または「文字」で確認します
- 変更が見つけにくい — 追加は下線、削除は取り消し線で表示します。色だけに頼らず、線の種類でも区別できます