Migemoとは、ローマ字のまま日本語をインクリメンタル検索するためのツールです。
Migemoにより、かな漢字変換をすることなく、漢字を含んだ日本語の検索を快適に行うことができます。
高林哲氏により、2000年に初版が公開されて以降、様々な発展を遂げました。
現在広く利用されているMigemo実装は、KoRoN氏によって公開されたC/Migemoでしょう。
拙作ながらも、私ogunaもMigemo実装を公開しています。
このサイトでは、Migemoの機能を説明し、次世代へと繋がるMigemo実装の紹介をしていきます。
Migemoとは
日本語の文章や単語は、IMEによりローマ字を漢字に変換しながら入力します。
Migemoでは、このIMEによる変換をすることなく、単語の検索をすることができます。
例として、「吾輩は猫である」中の「獰悪」の文字を検索するとします。
Migemoがない場合、検索窓にカーソルを移動させ、IMEをオンにし、「douaku」とローマ字入力した後に、変換候補の中から「獰悪」を選択します。
一方、Migemoでは、検索窓にカーソルを移動させたのち、「doua」と入力するだけで「獰悪」にカーソルが移ります(下図で獰悪がピンクにハイライト)。
このようにキーボードの操作が大幅に削減されるため、快適に検索を行うことができるのです。
上記を含むMigemoの簡単なデモは、以下のサイトで試すことができます。
省メモリなMigemo
Migemoは内部に「かな→漢字」変換用の辞書を格納しています。
この辞書はメモリを大きく占めます。
そこで私は、データ構造を工夫することにより、メモリ使用量を大きく削減しました。
具体的には、C/Migemoでは26.1MBであったメモリ使用量を、Rust実装のMigemoでは7.7MBにまで削減しています。
その分クエリに要する時間は増えましたが、十分実用的な速度を維持しています。
この削減は、C/Migemoでは2重連鎖木でデータを格納していたのに対し、
省メモリなMigemoではLoudsトライで格納したことによります。
主要な言語による実装
Migemoが多くのソフトウェアやツールでの導入が容易になるよう、様々な言語でMigemoを実装しました。
全て省メモリの辞書に対応しています。
- Go: gomigemo
- Rust: rustmigemo
- Java: jmigemo
- Python: pymigemo
- C#: csmigemo
- JavaScript(TypeScript): jsmigemo
CやC++では、Rustで出力する外部ライブラリを利用することができます。
これら複数の言語で実装したMigemoの性能を比較したベンチマークを公開しています。
C/Migemo | gomigemo | rustmigemo | jsmigemo | jmigemo | rustmigemo-wasm | pymigmeo | csmigemo | |
---|---|---|---|---|---|---|---|---|
言語 | C | Go | Rust | TypeScript | Java | Rust→WASM | Python | C# |
ランタイム | Native | Native | Native | Node.js | JVM | Node.js | CPython | .NET Core |
実行ファイルサイズ (KB) | 72 | 1974 | 358 | N/A | N/A | N/A | N/A | N/A |
辞書ファイルサイズ (MB) | 4.78 | 2.03 | 2.03 | 2.03 | 2.03 | 2.03 | 2.03 | 2.03 |
メモリ使用量 (BM) | 26.1 | 12.1 | 7.7 | 14.8 | 15.5 | 14.4 | 6.5 | 6.4 |
起動時間 (ms) | 198 | 78 | 65 | 165 | 234 | 150 | 462 | 147 |
クエリ時間 (ms) | 5053 | 5860 | 14939 | 24753 | 15892 | 14618 | 119909 | 17493 |
最新の用語を追加したMigemo辞書
言語は生きており、日々様々な単語が生まれています。
快適な検索を実現するには、最新の用語の検索も可能でなければなりません。
SKK辞書からMigemo辞書を生成するのは、手間のかかる作業です。
そこで、生成したMigemo辞書を下記で配布しています。
商用利用可能なMigemo辞書
C/Migemoに同梱されている辞書ファイルは、SKKから生成されているため、GPLライセンスと考えられます。
もしあるプログラムをこの辞書ファイルを同梱して配布する場合、そのプログラムもGPLしなければならないかもしれません。
そのような考えから、Migemoを利用するプログラムの多くはユーザによる辞書のダウンロードを強いていました。
結果、Migemoを導入するユーザの手間が大きくなっていました。
より簡単にMigemoを利用できるようにするには、緩いライセンスの辞書ファイルが必要です。
そこで、BSDライセンスのプロジェクトから生成したMigemoの辞書を作成しました。