我在csv文件中有一个pos标签的单词列表,每个单词都带有他的pos标签,例如:
[(什么,WP) (品牌,VBZ) (其中,PRP) (做,VB) (它,PRP)] 等...
我希望节点是TAG(WP,VBZ,PRP ..),并且连续形式的边缘属性,例如边缘列表将是:
[(什么,使得) (品牌,它们) (他们,这样做) (这样做,它)] 它... 所以我可以删除重复的节点,但仍然具有从节点出来的所有属性。 到目前为止我有这个
G=nx.MultiGraph()
files = glob.glob('C:/Users/Sebastian/Desktop/prueba3/*.csv')
for path in files:
dirname, filename = os.path.split(path)
with open ('C:/Users/Sebastian/Desktop/prueba3/%s' %filename) as csvfile:
csv_reader = csv.reader(csvfile, delimiter=',')
for row in csv_reader:
new_node = row[1]
new_attributes = row[:1]
G.add_node(new_node, my_attributes=new_attributes)
答案 0 :(得分:0)
使用zip
在句子中的连续单词之间创建适当的配对使这很简单。我也使用add_edge
代替,因为这也会自动添加节点。请注意add_edge
的第三个参数允许您接收key
参数,该参数可用于标识nx.MultiGraph
对象中的唯一边。我不确定你的.csv
文件的格式究竟是什么,所以我只是将一个句子作为包含(word, POS)
元组的列表传入以下示例。希望这有帮助!
from collections import defaultdict
import networkx as nx
G = nx.MultiGraph()
sentence = [
("what", "WP"),
("makes", "VBZ"),
("them", "PRP"),
("do", "VB"),
("it", "PRP"),
]
for pair0, pair1 in zip(sentence[:-1], sentence[1:]):
w0, t0 = pair0
w1, t1 = pair1
edge_key = "{0} {1}".format(w0, w1)
G.add_edge(t0, t1, edge_key)
print(G.nodes)#['WP', 'VBZ', 'PRP', 'VB']
print(G.edges)#[('WP', 'VBZ', 'what makes'), ('VBZ', 'PRP', 'makes them'), ('PRP', 'VB', 'them do'), ('PRP', 'VB', 'do it')]