読者です 読者をやめる 読者になる 読者になる

an odd fellow

読書と写真と情報工学

「cat」を「かt」と打ちこんでしまっても実行してくれるようなalias集を自動生成するツールを作った。

全角コマンド略してzencomaです。 https://github.com/roronya/zencoma

動機

ブラウザで調べ物をしてターミナルに戻って何か打ち込む、と全角のまま打ち込まれて、いちいち消すのがだるいな〜〜フラストレーション溜まるな〜〜って思いました。それで思いつきで

alias えまcs=emacs

とかしたら大変快適になったので、これ$PATHに通ってるコマンド全部aliasつくってやったら結構快適なんじゃないのと思って、他の人で作ってる人もいなそうだったし、作りました。

実装

pythonで書きました。最初はシェルスクリプトでがーっ変換表みたいなものを作ればいいかなぁと思ったんですが、アルファベットの並びを字句解析しなければひらがなに変換出来ないことに気づき、シェルスクリプトじゃ表現力が足りないから、じゃあlinuxにデフォルトで入ってるスクリプト言語で書こうってなって、pythonならどのディストリもだいたい2.6~7系で統一されてインストールされてるし、別途パッケージもインストールしなくてもビルドインのライブラリも豊富だしってことで決めました。 だいたい1日とちょっとで書きました。字句解析器を作るのが複雑で面白かった。言語処理系の入門書はいつもスペース区切りとかで字句解析できてしまうような構文を採用するから、いろいろ加味しないと字句解析できないのは初めて書きました。

字句解析器は

  • 母音で切る
  • 母音でも子音でもないその他の記号で切る
  • 子音が2つ並んだら1つ目の子音で切って2つ目以降から再帰的に字句解析器に突っ込む
  • 同じ子音が2つ並んだら小さいつにする . . .

って感じで条件を吟味しながら作りました。

google-chrome => ['go', 'o', 'g', 'le', '-', 'c', 'h', 'ro', 'me']

gcc => ['g', 'ltsu', 'c']

ここまでできたら

{"a":"あ", "i":"い", "u":"う"・・・}

みたいな変換表を作ってつっこみました。

['go', 'o', 'g', 'le', '-', 'c', 'h', 'ro', 'me'] => ごおgぇーchろめ

['g', 'ltsu', 'c'] => gっc

この変換表を作るにあたってキーボードを叩きまくってたんですが、dha => でゃ とか言う変換があったりしてへぇって感じでした。IMEibus-mozcです。

使ってみて

結構便利。 macの人や、linuxの人は使ってみてください。 バグあったら教えて欲しいです。 MITライセンスなのでソースコードも自由に利用してもらってかまいません。

ATOK (日本語入力システム)

ATOK (日本語入力システム)

初めてのPython 第3版

初めてのPython 第3版