まずは簡単な次の書き換え規則を考える。
(書き換え規則A)
(1) 文→<名詞句><動詞句>
(2) <名詞句>→<名詞>は
(3) <動詞句>→<動詞>
#! /usr/bin/env python # -*- coding: utf-8 -*- import random noun = ['私','彼','彼女'] verb = ['歩く','走る','泳ぐ','寝る'] adj = ['赤い','青い'] adjv = ['静かだ','暖かだ'] #文の書き換え規則 def sentence(): np_array = np() vp_array = vp() return np_array + vp_array #名詞句の書き換え規則 def np(): array = [] array.append(noun[random.randint(0,len(noun)-1)]) array.append("は") return array #動詞句の書き換え規則 def vp(): array = [] array.append(verb[random.randint(0,len(verb)-1)]) return array #形容詞句の書き換え規則 for x in range(5): array = sentence() for a in array: print a, print
次にもう少し高度な書き換え規則Bを考える。
書き換え規則B
(1) <文> → <名詞句> <動詞句>
(2) <名詞句> → <形容詞> <名詞> は
(3) <名詞句> → <名詞> は
(4) <動詞句> → <動詞>
(5) <動詞句> → <形容詞>
(6) <動詞句> → <形容動詞>
(7) <形容詞句> → <形容詞> <形容詞句>
(8) <形容詞句> → <形容詞>
#! /usr/bin/env python # -*- coding: utf-8 -*- import random noun = ['私','彼','彼女'] verb = ['歩く','走る','泳ぐ','寝る'] adj = ['赤い','青い'] adjv = ['静かだ','暖かだ'] #文の書き換え規則 def sentence(): np_array = random.choice([np2(),np3()]) vp_array = random.choice([vp4(),vp5(),vp6()]) return np_array + vp_array #名詞句の書き換え規則 def np2(): #print "np2() was called." array = [] adj_array = random.choice([adj7(),adj8()]) array = array +adj_array noun_choice = random.choice(noun) array.append(noun_choice) array.append("は") return array def np3(): #print "np3() was called." array = [] array.append(noun[random.randint(0,len(noun)-1)]) array.append("は") return array #動詞句の書き換え規則 def vp4(): #print "np4() was called." array = [] array.append(verb[random.randint(0,len(verb)-1)]) return array def vp5(): #print "vp5() was called" array = [] array.append(random.choice(adj)) return array def vp6(): #print "vp6() was called." array = [] array.append(random.choice(adjv)) return array #形容詞句の書き換え規則 def adj7(): #print "adj7() was called." array = [] array.append(random.choice(adj)) #choice = [adj7(),adj8()] #chosen = random.choice([adj7(),adj8()]) #adj7()の再帰が失敗する chosen = random.choice([adj8()]) #print chosen,"was chosen." adj_array = chosen #print type(adj_array) #adj_array = adj8() array = array + adj_array #print "output of adj7()",array return array def adj8(): array = [] array.append(random.choice(adj)) #print "adj8() was called." return array def adj9(): #ダミーメソッド #print "adj9() called." array = ['dummy'] return array for x in range(20): #5つの文を出力 array = sentence() #print "###################" for a in array: print a, print
書き換え規則7の形容詞句の再帰で失敗する。