ランダムに日本語を生成する話
1: asatte Pikachu ga taberu
明後日ピカチュウが食べる
2: Pikachu ga taberu
ピカチュウが食べる
3: kyou iPhone ga kieru
今日iPhoneが消える
4: are ga shiawaseda ze
あれが幸せだぜ
5: gonengo iPhone ga genkida
五年後iPhoneが元気だ
6: asatte kare ga genkida
明後日彼が元気だ
7: jigoku de Sony ga hashiru
地獄でソニーが走る
8: kaisha de ninja ga kieru
会社で忍者が消える
私のプログラムが勝手に生成した日本語のつぶやきである。
自然言語処理の一分野になると思うのだが、世で話されている言語の文法を機械的に整理する方法にBNF(Backus-Naur Form)と呼ばれるものがある。
先週、授業でBNFで記述された文法を再帰的に処理して、ランダムに文章を生成するプログラムをコーディングする課題が出た。
例題は英語や数式の生成だったのだが、やってみると日本語でも簡単にできた。時間に追われているのでマルチバイト処理を放棄して日本語表記をアルファベットで代用しているがご勘弁願いたい。
固有名詞にSony, Pikachu, iPhone, ninja
代名詞にwatashi, anata, boku, ore, kare, are
を、そして日本語の文法をBNF形式で適当に与えてプログラムを走らせると冒頭に示したような意味ありげな文章が続々と生成される。
ピカチュウが食べまくっていたり、予言めいたことが書かれていたり、興味が尽きない。占いアプリやフォーチュンクッキーの中に入っているお札の文句を自動生成するプログラムなどに使うと面白いと思う。