【问题标题】:Populating Neo4j using python Dictionary使用 python 字典填充 Neo4j
【发布时间】:2015-09-21 19:20:59
【问题描述】:

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

一个例子是:

'CRUNK' : [u'drunk', u'wasted', u'high', u'crunked', u'crazy', u'hammered', u'alcohol', u'hyphy', u'派对']

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

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

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

【问题讨论】:

标签: python dictionary neo4j cypher nosql


【解决方案1】:

我想你想做的事可以直接在 Cypher 中做:

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

然后,您将使用 http://py2neo.org 的 cypher-session API 和两个参数(一个 root 单词和 words 列表)运行此语句。

你也可以用 foreach 代替 unwind

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

【讨论】:

  • 在引号中的“单词”处哈哈大笑。所以我刚刚阅读了合并,我很感激,这正是我想要的。感谢您的帮助!!!!
【解决方案2】:

最终编辑合并:

这使用字典来检查以确保它们的输出不是 NoneType 或“NOT FOUND”,并使用合并函数使用“SYNONYM”关系填充图形以确保它们不重复。

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

import random

graph = Graph(f'http://neo4j:{pw}@localhost:7474/db/data/'))
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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2021-07-06
    相关资源
    最近更新 更多