ソースリストのコメントにあるとおり、ハナモゲラ和歌(へらはり和 歌)もどきを生成するプログラムです。
「疑似」とか「もどき」とつけるのは、後で補 足しますが、プログラムが生成するのはまともな(つまり、人間が 詠む)ヘラハリ和歌とはやはり違い、「ちゃんとしたハナモゲラ」にな らないことがあるからです。
書いてしばらく遊んでからすっかり忘れていたのを、このたび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.