非英語ネイティブでも Vim で快適に英語を書きたい
Posted on 20 December 2014.この記事は Vim Advent Calendar 2014 の 21 日目の記事です。 20 日目の記事は、kamichidu さんの Vimの正規表現を切り刻む でした。
英語書いてる時にありがちな話
英語、書いていますか? コードを書いていると、英語を読む機会だけでなく書く機会も結構あるように思います。 例えば、
- pull-request を送る際のコメントや issue を書く。
- ソースコード内のコメントを書く。
- メーリングリストにメールを投げる。
などなど。 そういった場面で英語力の低い自分が、英語を書いていてよくあるのが、以下のような話。
- 単語の綴りが思い出せない。
- a なのか the なのか。冠詞で迷う。
- on なのか at なのか。それとも in なのか。前置詞で迷う。
- 形容詞とその副詞形を不意に間違う。後で読み直してて間違いに気づく。
「何が正しいのかが気になってしまって、なかなか英語を書くのが進まない」といった経験がある人は多いのではないかと思います。 読む相手によっては、よほど致命的でない限り意図を汲み取ってくれたりはしますが、 それでも、どう書けば正しいのか気になってしまいますし、 それで書くのに時間がかかってしまうのはうれしくないですね。
こういったことを日頃考えたりしていて、やっぱり何とかしたいと思うのです。 もちろん Vim で。
入力時点で誤りの発生を減らしたい
英単語の補完機能を提供する Vim プラグインとしては、 ujihisa/neco-look がすでにあります。 neco-look では、look コマンドを叩くことで、 入力中の接頭辞を持つ単語を辞書順に列挙してくれます。 これでかなり綴りのミスは減りそうです。
ただ、最近はもう少しリッチな補完がほしくなって、 mitsuse/kompl という、 文脈 (直前の N-gram + 入力中の接頭辞) から 「それっぽい」入力単語候補の上位 K 個を返すサーバーを書いています (現状、それっぽい値がかえってくる状況で、 えいやーっと書きすぎて苦しくなってますが、 ちょっと整理してからテスト書いたりしていきたい)。
モチベーションとしては、 あがってくる候補に文脈上関係しない単語を含ませたくないということで、 ここが辞書順に候補を列挙する neco-look (というか look) と異なる点になります (kompl では N-gram 頻度の高いものほど上位にくる)。
雰囲気としては、Vim から kompl を叩いてみるとちょうどこんな感じです。
あと、 neocomplete には、 2-gram をキャッシュして補完に利用する機能がもともと組み込まれていた気がしますが、 kompl では予め N-gram 頻度をコーパスから収集してしまって静的に利用する方針なのが違う点でしょうか。
necoomplete-source とか書こうと思ってますが、 kompl 本体がアレな状況なのでもう少し掛かりそうです。 落ち着かせたらまた記事を書こうと思っています。
入力後に誤りを検出・訂正したい
これからやってみたいこととして、 Vim 上で誤りを検出・訂正するプラグインのバッグエンドの改善があります。
文書中の誤りを検出・訂正するプラグインとしては、 Linda_pp さんの rhysd/vim-grammarous があります (先日の記事で Linda_pp さん自ら紹介されているので、詳しくはそちらを)。 この vim-grammarous のバックエンドで利用しているのが LanguageTool というオープンソースな文法誤りチェッカーです。
LanguageTool では、ルールでのみ誤りの検出・訂正をおこなっています (ただ、大規模コーパスから得た N-gram 頻度を使って何かする試みはあったようですが)。 綿密に練られたルールはとても良いと思うのですが、 ルール以外の試みもあっても良さそうですし、LanguageTool 本体に何かコミットしたいところです。
余談ですが、LanguageTool は多言語対応している一方で、 日本語のルールは数がとても少ないので、 そういった方面のコミットも歓迎されそうです。
今後
いろいろやりたいことはありますが、 ちょっとずつ、消化していきたいところです。 ひとまずは kompl とそれを利用する Vim プラグインをまともに使える状態にもっていくのが当面の目標。
以上、ちょっとだけ進捗報告、 残りポエムと言った感じでお送りしました。 それでは、みなさま良い Vim ライフを! 明日の記事は petitviolet さんです。