2015-09-21 70 views
1

所以我刚开始使用Neo4j,并试图弄清楚如何填充我的DataFrame。我有一个单词字典作为键和同义词列表中的值,我想填充Neo4j,似乎这将是一个有趣的方式来学习如何使用数据库。使用python填充Neo4j字典

一个例子是:

'旷课':[u'drunk 'u'wasted',u'high 'u'crunked',u'crazy 'u'hammered',U”酒精',u'hyphy',u'party']

该列表不会长度相等,因此将其转换为更典型的csv格式不是一种选择,我没有找到解释我如何像在Django应用程序中为SQL数据库那样填充数据库。我想要做这样的事情:

for each k,v in dictionary: 
    add k and add relationship to each value in v 

有没有人有任何教程,文档或答案可以帮助指向正确的方向?

+0

http://stackoverflow.com/questions/18931614/how-to-insert-bulk-data-into-neo4j-using-python 这链接有很多我需要的信息,我会尝试他们所说的话,并希望稍微发表一个答案。 – Rob

回答

3

我想你想你可以在Cypher支架直接做什么:

MERGE (w:Word {text:{root}}) 
UNWIND {words} as word 
MERGE (w2:Word {text:word}) 
MERGE (w2)-[:SYNONYM]->(w) 

你会然后运行与http://py2neo.org的CYPHER会话API这个语句和两个参数,一个root单词和words的列表。

你也可以使用的foreach,而不是开卷

MERGE (w:Word {text:{root}}) 
FOREACH (word IN {words} | 
    MERGE (w2:Word {text:word}) 
    MERGE (w2)-[:SYNONYM]->(w) 
) 
+0

哈哈在'言'引号。所以我刚刚阅读合并,我很欣赏这一点,这正是我所期待的。谢谢您的帮助!!!! – Rob

0

最后编辑MERGE计及:

它使用字典来检查,以确保它们的输出是不NoneType或“NOT FOUND”,并使用合并功能,以保证填充有“同义字,关系图他们不是重复的。

import pickle 
from py2neo import Graph 
from py2neo import Node, Relationship 

import random 

graph = Graph("http://neo4j:%[email protected]:7474/db/data/" %(pw)) 
udSyn = pickle.load(open('lookup_ud', 'rb')) 
myWords = udSyn.keys() 

for key in myWords: 
    print key 
    values = udSyn[key] 
    if values in [None, "NOT FOUND"]: 
     continue 
    node = graph.merge_one("WORD", "name", key) 

    for value in values: 
     node2 = graph.merge_one("WORD", "name", value) 
     synOfNode = Relationship(node, 'SYNONYM', node2) 
     graph.create(synOfNode) 
     graph.push()