2014年10月12日日曜日

mrep 0.1.1 をリリースしました

先日、三浦海岸で行われたYANS合宿内で作った、形態素列パターンマッチャーmrepをリリースしました。 昨日行われたDSIRNLPでこれについて発表しました。

mrepとは何か?

mrepは形態素列に対して、正則言語によるマッチングをかけるためのツールです。 もともとMIURAという名前にするつもりだったんですが、すでにpypiに登録されていたので急遽リネームしました。 先にgithubで0.1.0をリリースしてしまっていたので、何故か0.1.1になります・・。

日常的にテキストデータなり、テキストを含んだjsonデータなりに対して、条件にマッチする行を検索することが有ります。 例えばお客さんからもらったデータの中で、特定の単語を含むところだけ抽出したり。 これには grep コマンドがよく使われて、その後は典型的には sort | uniq -c で数を数えたりしますよね。 ところが grep だと、単語や品詞などの情報が使えない。

例えば、「壊れた」部品名を数えたい。 そこで、「××が壊れた」を探そうとしても、 grep ではできません。 「が」の前の単語を取れないからです。 例えば、名詞連続を取りたいとなった時も、やはり grep ではダメです。 もちろんこれには形態素解析器なりが必要です。 しかし、形態素解析をやっただけでもやっぱりダメで、そこから簡単なプログラムを書かないとならない。 こういうのは日常的に、それこそお客さんとの対面でのミーティングで見たりしたい。

そこでmrepなら、形態素列に対して正則言語による検索ができるようになります。 「壊れた」の例ならこんな感じ。

mrep "<pos=名詞><surface=が><surface=壊れた>" text

名詞連続ならこんな感じ。

mrep "<pos=名詞>*" text

正則言語によるマッチングというのはある種のプログラムですから、表現力のとても弱いプログラムだ考えると、一種のワンライナーですね。

基本的にはYANSの合宿で作ったものから変わっていませんが、ガリガリ単体テストを書いたり、コマンドラインオプションを拡充したりしました。 エラー処理がちょっといい加減なんですが、Pythonでエラー処理しようとすると、どこでどういうエラーが起こりうるのか網羅するのが大変・・・。

インストールなど

Pythonで書かれているので、Pythonが必要です。 pypiに登録してあるので、pipでインストールできます。

$ pip install mrep

mecab-python3を使っています。 mecab-python3のインストールには、最新のmecabが必要です。 ubuntu14だと、`libmecab-dev`が新しいので、これさえあれば何もpipでインストールできます。 もう少し古いmecab環境の方は、mecabをソースから入れる必要があるかもしれません。 プロセスとパイプでやろうかとも思いましたが、エラーが起こって入出力がズレると悲惨なので、ちょっと辞めました。 1行毎にmecabプロセスを立ち上げるのもできますが、辞書読み込みでちょっと遅い。

2.7以上でテストしてあります。 3系でもテストしてあるので動くはずですが、動かなかったり不具合があったら教えてください。

mrepserver

mrepをwebインターフェースで使える、mrepserverというのも公開しています。 YANS合宿の最後の発表に使ったのがこのツール。 お客さんと話しながら使うなどを想定しています。 pipでインストールできます。

$ pip install mrepserver

こちらは2.7でしたテストしてないです。 多分ちょっと直せば3でも動く。

今後

要望が上がってくるなり、必要に応じて更新していきたいです。 上の、surface=は流石に面倒なので、次のバージョンでは"<pos=名詞>が壊れた"で行けるようにしたいですが、これはちょっと工夫が必要。 それから、文頭、文末だとか、表現自体も拡充したいですね。 Pull Requestや要望も募集しています。

0 件のコメント:

コメントを投稿