はじめに
日本語の文章をローマ字で検索できるMigemo検索を、Pythonで利用したいと思ったことはないでしょうか。
MigemoのPython実装であるpymigemoをPyPIで公開したので、その利用方法を解説します。
Migemoとは
Migemoはローマ字で入力するだけで、漢字を含む様々な単語を検索できる検索手法です。
例えば、「吾輩は猫である」という文章の「猫」を検索したい場合、「neko」と入力するだけで、「猫」に検索がヒットします。
Migemoの仕組みは簡単で、「neko」を仮名に変換し「ねこ」を得ます。次に、「ねこ」に完全一致か前方一致する単語を列挙し、その単語の一覧にヒットする正規表現を生成します。
「ねこ」の場合、以下の正規表現が生成されます。
(猫|ねこ|ネコ|寐転|寝[転込]|寢込|弥固|根[刮子掘瘤]|ネコ)
あとはこの正規表現で検索を行えば、文章の「猫」部分にヒットします。
Python実装での工夫
Pythonは様々なツールの開発で使われており、もしかしたらMigemoを使いたいという需要があるかもしれません。
そこで、PythonでMigemoを実装しました。
ピュアPython
C言語で実装されたC/MigemoにバインディングするPythonライブラリはすでにありました。
そちらの方が性能的には優れているのですが、環境に依存するというデメリットがあります。
pymigemoは全てPythonで実装されているので、特別なインストール手順は必要ありません。
pip install pymigemo
のみでインストールできます。
ついでに依存パッケージもありませんので、バージョン衝突なども発生しません。
辞書構造がLOUDSトライで省メモリ
LOUDSトライというデータ構造で辞書データを格納しています。
そのため、C/Migemoのメモリ使用量が26MBに対し、pymigemoは7MBと小さくなっています。
辞書がBSDライセンス
C/MigemoではGPLライセンスの辞書でしたが、pymigemoではBSDライセンスの辞書を同梱しています。
そのため、皆さんの開発するツールに組込みやすくなっています。
利用方法
pipコマンドでインストール
Pythonと一緒に導入されているpipコマンドで、PyPIからダウンロードしインストールします。
> pip install pymigemo
ちなみにアンインストールは、以下のコマンドです。
> pip uninstall pymigemo
CLIで使ってみる
インストールが完了すると、CLIツールとして利用できます。
pymigemoを実行すると、「QUERY:」と出力されますので、検索したい単語のローマ字を入力します。
例えば、「kensaku」とエンターを入力すると、以下のように出力されます。
> pymigemo
QUERY: kensaku
PATTERN: (賢作|謙作|腱索|羂索|研削|県作|献策|検索|憲作|建策|兼作|健[策作]|けんさく|kensaku|kensaku)
QUERY:
再度表示される「QUERY:」でエンターのみを入力すると、CLIツールが終了します。
もし、「QUERY:」「PATTERN:」という出力がいらない、再度の入力要求もいらないという場合、「-w」オプションを使います。
> pymigemo -w kensaku
(賢作|謙作|腱索|羂索|研削|県作|献策|検索|憲作|建策|兼作|健[策作]|けんさく|kensaku|kensaku)
スクリプトで使ってみる
Pythonスクリプト上でMigemoを使ってみましょう。
まずは、pymigemoパッケージからmigemoをインポートします。
import migemo
次に、Migemoインスタンスを初期化します。
このとき、パッケージに同梱の辞書ファイルが自動的に読み込まれます。
m = migemo.Migemo()
最後に、検索したい単語のローマ字をqueryメソッドに渡します。
m.query('kensaku')
# => '(賢作|謙作|腱索|羂索|研削|県作|献策|検索|憲作|建策|兼作|健[策作]|けんさく|kensaku|kensaku)'
queryメソッドは状態を内部に持たないので、queryメソッドを複数のスレッドから同時に呼び出すことができます。
まとめ
PythonでMigemoを簡単に利用できるので、ぜひ使ってみてください。
pymigemoへのコメントや要望等は、この記事にコメントするか、GitHubのIssueからご連絡ください。