LoginSignup
0
0

More than 1 year has passed since last update.

MigemoをPythonで

Posted at

はじめに

日本語の文章をローマ字で検索できる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からご連絡ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0