前提
ここに質問の内容を詳しく書いてください。
(例)
pythonとMeCabを用いて入力した分の要素を抜き取り画面に出力するプログラムを作っています。
現在、一文のみなら可能なプログラムが作れましたが二文になるとうまく動きません。「。」で文を区切っています。例えば、A。B。という文を入力するとBの方の文しか出力されません。解決方法を教えていただけると幸いです。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
2つの文の要素を出力できるようにする
発生している問題・エラーメッセージ
2つ目の文の要素しか表示されない
該当のソースコード
python
1from tkinter import * 2from tkinter import ttk 3import tkinter 4import MeCab 5 6#MeCabの設定 7tagger = MeCab.Tagger() 8 9#抜き取る品詞 10select_conditions = ['動詞','形容詞','名詞','副詞'] 11 12#ウィンドウを作成 13root = Tk() 14 15#ウィンドウサイズを指定 16root.geometry("700x800") 17 18#ウィンドウタイトルを指定 19root.title('入力フォーム') 20 21frame1 = ttk.Frame(root, padding=(32)) 22frame1.grid() 23 24#名前 25label1 = ttk.Label(frame1, text='解析する文章',padding=(10,2)) 26label1.grid(row=0,column=0,sticky=E) 27 28label2 = ttk.Label(frame1,text='出力図',padding=(10,2)) 29label2.grid(row=6, column=0,sticky=E) 30 31#入力フォーム作成 32name = StringVar() 33name_txt = ttk.Entry( 34 frame1, 35 textvariable=name, 36 width=20) 37name_txt.grid(row=0, column=1) 38 39 40 41#MeCabの関数 42count = 0 43def wakati_text(text): 44 45 #先頭の形態素情報を返しsurface(表層系)とfeature(形態素情報) 46 text_column =text.split("。") 47 count_node = len(text_column) - 1 48 node = [] 49 50 51 for i in range(count_node): 52 node = tagger.parseToNode(text_column[i]) 53 54 terms = [] 55 count = 0 56 57 while node: 58 #品詞の識別 59 pos = node.feature.split(',')[0] 60 #もし、名詞、動詞、形容詞のいずれかが含まれるなら 61 if pos in select_conditions: 62 #配列に7番目の原型を加える 63 count += 1 64 terms.append(node.feature.split(",")[6]) 65 66 node = node.next 67 68 text_result = ' '.join(terms) 69 70 #品詞を四角で囲み表示させる 71 72 for i in range(count): 73 canvas.create_rectangle(i*120+10,10,i*120+100,30,outline="green")#枠を生成 74 canvas.create_text(i*120+55,20,text=terms[i])#抜き出した単語を枠内に出力 75 76 77 #枠と枠をつなぐ線を出力 78 for i in range(count-1): 79 canvas.create_line(100+i*120,20,130+i*120,20) 80 81 82 return text_result 83 84 85def delete(): 86 canvas.delete("all") 87 88 89# Button 90button1 = ttk.Button( 91 frame1, text='OK', 92 command=lambda: print("%s" % (wakati_text(name.get()))) 93) 94button1.grid(row=3, column=1) 95 96button2 = ttk.Button( 97 frame1,text="delete", 98 command=lambda: delete() 99) 100button2.grid(row=3,column=2) 101 102#キャンバスエリア 103canvas = tkinter.Canvas(root,width=800,height=450) 104#キャンバスバインド 105canvas.place(x=100, y=200) 106 107#ウィンドウ表示継続 108root.mainloop() 109
試したこと
create_rectangle とcreate_lineのところにif i == 0: else: などの文を付け加えたが上手く表示されませんでした。
補足情報(FW/ツールのバージョンなど)
MeCab 0.99 python 3.10.5
回答1件