今回は、不具合修正です。一つは一致率の算出で、【移動】をともなう【削除】が、重複して減点されてしまうケースがありました。もう一つは、以下のような文書の場合に、一致している単語が、【変更】に含まれてしまう不具合です。v101の修正と似ているのですが、v101の変更は、【削除】が文頭にある場合で、今回は文の途中に【変更】存在する場合の不具合です。
v108で、条件によって、1文ずつの比較を行うように変更しましたが、以下のような文書の場合で、最後の1文に句点(?、!などの文末記号も含む)がない場合に、1文ずつの比較が実行されませんでした。これは、1文の判定を句点で行っていたためです。ですので、仕様を変更し、最後の1文については、句点がなくても1文として、認識するよう対応させました。
今回は、私が一度、挑戦してみたかった『日本語の文書比較プログラム』です。文書比較のツールとして、DIFFコマンドなどが有名ですが、これは、1行単位の文書チェックとなっており、もう少し、詳細な比較がしてみたいと思い、作成しました。
文書の比較というと、意外と簡単そうに思えるかもしれませんが、具体的に、2つのどこがどう違うかということを、コンピュータを使って、プログラムで検出することは、なかなか難しいものなのです。
思ったレベルの比較ができる、プログラムができたので、公開したいと思います。尚、今回のバージョンは、英文や、プログラムなどの文書には、対応していません。
機能としては、2つの文書AとBを比較して、その違いを抽出するといったものなのですが、比較結果として取得できる主な情報は、【削除】、【挿入】、【変更】、【移動】といったものです。
以下の、ように文書Aと文書Bを入力し、【比較】ボタンを押すことで、文書の違いが表示されます。
私自身、今回、はじめて、作成したプログラムですので、まだまだ改善の余地もあるかと思います。何かこうしたら良いのではなどという、ご意見・アドバイスなど、有りましたら、是非とも、ご連絡頂きますよう、よろしくお願いします。不具合の報告も、受け付けておりますので、こちらの方も何かありましたら、遠慮なく申し付けください。
ソースコードは、Microsoft社の製品 エクセル向けに書いたものなので、利用するには、ご使用のコンピュータに、エクセルがインストールされていることが、必須条件です。
文書比較のために、サンプルのデータをエクセルファイルに掲載していますが、サンプルの文書内容は、私(開発者)が作成したサンプルです。サンプルデータに含まれる個人名などの情報は、実在の人物や団体とはまったく関係ありませんので、よろしくお願いいたします。
今回、公開しているプログラムは、英文やプログラムに対応していませんので、これらに対応させてみましょう。
ページ上にリンクは貼っておりませんが、過去のバージョンのファイル自体は、アップロードしてあります。ですので、URLのv1xxの箇所を、直接変更して入力すれば、過去のバージョンのファイルもダウンロード出来ます。
例えば、過去のv103がダウンロードしたい場合、
http://yamato-nadeshiko.sakura.ne.jp/open/source/diff_v103.xlsm
今回は、不具合修正です。一つは一致率の算出で、【移動】をともなう【削除】が、重複して減点されてしまうケースがありました。もう一つは、以下のような文書の場合に、一致している単語が、【変更】に含まれてしまう不具合です。v101の修正と似ているのですが、v101の変更は、【削除】が文頭にある場合で、今回は文の途中に【変更】存在する場合の不具合です。
v108で、条件によって、1文ずつの比較を行うように変更しましたが、以下のような文書の場合で、最後の1文に句点(?、!などの文末記号も含む)がない場合に、1文ずつの比較が実行されませんでした。これは、1文の判定を句点で行っていたためです。ですので、仕様を変更し、最後の1文については、句点がなくても1文として、認識するよう対応させました。
以下のような文書の場合の処理を改善しました。文書の移動を判定を行うと、どうしても、v107までのような判定結果になってしまいます。なのですが、結果を見たときに、非常に分かりずらくなっており、どうにか改善できないものかと思案していたのですが、良い方法が見つかったので、改善してみました。
以下のような文書の場合に、改行のDIFF判定が【移動】を含んだ、DIFF判定となってしまうようです。v.107にて、改善しましたので、ご確認ください。
一致率の不具合修正です。正しく一致率が演算できない場合がありました。文字列長の演算で、数値の足し算が&になってしまっていたのが原因です。
文書比較で、文書Aと文書Bの一致率を取得できるよう機能を追加しました。v105として公開。
一致率の算出方法は以下の仕様書をご覧ください。
度々、すみません。やはり、同じ文言が複数あった場合の不具合です。以下のような文書があった場合に、移動判定され、間違ったDIFF判定が起こってしまいます。やはり、テストが甘かったというのが、原因でしょうか?しかし、これで、バグ修正が、少し落ち着くのではないかと思っています。
連続した単語の一致チェックの前に、1文(句点や!、?までを1文とする)単位でのチェックを先に行うよう処理追加し、改善しました。
不具合修正です。今回も、前回と似たような感じで、同じ文言が複数あった場合の不具合です。原因は、私の、設計ミスです。詳細は、以下の資料『文書比較について』をご覧ください。
不具合の修正です。以下のような文書の場合(湯気という文言が複数あった場合)に、【削除】の位置が誤った位置に判定される場合がありました。
プログラムが、複雑で分かりにくい部分もあるので、処理内容を資料に纏めていたら、このバグに気付きました。今まで、気付かなかったのが不思議なくらいです。修正版をダウンロードして確認してみてください。
資料については、出来上がったら、公開するつもりですので、時々、覗いてみてください。
最初にアップしたものから、少し変更してv1.01として公開しました。最初のバージョンでは、以下のような文書の【移動】を含む、文書AとBがあった場合に、先頭のデータが【変更】と判定されず、【削除】:素麺、【挿入】:粒麺と判定されていました。まったく間違いではないと思うのですが、【変更】と判定する方が、望ましいと思ったので、そのように仕様を変更しました。
今回の変更で、これまで、【削除】と【挿入】の対となって、結果が2つ出力されていたものが、【変更】として一つの結果になって、判定されるケースがあります。私が公開しているエクセルブックにおける、ABC_Testでも結果が、幾つか変わってきていますので、そちらの方も確認してみてください。
新規公開
サンプルに含まれるデータは、私の創作によるものです、サンプルデータに含まれる個人名、会社名などの情報は、実在の人物とはまったく関係ありません。
作者は、本ソフトウェアの使用または使用不能から生じるコンピュータの故障、情報の消失、その他あらゆる直接的及び間接的被害に関して一切の責任を負いません。
ご使用にあたり、改善の要望、不具合の発生等ありましたら、画面下のアドレスまで、ご連絡頂きますよう、宜しくお願いいたします。ご面倒、ご不便をお掛けしますが、宜しくお願いいたします。