2015-06-17 62 views
1

我對python很新,面臨着下面定義的這個問題。 我從這個類命名爲「節點」創建幾個圖形如何在不干擾python中的舊對象的情況下創建全新的對象?

class Node(object): 
    label = "" 
    nexts =() 
    prevs =() 
    pos_tag = "" 
    visited = False # black = False (unexplored), white = True (explored) 
    score = 0 

我的圖形生成功能

# Generating the graph 
    def generate_graph(self, text, startnode, endnode): 
     sentences = self.convert_to_sentences(text) 
     sentences = [sentence.replace(",","") for sentence in sentences] 
     while(" ." in sentences): 
      sentences.remove(" .") 

     length = len(sentences) 
     self.START = startnode 
     self.END = endnode 
     G = nx.Graph() 
     G.add_node(self.START) 
     G.add_node(self.END) 
     for i in range(0, length): 
      words = sentences[i].split() 
      sent_size = len(words) 
      v = [Node() for i in range(sent_size)] 
      for j in range(0, sent_size): 
       label = words[j] 
       tag = nltk.pos_tag(nltk.word_tokenize(label))[0][1] 

       if self.exists_node(self.START, label, tag): 
        v[j] = self.get_existing_node(self.START, label, tag) 
       else: 
        v[j] = self.create_new_node(label, tag) 
        G.add_node(v[j]) 
       if j==0: 
        tup = (v[j],) 
        self.START.nexts = self.START.nexts + tup 
        G.add_edge(self.START, v[j]) 
       if v[j].label == ".": 
        self.add_edge(v[j], self.END) 
        G.add_edge(v[j], self.END) 
       if not self.exists_edge(v[j-1], v[j]): 
        self.add_edge(v[j-1], v[j]) 
        G.add_edge(v[j-1], v[j]) 

     Nodes = [] 
     graph_size, Nodes = self.graph_size(self.START) 
     for i in range(0, graph_size): 
      print(Nodes[i].label, Nodes[i].pos_tag) 
      leng = len(Nodes[i].nexts) 
      for x in range(0, leng): 
       print(Nodes[i].nexts[x].label, Nodes[i].nexts[x].pos_tag) 
      print(" ") 


     #nx.draw(G) 
     paths = self.find_paths(G, self.START, self.END) 
     return paths 

我打電話這個圖形生成函數多次產生幾個圖形,產生第一個圖非常好,但是第二張和後面的圖包含前面的圖的邊,即它已經包含了前面的圖的狀態,並且在其上添加了新的邊。

考慮從句子單詞級別圖形生成的這個例子: -

句1: - Merlyn是一隻大貓。

句子1創建的圖具有邊緣從Merlyn->是這非常好。

句子-2: - 梅林曾經喝牛奶。

句子2從產生具有2個邊圖形Merlyn->使用Merlyn->是

句子2應僅具有單個邊緣Merlyn->使用 預先感謝

+0

所有的'Node'字段都是靜態的,這可能是原因嗎? – bereal

+1

歡迎來到StackOverflow。如果你編輯它,這個問題將得到顯着改善(並且更容易回答),因此它變成[mcve] – GreenAsJade

回答

3

所有節點變量應該是實例級變量而不是類級變量。

class Node(object): 
    def __init__(self): 
     self.label = "" 
     self.nexts =() 
     self.prevs =() 
     self.pos_tag = "" 
     self.visited = False 
     self.score = 0 
+0

嘗試了這個事情,但它不起作用。它可能與Node類的可變性有關嗎? – Barbarian

相關問題