ソースリストのコメントにあるとおり、ハナモゲラ和歌(へらはり和 歌)もどきを生成するプログラムです。
「疑似」とか「もどき」とつけるのは、後で補 足しますが、プログラムが生成するのはまともな(つまり、人間が 詠む)ヘラハリ和歌とはやはり違い、「ちゃんとしたハナモゲラ」にな らないことがあるからです。
書いてしばらく遊んでからすっかり忘れていたのを、このたびRubyの 勉強をするのに引っ張り出しました。
いや実は、去年(2001年)のある日 「俳句の自動生成」と いうのを見つけて、そういえば自分はハナモゲラ和歌生成ルーチンを持っ ている(笑) ではないか、自分のページでCGIにしようっと、と思いつい たくせに忙しさを口実にまたほったらかしていたんですが。
日本語処理関数を使っています。日本語対応パッチの当たったgawkで ないと実行できないと思います。第一行ではEUCを指定しているくせに、 コメントではSJISだといっている。真意は判りません。
プログラム中、次の一文字を選ぶ手続きを「anagram」と名づけてい ますが、これ、ヘンですね。
1: #! /usr/local/bin/gawk --ctype=EUC -f 2: # 3: # in *sjis-dos*japan 4: # 5: # 1998.10.08 6: # ハナモゲラ和歌(へらはり和歌)をでっち上げるプログラム。 7: # 山下洋輔『ピアニストに手を出すな!』を読み返していると 8: # コンピュータに和歌を作らせる話が出ていて、 9: # 「そういえば、できるよな」と思って即興で書いた。 10: 11: BEGIN{ 12: cand = "あいうえおかきくけこさしすせそたちつてとなにぬねの" 13: cand = cand "はひふへほまみむめもやゆよらりるれろわをん" 14: cand = cand "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゐゑ" 15: ### cand = cand "ぁぃぅぇぉゃょゎっ" 16: 17: N = jlength(cand) 18: #print N 19: 20: #srand() 21: # とりあえず5個生成する 22: for(i = 0; i < 5; i++){ 23: waka = wakagen(cand, N) 24: print waka 25: print "" 26: } 27: } 28: 29: # ハナモゲラ和歌を生成する 30: function wakagen(s, n, i, waka) 31: { 32: waka = "" 33: for(i = 0; i < 31; i++){ 34: waka = waka anagram(s, n) 35: if(i == 4 || i == 11 || i == 16 || 36: i == 23){ 37: waka = waka " " 38: } 39: } 40: return waka 41: } 42: 43: function anagram(s, n, c) 44: { 45: # 長さnの文字列sから任意の一文字を選び出し、返却する 46: 47: if(n <= 0){ 48: return "" 49: } 50: 51: nth = int(rand() * n) + 1 52: 53: # 一文字を選ぶ 54: c = jsubstr(s, nth, 1) 55: 56: return c 57: } 58: 59: #end of file
やかあどぞ わこべかのぶま ちほぐらば じろもれらぼぱ ぷゐるぜんでぬ
よろけぢび ひばしぺけにま ゑねわきぴ ぴがみねうずえ ゑぺむれべあご
じたななけ べやをゆれぱぢ そみどやい びれしんそじん りやめいぞへた
ようをじよ ふずれずげぢき ゆやでほや まはゐほずぞゆ るりやぷゆへへ
きづあにれ ごれえぐすずぎ みがおぼふ ほてどゐをづら しごせがぐみで
ハナモゲラというか、懐かしのド○○ンク○ストの「ふっかつのじゅ もん」みたいですね。
上のソースコードで、生成される文字の候補candのところ、拗音と促 音の部分がコメントアウトされています。ここが疑似と称する所以で、 これらを候補文字に入れておくと、現在のアルゴリズム(笑)では「っか りませば」とか「ぁやくれねほし」とかいう「語」ができてしまいます。 このような音韻規則は日本語にはありません。つまり、拗音や促音は語 頭に現れません。
即興で書いたこともあり、話を単純にするために拗音と促音をばさっ と切ってしまったのですが、一方では「かなけっさ」とか「これみてまぁ に」というのは、日本語の音韻規則でも充分可能な形です。それから見 ると、このプログラムでは少少物足りない。という反省を込めて「疑似」 と言っておるわけです。
さらに言うならば、このプログラムが生成するような「ランダムな音 (文字)の羅列」は、たとえそれが日本語で使われるもののみから成り立っ ていてもハナモゲラとは呼ばれず、どちらかといえば白痴扱いされるの であって、真のハナモゲラとはそんなに安易なものではないことが文献 から明らかであります。日本人が発話するからには、日本語の音韻規則 に則っていることが要請され、またそれだけでは不充分で、「どことな く日本語っぽい感じがする」、日本語の残り香がそこはかとなく漂う、 そうした佇まいすら要求されるのであります。まこと、ハナモゲラとは きびしい自己鍛練の連続であると痛感する次第であります。
ま、これでもじゅうぶん楽しめると思いますよ。
これのPerl版はこちらに、 Ruby版はこちらにあります。 見比べてみるのも一興でしょう。
(2002.03.08)
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.