我對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->使用 預先感謝
所有的'Node'字段都是靜態的,這可能是原因嗎? – bereal
歡迎來到StackOverflow。如果你編輯它,這個問題將得到顯着改善(並且更容易回答),因此它變成[mcve] – GreenAsJade