最近、プログラムの技術向上をはかって、というほどのものでもないのですが、LISPを学習をしています。Web上のテキストを頼りに、Emacs上で動くプログラムを書けるようになろうという試みで、これは少しでもEmacsを便利に使えるようにしたいという気持ちと、そして思考の柔軟さを身に付けたいというもくろみあってのことであります。
さて、テキストを読んで、LISPを理解しようとつとめても、読んでるだけでは足りないのですね。そう、理解するには自分で実際に書いてみるのが一番です。というわけで、関数をひとつ書いてみました。バッファのテキストを対象に、イカ娘の使っている言葉、ゲソとかイカとかですね、に変換する関数です。
関数を書くに際しては、イカ娘変換ブックマークレット - INAの日記にて公開されていたJavaScriptをおおいに参考にさせていただきました。正規表現を用いて語尾を変化させていく、そうした手順はほぼこちらのスクリプトを踏襲しています。いろいろ試してみて、うまく変換されないのを修正して、ずいぶん違うものにはなりましたが、ベースになる正規表現はほぼオリジナルのまま残っています。
さて、その変換関数の威力はいかなるものか。この文章を変換してみた結果を見てください。
最近、プログラムの技術向上をはかって、というほどのものでもないのでゲソが、LISPを学習をしているでゲソ。Web上のテキストを頼りに、Emacs上で動くプログラムを書けるようになろうという試みで、これは少しでもEmacsを便利に使えるようにしたいという気持ちと、そして思考の柔軟さを身に付けたいというもくろみあってのことであるでゲソ。
さて、テキストを読んで、LISPを理解しようとつとめても、読んでるだけでは足りないのでゲソね。そう、理解するには自分で実際に書いてみるのが一番でゲソ。というわけで、関数をひとつ書いてみたでゲソ。バッファのテキストを対象に、イカ娘の使っている言葉、ゲソとかイカとかでゲソね、に変換する関数でゲソ。
関数を書くに際しては、イカ娘変換ブックマークレット - INAの日記にて公開されていたJavaScriptをおおいに参考にさせていただきたでゲソ。正規表現を用いて語尾を変化させていく、そうした手順はほぼこちらのスクリプトを踏襲しているでゲソ。いろいろ試してみて、うまく変換されないのを修正して、ずいぶん違うものにはなりたでゲソが、ベースになる正規表現はほぼオリジナルのまま残っているでゲソ。
さて、その変換関数の威力はイカなるものじゃなイカ?この文章を変換してみた結果を見てくれでゲソ。
やっぱり、ですますの語尾が苦手ですね。
当初のスクリプトはイカ娘語変換関数を書いてみた - imaitの日記。正規表現を調整した現時点のものはこれです。
(defun ika-laitor ()
(interactive)
(let (ikago-ptn)
(setq ikago-ptn '(
("いか" "イカ")
("ないですか" "なイカ")
("\\(だろうか\\|か\\|かな\\|でしょうか\\)\\(\\?\\|?\\|。\\)" "じゃなイカ?")
("\\(い\\|言\\)います" "\\1う")
("\\(い\\|言\\)いません" "\\1わない")
("\\(い\\|行\\)きます" "\\1く")
("\\(い\\|行\\)きません" "\\1かない")
("ありません" "ないんじゃなイカ?")
("ません" "ない")
("である" "でゲソ")
("\\(でした\\|だった\\)" "\\1ゲソ")
("ください" "くれでゲソ")
("あります" "ある")
("します" "する")
("ます" "る")
("ました" "た")
("でした" "だ")
("\\(き\\|来\\)ます" "きる")
("あなた\\|あんた\\|貴方\\|貴女\\|キミ" "おまえ")
("だけれど\\|だけど\\|だが" "でゲソが")
("たけれど\\|たけど\\|たが" "たでゲソが")
("\\(で\\)\\(す\\)" "\\1ゲソ")
("\\(る\\|た\\|す\\|い\\|う\\|く\\|つ\\|む\\|ぐ\\|ぶ\\)\\(よ\\|ね\\|な\\)?\\(。\\|!\\|$\\)" "\\1でゲソ\\2\\3")
("\\(だ\\)\\(よ\\|ね\\|な\\)?\\(。\\|!\\|$\\)" "でゲソ\\2\\3")
;("\\(え\\|け\\|せ\\|て\\|ね\\|へ\\|め\\|れ\\|げ\\|ぜ\\|で\\|べ\\|ぺ\\|い\\|き\\|し\\|ち\\|に\\|ひ\\|み\\|り\\|ぎ\\|じ\\|ぢ\\|び\\|ぴ\\|見\\|減\\|\\)る\\(が\\|けど\\|けれど\\)" "\\1るでゲソ\\2")
("でゲソじゃなイカ" "でゲソか")
("んでゲソ" "のでゲソ")
))
(while ikago-ptn
(goto-char (point-min))
(while (re-search-forward (car (car ikago-ptn)) nil t)
(replace-match (cadr (car ikago-ptn))))
(setq ikago-ptn (cdr ikago-ptn)))))
