2015-09-21 108 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()