人工無能俳句を作ってみよう(PySimpleGUI使用)

AI俳句
# 人工無能俳句アプリ 5/30/2025
# まずはお遊びとして、有名俳句を上の句、中の句、下の句を三つのfileに分けてランダムに組み合わせして出来上がった俳句(?)です。
#  季語[index][2]は入っていません。
# では出来上がった句を見ていきましょう。

import PySimpleGUI as sg
import random
import time

with open("有名俳句202句.txt", "r") as f: # Exceでfile作成の場合はencoding="utf-8"が無くても動作する。
    list = f.readlines() #txt要素区切りtab, 要素内は空白はNG。
    word_list = []
    kami_list = []
    naka_list = []
    shimo_list = []
    word_list = []
    #print(list) # ['赤い椿\u3000白い椿と\u3000落ちにけり\t春\t河東碧梧桐\n', '~
    #print("16 単語数 : ", len(list)) # 16

for i in list:
    words = i.split()
    word_list.append(words)
    #print("21 word_list: ", word_list)# OK
    #[['赤い椿', '白い椿と', '落ちにけり', '春', '河東碧梧桐'], ~
    #['秋深き', '隣は何を', 'する人ぞ', '秋', '松尾芭蕉'], ~]]

index = random.randint(0,len(list)-1) #randrange(a,b,)の場合はa~bまで発生する

#print("26: ", word_list[index]) # ['梅が香に', 'のっと日の出る', '山路かな', '春', '松尾芭蕉']
#print("27 上の句: ", word_list[index][0]) # OK 梅が香に
kaminoku = word_list[index][0] #OK
print("30上の句 :", kaminoku) #OK

index = random.randint(0,len(list)-1)
#print("33: ", word_list[index]) # ['梅が香に', 'のっと日の出る', '山路かな', '春', '松尾芭蕉']
#print("34 中の句: ", word_list[index][0]) # OK 梅が香に
nakanoku = word_list[index][1] #OK
print("36 中の句 :", nakanoku) #OK

index = random.randint(0,len(list)-1)
#print("39: ", word_list[index]) 
#print("40 下の句: ", word_list[index][2]) 
shimonoku = word_list[index][2]
print("42 下の句 :", shimonoku) 
haiku = kaminoku + " " + nakanoku + " " + shimonoku
print("1st run時の俳句:",haiku)

layout = [
    [sg.Text('一句目'), sg.InputText(" ", key='一句目')],
    [sg.Text('二句目'), sg.InputText(" ",key='二句目')],
    [sg.Text('三句目'), sg.InputText(" ", key='三句目')],
    [sg.Text('四句目'), sg.InputText(" ", key='四句目')],
    [sg.Text('五句目'), sg.InputText(" ", key='五句目')],
    [sg.Text('六句目'), sg.InputText(" ", key='六句目')],
    [sg.Button('Start/Next' ,key='next')]
    ]

#make the window
window = sg.Window('人工無能俳句', layout)

while True:
    event, values = window.read()
    
    # end of  application by X button
    if event == sg.WINDOW_CLOSED or event == '終了':
        break

    if event == 'next':
        #一句目
        index_1a = random.randint(0, len(list)-1)
        index_1b = random.randint(0, len(list)-1)
        index_1c = random.randint(0, len(list)-1)
        kaminoku = word_list[index_1c][0]
        nakanoku = word_list[index_1b][1]
        shimonoku = word_list[index_1c][2]
        window['一句目'].Update(" "+kaminoku+ " "+nakanoku + " "+ " " + shimonoku)
        
        #二句目
        index_2a = random.randint(0, len(list)-1)
        index_2b = random.randint(0, len(list)-1)
        index_2c = random.randint(0, len(list)-1)
        kaminoku = word_list[index_2a][0]
        nakanoku = word_list[index_2b][1]
        shimonoku = word_list[index_2c][2]        
        window['二句目'].Update(" "+kaminoku+ " "+nakanoku + " "+ " " + shimonoku)
        
        #三句目
        index_3a = random.randint(0, len(list)-1)
        index_3b = random.randint(0, len(list)-1)
        index_3c = random.randint(0, len(list)-1)
        kaminoku = word_list[index_3a][0]
        nakanoku = word_list[index_3b][1]
        shimonoku = word_list[index_3c][2]        
        window['三句目'].Update(" "+kaminoku+ " "+nakanoku + " "+ " " + shimonoku)
        
        #四句目
        index_4a = random.randint(0, len(list)-1)
        index_4b = random.randint(0, len(list)-1)
        index_4c = random.randint(0, len(list)-1)
        kaminoku = word_list[index_4a][0]
        nakanoku = word_list[index_4b][1]
        shimonoku = word_list[index_4c][2]        
        window['四句目'].Update(" "+kaminoku+ " "+nakanoku + " "+ " " + shimonoku)
        
        #五句目
        index_5a= random.randint(0, len(list)-1)
        index_5b = random.randint(0, len(list)-1)
        index_5c = random.randint(0, len(list)-1)
        kaminoku = word_list[index_5a][0]
        nakanoku = word_list[index_5b][1]
        shimonoku = word_list[index_5c][2]        
        window['五句目'].Update(" "+kaminoku+ " "+nakanoku + " "+ " " + shimonoku)
        
        #六句目
        index_6a = random.randint(0, len(list)-1)
        index_6b = random.randint(0, len(list)-1)
        index_6c = random.randint(0, len(list)-1)
        kaminoku = word_list[index_6a][0]
        nakanoku = word_list[index_6b][1]
        shimonoku = word_list[index_6c][2]        
        window['六句目'].Update(" "+kaminoku+ " "+nakanoku + " "+ " " + shimonoku)

window.close()

# こんな傑作がNextボタンを押すと次々と出来上がります。