日本語対応のテキストを Diff するクラス

2015/10/31 PHP

シンプルなText Diff系のライブラリを探してたんだけど、行単位で検出するものが多かったので、単語区切りで検出できないかと思って作ってみた。

個人的なプロジェクトでテキストの差分を目視するようなの作ってて、ググッて見つけたラブラリのなかでは、以下のものが最も人気だった。

PHP Fine Diff
http://www.raymondhill.net/finediff/viewdiff-ex.php

英文なら半角空白で区切って楽にdiffできるんだけど、日本語だとどうしても行単位でしか違いを検出できない。

そこで、「なんちゃって分かち書き」で対応してみたものを作った。
「なんちゃって」というのは、正規表現を使って単に「漢字・ひらがな・カタカナ・英字・その他」で分けただけというもの。
「差分を目視で探す」というdiffの最終目的を満たすなら、行単位よりもある程度は単語で句切られていたほうが探す時間の短縮になると思う。

例としては、以下のような感じを、 diffの例1
このようにした感じ。
diffの例2
少しの違いではあるけど、一行すべてがハイライトされるよりはいいかなと。

「なんちゃって分かち書き」なので句読点も単語内として認識してるけどw。

コードとデモ

コードはGitHubに置いた。

kijtra/textdiff
https://github.com/kijtra/textdiff

あと、デモを以下に置いた。

kijtra/textdiffのデモ
http://demo.kijtra.com/textdiff/

あとは自分で使いつつ精度や速度を上げていこうっと。

comments powered by Disqus