Open2

migemoとfzfを合体させたようなものを作る

kaztokazto

社のアドカレで「migemoとfzfを合体させたようなものを作りたい」という記事を書いた。これを実際にやっていく。

おさらい

  • Migemo
    • 誤解を恐れず大胆に意訳すると、「日本語文字列をローマ字で検索する、そのために辞書を引く」ツール
    • 原作はC言語で記述されていたり、辞書ファイルとしてShift-JISを想定していたりする。そのまま使うのはつらそう
    • 独自ライセンス
    • JavaScriptだったり、Golangだったりの再実装は存在する
  • 辞書ファイル
    • SKK辞書 が使えるか?
    • ライセンスがUnicodeライセンス と特殊
      • GPL互換っぽい。商用利用可能なライセンスのものを探したいが、なさそう?
  • fzf

こうしたい

  • ポータビリティのために、辞書ファイルはパッケージに組み込みたい
  • 商用利用可能にしたい
    • GPL系だと都合がわるい
      • SKK辞書をバイナリファイルに再構成して組み込むことで回避可能?
        • だめだった
kaztokazto

migemoを理解する

https://github.com/oguna/gomigemo を読む。

Trie木

ogunaさんによるC/Migemoの再実装で重要な点が、検索木としてTrie木を使用していることだ。

ひとことでTrie木といっても、メモリの効率化などで実装方法はさまざま存在するようなので、実際にコードを読んでどうなってるかを見ていく。

Clineで構造体の関係をMermaid図にしてもらった。

BitVectorが実際に辞書から取り出した単語が入るのかなーとぼんやり思っているけど、合っているかは定かでない。