«前の日記(2018-01-16) 最新 次の日記(2018-08-15)» 編集

tueda's diary


2018-02-12 tueda's diary

_ DocDiff for OS X later Marvericks

ちょっと必要に駆られて日本語文章のdiffを単語や文字単位で取れるコマンドラインツールを探していたら,DocDiffというものを見つけた.非常に良く出来ているのだが,残念ながら開発が止まっている様だ.通常版は ruby 1.9 以前でないと動かないらしい.

OS X Marvericks 以降ではデフォルトの ruby が 2.0 になっているので,このままでは動かない.が,githubには ruby 2.x に対応したものが上がっているそうなので,そちらの記事を参考になんとか動かす事ができたので備忘録として記しておく.

  • master ブランチを zip で落とす
  • 落としたものから lib の下を自分の好きな場所におく (以下では${docdiff}/libとする)
  • 実行ファイルは bin/docdiff である.これも好きな場所に置く(同様に${docdiff}/bin/docdiffとする)

libはruby2.0のライブラリディレクトリの下に置いたら良いよとか,実行ファイルは /usr/local/bin の下にコピれば良いよとかあるのだが,Sierra 以降だとセキュリティ制約が厳しくなって,自分のホーム以外には(sudoしても)ファイルを置いたりパーミション変えたりが出来なくなっている.

なので,もういっそライブラリも実行ファイルも自分の好きな場所に配置して,

ruby -I ${docdifflib} ${docdiff}/bin/docdiff ファイル1 ファイル2

とかして実行した方がよっぽど楽である(し,ちゃんと動く).

なお,Yoseite 以降あたりの時期から gem でインストールもできるようになっているという事であるが,今回は試していない.DocDiff に少し手を入れる必要があったので,単純にソースコードを配置する方式の方が便利であった.

今回,大量のファイルをクロスチェックをする必要があったので,DocDiff には以下の感じで手を入れた.

  • 単語単位での一致率が一定の割合を超えた場合のみ差分を表示(正常終了)
  • それ以外は差分は表示せずに 1 を返す(敢えて異常終了)
  • Shell Script で戻り値をチェックして,差分表示があった場合のみファイルに落とす

ようにした.

余談

ruby をよく知らないのでとりあえず「一致率の閾値」をコマンドライン引数で渡すのではなくハードコーディングしてるとか,どういう基準で一致率を判定してるとかを公にしたくないとかの事情があって,今回はコードを公開しません(恥ずかしさ半分,大人の事情半分で).もう少し ruby が書けるようになったら整理して公開しても良いとは思うのですが.(DocDiff は BSD ライセンスらしいのでご勘弁).

もしかしたらmoodleで大量のドキュメントを収集する必要があるとか,集めたドキュメントの類似率を検証する必要があるとかいう方々には多少の役に立つかもしれませんので,ご興味を持たれましたら個人的にご連絡くださればと思います _o_


総訪問者数: 本日の訪問者数: 昨日の訪問者数: