Open2
migemoとfzfを合体させたようなものを作る
社のアドカレで「migemoとfzfを合体させたようなものを作りたい」という記事を書いた。これを実際にやっていく。
おさらい
- Migemo
- 誤解を恐れず大胆に意訳すると、「日本語文字列をローマ字で検索する、そのために辞書を引く」ツール
- 原作はC言語で記述されていたり、辞書ファイルとしてShift-JISを想定していたりする。そのまま使うのはつらそう
- 独自ライセンス
- JavaScriptだったり、Golangだったりの再実装は存在する
- 辞書ファイル
- SKK辞書 が使えるか?
- ライセンスがUnicodeライセンス と特殊
- GPL互換っぽい。商用利用可能なライセンスのものを探したいが、なさそう?
- fzf
- あいまい検索ツール
- こっちは普通にMITなので問題なさそう
こうしたい
- ポータビリティのために、辞書ファイルはパッケージに組み込みたい
- 商用利用可能にしたい
- GPL系だと都合がわるい
- SKK辞書をバイナリファイルに再構成して組み込むことで回避可能?
- だめだった
- SKK辞書をバイナリファイルに再構成して組み込むことで回避可能?
- GPL系だと都合がわるい
migemoを理解する
https://github.com/oguna/gomigemo を読む。
Trie木
ogunaさんによるC/Migemoの再実装で重要な点が、検索木としてTrie木を使用していることだ。
ひとことでTrie木といっても、メモリの効率化などで実装方法はさまざま存在するようなので、実際にコードを読んでどうなってるかを見ていく。
Clineで構造体の関係をMermaid図にしてもらった。
BitVectorが実際に辞書から取り出した単語が入るのかなーとぼんやり思っているけど、合っているかは定かでない。