在python程序中显示一棵树

时间:2014-02-26 04:05:56

标签: python tree

我是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()

0 个答案:

没有答案