首先Neo4j是图数据库,最重要的就是结点和边的关系,每两个结点和边都可以看成三元组,主谓宾的关系,当然结点也是可以添加属性的,但是首先要有结点,在添加属性。本片文章就是用简单的方式一次性给大家讲解清楚。
简单起见,我们用西游记师徒四人为例子(手动写的,为了理解),来体现出本章要讲的操作
一、先把人物和关系罗列出来

注意,要将文件保存为.csv格式
ps:知识图谱的建立,数据来源主要分为三种,一种是非结构化数据(文本)、半结构化数据(可以爬虫技术在一些网站上获取),结构化数据(关系型数据)。
二、要建立结点,只有有了结点才会有关系,和之后的属性等。代码如下:
from py2neo import Graph, Node, Relationship
import csv
fr= open("G:\四人关系.csv", mode="r", encoding="gbk") # 如果路径是在工程目录下直接下相对路径,如果不在就写绝对路径
lst = []
node = []
for row in csv.reader(fr):
lst_ = []
lst_.append(row[0])
lst_.append(row[1])
lst_.append(row[2])
lst_.append(row[3])
lst_.append(row[4])
lst.append(lst_)
node.append(row[0]+' '+row[1])
node.append(row[3]+' '+row[4])
# print(lst)
graph = Graph('bolt://localhost:7687',name="neo4j",password="******")
node = set(node) # 消除重复结点
# 建立结点:
for item in node:
shiti,label = item.split()
cypher_ = "CREATE (:" + label + " {name:'" + shiti + "'}) "
graph.run(cypher_)
# 建立关系 :
for item in lst:
cypher_ = "MATCH (a:" + item[1] + "),(b:" + item[4] + ") WHERE a.name = '" + item[0] + "' AND b.name = '" + item[3] + "' CREATE (a)-[r:" + item[2] + "]->(b)"
graph.run(cypher_)
建立是先根据第1,2列、4,5列建立结点后,才根据第3列建立的关系,运行后,师徒四人的图谱就建立好了,效果如下图:

三、增加属性
和以上操作一样,现在EXCEL上写好属性,如图(只写了一点),自己做的时候把自己要的属性像这样写清楚:

代码和上面的一样,只是换了cypher语句:
from py2neo import Graph, Node, Relationship
import csv
fr= open("属性.csv", mode="r", encoding="gbk")
lst = []
node = []
for row in csv.reader(fr):
lst_ = []
lst_.append(row[0])
lst_.append(row[1])
lst_.append(row[2])
lst_.append(row[3])
lst.append(lst_)
node.append(row[0]+' '+row[1])
node.append(row[2]+' '+row[3])
graph = Graph('bolt://localhost:7687',name="neo4j",password="******")
for item in lst:
cypher_ = "MATCH (a:" + item[1] + "{name:'" + item[0] + "'}) SET a." + item[2] + " = '" + item[3] +"'"
graph.run(cypher_)
运行之后,点击结点就可以看到属性的信息啦。
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决