RSS2.0

Python nose でユニットテストを書いてみた

chocolablog は Python で書かれていますが、これまであまりユニットテストの整備に時間を割いてこれませんでした。しかし初期バージョンの開発から 2 年以上が経ち、その間に何度か sqlite3 をとりまく DB アクセス部分を中心に、処理を書き換えています。他のロジックはともかく、コアとなるコードはしっかり動作を担保しておくべきだなと感じ、ユニットテストの整備に着手することにしました。

nose_report.png
Python では 2.1 移行、ユニットテストフレームワークとして unittest が組み込まれています。これは個人的に大好きな JUnit をベースに作られているそうです。ただネット上で目にした Python 系のオープンソースプロジェクトでは、この uniittest モジュールではなく nose というモジュールを使ってテストコードが書かれていました。nose を使うとテスト失敗時にデバッグツールの pdb を自動で起動してステップ実行ができたり、ソースコードのカバレッジレポートを出力できたりと、テストの書き方以外の面でもいくつかメリットがあります。
今回は unittest よりさらに簡単にユニットテストを書けるらしい nose を使い、ユニットテストを書いてみました。

続きを読む python  コメント (0)  2014/05/29 08:02:50

MeCab の IPA 辞書を再学習させてみる

MeCab の辞書は利用する分野に応じて、新たな名詞や動詞などを追加したり、その分野の文章の解析精度を上げるよう再学習させることができます(この作業はドメイン適応と呼ばれるそうです)。

ドメイン適応の第一歩としては、未知の名詞の MeCab 辞書への登録から始めると良いです。
ただ登録作業自体は、辞書をビルドする際に、その単語を後述のフォーマット(※1)で書いた .csv ファイルを混ぜておけばいいので、それほど難しいことではありません。問題となるのはその単語がどの程度使われやすいのかを調整する必要があることです。この使われやすさを示す数値はコストと呼ばれ、単語を登録する際には自分で決め打ちしなければなりません。

コストの手動計算方法はネット上でもいくつか紹介されていますが、手動計算ではあまり複雑な計算はできないので、同じ品詞のコストが同じ値になりがちです。そこでもう少し踏み込んだコスト算出方法として、辞書の再学習という手段があります。これは既存の辞書を作る際のデータモデルと追加する単語、少量の例文からコストや単語の接続方法を自動判定させる機能です。

続きを読む MeCabpython  コメント (0)  2013/04/21 20:09:28

MeCab の IPA 辞書を UTF8 化する

配布されている MeCab の IPA 辞書は、文字コードが EUC JP になっています。
辞書のビルド時に文字コードを指定できるので、ちょっと試してみる分にはいいのですが、単語を登録しようとしたり、再学習をさせようとすると、文字コードが統一されていないことは障壁になります。

そこで MeCab 推奨の IPA 辞書を UTF8 に変換するツールを書いてみました。
テキストファイルの文字コードを変更するだけなのでシェルスクリプトでもできますが、個人的にのちのち再利用できそうなので python を使っています。

続きを読む MeCabpython  コメント (0)  2013/04/19 22:46:59

Linux 環境でマルチコア CPU を利用した python プログラムを書く

マルチコア CPU を利用した python プログラム、と言っても、Linux 環境ではプロセス単位で CPU が割り当てられるので、つまりはマルチプロセスを意識したプログラミングになります。

java でマルチコア CPU を利用しようとするとマルチスレッドで実現することになりますが、python の場合はわかりやすく別プロセスで実現されているため、ps や top コマンドで見えて面白いです。

python ではマルチプロセス用に multiprocessing モジュールが用意されていますが、今回はひとまず古典的な fork() 関数を使い、実際に複数のプロセスがマルチコア CPU によって処理されている様子を見てみたいと思います。

どちらかというと新人さん向けのプロセスのお話になってしまいましたが、季節柄ということで。
続きを読む Linuxpython  コメント (0)  2013/04/16 19:42:27

igo-python を使ってみた

前回 MeCab をちょろっと触ってみましたが、バイナリをビルドして、となるとコンソールが使えないレンタルサーバーでは使いづらいのが実情です。形態素解析器で C 言語じゃないものは他に何があるんだろうと探してみたところ、Igo という、Java の形態素解析器が見つかりました。

Igo はソースコードこそ異なるものの、解析結果は MeCab 互換となることを目指して作られたもので、辞書ファイルのフォーマットも MeCab のものに合わせているそうです。(ただ、未知語の扱いについては MeCab との差異があるようなので、公式ページを確認してください。)

今回は、この Igo を更に Python に移植したという igo-python を使ってみました。形態素解析を組み込もうかと思っている chocolablog が Python 製なのが理由です。
続きを読む MeCabpython  コメント (0)  2013/04/11 07:42:15
プロフィール HN: ももかん
ゲーム作ったり雑談書いたり・・・していた時期が私にもありました。
カレンダー
<<2018, 4>>
1234567
891011121314
15161718192021
22232425262728
293012345