diff --git a/content/posts/2026-02-09/index.md b/content/posts/2026-02-09/index.md new file mode 100644 index 0000000..62dceda --- /dev/null +++ b/content/posts/2026-02-09/index.md @@ -0,0 +1,53 @@ +--- +author: usbharu +draft: false +categories: + - 技術 +date: 2026-02-09T18:08:54+09:00 +tags: + - Rust +keywords: + - Rust +title: IME用の辞書から子音抜き検索ができるコマンドを作ったよ +relpermalink: posts/2026-02-09/ +url: posts/2026-02-09/ +decription: IME用の辞書から子音抜き検索ができるコマンドを作ったよ +--- + + +## Q. 子音抜きって何? + +A. + +``` +春日未来(かすがみらい) → ksgmri +``` + +まぁTwitterとかでえっちな話する時に使われるやつですね + +これを覚えるというか元の名前を思い出すのが苦手なので作ってみました。まぁ作ったのはGemini君なんですが + +## Skltn + +Skeletonから子音を抜いた名前です。 + +[skltn](https://github.com/usbharu/skltn) + +Rust製で、手元の環境だと27万行の辞書ファイルを大体30msぐらいで検索してくれました。正直速いのかはわかりませんが… + +ニコニコ大百科の内容をIME用の辞書にしたやつを使うのがおすすめです。 + +## 最適化 + +当然ですがIME用の辞書ファイルはただのテキストで、普通に検索するとなるとフルスキャンする必要があります。フルスキャンでもReleaseビルドだと意外と速かった(190ms~)んですが、流石にもっと早くできるだろうと言うことで色々最適化してもらいました。 + +- メモリマップIO +- 並列化 +- 二分探索→インデックスファイル作成 +- 早めの検索切り上げ + +ほぼAIが考えた最適化の中で、唯一自分が考えた最適化が二分探索です。50音順に辞書が並んでいる前提で、1文字目を高速に検索できます。ちなみに大して速くなりませんでした。かなしい + +ちなみにインデックスファイルを作成しますが、使ってもあんまり速くなりません なんでや… + +![alt text](<スクリーンショット 2026-02-12 13.59.36.png>) \ No newline at end of file diff --git a/content/posts/2026-02-09/スクリーンショット 2026-02-12 13.59.36.png b/content/posts/2026-02-09/スクリーンショット 2026-02-12 13.59.36.png new file mode 100644 index 0000000..e2bf74b Binary files /dev/null and b/content/posts/2026-02-09/スクリーンショット 2026-02-12 13.59.36.png differ