Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
IME in Vim
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
NAKAI Tsuyoshi
April 04, 2024
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
IME in Vim
@Dena.vim#2
NAKAI Tsuyoshi
April 04, 2024
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
480
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
500
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Tell your own story through comics
letsgokoyo
1
1.1k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Transcript
IME in Vim uga-rosa 2024/02/29 @ DeNA.vim#2
自己紹介 中井 剛志 (uga-rosa) https://github.com/uga-rosa https://zenn.dev/uga_rosa 24卒。専攻は化学系 Neovimユーザー3年目 自作プラグイン ccc.nvim
denippet.vim etc.
IMEとSKK
IME (Input Method Editor) キーボードから直接入力できない文字を入力するためのソフトウェア CJKV文字 (東アジア圏) MS-IME, 日本語IM (Mac),
Google日本語入力, ATOK 連文節変換 自動的に文節の区切りを判定し、複数の文節から成る文章をまとめて変換 こっきょうのながいとんねるをぬけるとゆきぐにであった。 ↓ 国境の長いトンネルを抜けると雪国であった。 無数にあるパターン 機械学習
SKK (Simple Kana to Kanji conversion program) オリジナルの実装はemacs 連文節変換なし ユーザーが区切り
(変換の開始、終了、送りがな) を明示 Kokkyou noNagaITonnneruqwoNuKerutoYukiguni deatta. 変換方法 ひらがなは全て確定済み 変換を開始するには大文字 スペースで漢字変換、qでカタカナ変換 変換中にさらに大文字 → 送りがな
SKKのメリット ユーザー エンターキーを押す回数が減る 誤変換が少ない 辞書登録がスムーズ 開発者 実装がシンプル 文節は全てユーザーが知っているので、辞書に問い合わせるだけ デメリット SKKのない環境がとても辛い
VimにおけるSKK実装 skkeleton denops.vim 最新の実装で開発もアクティブ eskk.vim Pure Vim script Vimの中でIME pluginを使うメリット
OSに依存しない エディタの他の機能と連携しやすい 自動補完 変換状態の表示
アルゴリズム
機能の整理 コア機能 ローマ字の入力をひらがなに変換する ひらがな → 漢字の変換 変換用の辞書を読み込み 送りがなの有無 UI バッファへの反映
ローマ字 → ひらがな 変換 入力は一文字ずつ渡される それまでの入力を覚えておく 変換ルール KanaTable Google日本語入力でいう「入力」「出力」 「次の入力」からなる
bb -> っb や bba -> っば が簡単に実現 type KanaRule = { input: string; output: string; next: string; }; type KanaTable = KanaRule[];
ひらがな変換の注意点 次の入力を見ないと変換候補が確定できないものには注意 nn -> ん と nm -> んm など。
以下のルールを同時に導入 { input: "nn", output: "ん", next: "" } { input: "n", output: "ん", next: "" } 入力に対する前方一致で変換ルールを絞り込む 候補が1つかつ完全一致になったら変換を確定 候補が0個になった場合は 直前までの入力に完全一致する候補があれば、それを確定し新しい入力を積む 無ければ誤入力
Flowchart 1つかつ完全一致 nextは残す 0個 それ以外 全部残す あり nextと新しいinputは残す なし 全部消す
Start ローマ字の入力 KanaTable KanaRuleのinputに対する 前方一致で絞り込み 候補の数 変換を確定 直前までの入力 に対して完全一致 する候補 未確定 それを確定し新しい入力を積む 誤入力 type KanaRule = { input: string; output: string; next: string; }; type KanaTable = KanaRule[];
まとめ
SKKはいいぞ skkeletonはいいぞ 宣伝 zennで「SKK実装入門」という連載を書いてます SKK実装入門 (1) ローマ字 -> ひらがな変換 SKK実装入門
(2) ひらがな入力 (3) の「辞書読み込みと変換」は3月中に更新予定 最近json形式かつ文字コードがutf-8の辞書がマージされました 🎉 https://github.com/skk-dev/dict/pull/39