我是python的新手,正在寻找解决我问题的方法。我希望根据句子结构类别显示一个句子的树。例如,“我爱蛋糕”的句子将其分类为名词短语,动词短语等,并显示为树。问题是如果句子有可能将句子结构分类超过1路,则程序可能会显示多于1个树。对这个问题有什么好主意或任何逻辑?提前谢谢!
class Sentence(Toplevel):
def __init__(self,parent):
def proc_s():
if len(nltk.word_tokenize(inpword.get())) > 14:
lblvar.set("Ayat anda melebihi 14 perkataan")
return
def proc_s():
if len(nltk.word_tokenize(inpword.get())) <= 1:
lblvar.set("Sila masukkan ayat yang betul")
return
instr = inpword.get().split()
grammar = nltk.data.load('file:korpus RSF1.cfg')
sent = instr
rd_parser = nltk.RecursiveDescentParser(grammar)
lblvar.set('')
lblvar1.set('')
lblvar2.set('')
lblvar3.set('')
cur_w = cf.canvas().find_all()
for i in range(len(cur_w)):
cf.canvas().delete(cur_w[i])
try:
trees = rd_parser.nbest_parse(sent)
for treex in trees:
lblvar.set(treex)
if trees == []:
lblvar.set("Maaf, tiada padanan "
"rumus struktur frasa (RSF) bagi ayat yang dimasukkan.")
return
helv = ('helvetica', 14)
lblvar1.set('Rumus Struktur Frasa:')
lblvar2.set('Visualisasi Pohon Sintak:')
for i in range(len(trees)):
widget = yustree.TreeWidget(cf.canvas(), trees[i], node_font=bold,
leaf_color='#2C6700', node_color='#CC0000',
roof_color='#004040', roof_fill='red',
line_color='#000000', draggable=1,
leaf_font=helv)
cf.add_widget(widget, 15, 15)
except ValueError as txt:
#print txt
s = txt.__str__()
lblvar.set(s.replace("Grammar does not cover some of the input words",
"Maaf, perkataan berikut tiada di dalam korpus BM"))
def show_word(treeseg):
print treeseg
def iq():
self.destroy()
Toplevel.__init__(self,parent)
self.transient(parent)
self.title("Visualisasi Pohon Sintak Ayat BM")
self.geometry("800x700+200+200")
lbltitle = Label(self, text="Sila masukkan ayat yang tidak melebihi 14 perkataan",
height=4)
lbltitle.pack()
inpword = Entry(self, width=70)
inpword.pack()
lbltitle = Label(self, text="",
height=1)
lbltitle.pack()
btn = Button(self, text=" Pohon Penghurai ", command = proc_s, height=1)
btn.pack()
lbltitle = Label(self, text="",
height=1)
lbltitle.pack()
bold = ('helvetica', 10, 'bold')
lblvar1 = StringVar()
lbltitle1 = Label(self, textvariable = lblvar1, font = bold)
lbltitle1.pack()
bold = ('helvetica', 10, 'bold', 'italic')
lblvar = StringVar()
lbl = Label(self, textvariable = lblvar, anchor=W, justify=LEFT,wraplength=600, font = bold)
lbl.pack()
lbltitle = Label(self, text="",
height=1)
lbltitle.pack()
bold = ('helvetica', 10, 'bold')
lblvar2 = StringVar()
lbl = Label(self, textvariable = lblvar2, font = bold)
lbl.pack()
bold1 = ('times', 9)
lblvar3 = StringVar()
lbltitle2 = Label(self, textvariable = lblvar3,font = bold1)
lbltitle2.pack()
lblvar4 = StringVar()
lbltitle4 = Label(self, textvariable = lblvar4,font = bold1)
lbltitle4.pack()
cf = CanvasFrame(self,width=650, height=350, closeenough=2)
cf.pack()
self.wait_window(self)
def iQ():
root.destroy()
def show_sentence():
s = Sentence(root)
def show_word():
w = Word(root)
instr=''
root = Tk()
Tk = show_sentence()
root.geometry('400x400+400+400')
root.mainloop()