简单的知识图谱,neo4j+python
因为研究方向是知识图谱,就有兴致想要构建一个简单的知识图谱,就在网上查找了一下,参考了neo4j搭建简单的金融知识图谱的思想,就着手从零开始构建。
1、首先就要考虑数据的获得,因为之前没有接触过爬虫之类,参考这篇,就仅仅采用简单的requests+正则表达式,爬取起点中文网的全部作品中的作者,作者ID,作品,作品ID,标签,标签ID,子标签以及作品完成与否这些数据,在这里参考了网上众多的爬虫代码,在这里,后期可以进一步扩展,点进作者页面再进行爬取更多的信息,在此,爬虫的知识太少,只会爬类似页面的信息,比如,1到20页的信息,通常在网址上有不同,很可能是数字规律性的改变,但是,对于起点中文网的作者网址,唯一找到的规律就仅仅只是后面是作者的ID,至于两者怎么结合,怎么爬取,有可能技术不精,还没弄出来,以后可在此增加。
2、获得了这些csv,又出现了问题,就是打开这些csv,竟然乱码了,在网上查找了一番,发现了一个有效的方法,先建一个excel,然后,点击数据,点击自文本,然后,再把想要转化的文本导入,文件原始格式改为简体中文,后面直接就点下一步,再打开csv,就不会乱码了,解决了乱码下一步就是导入neo4j。
这里的au_bo就是作者与小说的关系,其中就包含:START_ID :END_ID relation :TYPE,作者ID和小说ID,两者之间的关系,TYPE可以和关系一样,毕竟只是一个标记。
author就是作者信息,包含index:ID name :LABEL,作者ID和作者名字,标签,在这里就很遗憾,没有能够多弄几个数据,以后可以增加。
bo_co这一个还没有实验。
book就是小说信息,包含小说ID和小说名字,标签。
book_pro就是小说的标签,包含小说ID和标签ID,以及两者关系,TYPE,在这里,后来想了想感觉可以不用关系模式,可以合并在book中,后期再试试。
pro1是大标签,大标签ID和大标签的名字,LABEL,比如:1,仙侠之类的
pro2是小标签,小标签ID和小标签的名字,LABEL,比如仙侠中包含了很多小的标签
t1_t2就是大标签与小标签的关系,概念属于。
3、导入neo4j,参考的是这里
首先,为了不写import路径,就选择了简单的方法,在neo4j的bin下,创建一个importdata,然后将包含CSV的文件夹,放在该处,然后,再在cmd中导入,
neo4j-admin import --mode=csv --database=novel.db --nodes importdata\novel\author.csv --nodes importdata\novel\book.csv --nodes importdata\novel\pro1.csv --nodes importdata\novel\pro2.csv --relationships importdata\novel\au_bo.csv --relationships importdata\novel\book_pro.csv --relationships importdata\novel\t1_t2.csv
我的数据库名字是novel.db,然后其中author,book,pro1,pro2这些csv就是节点,au_bo,book_pro,t1_t2就是其中两者的关系
在这里,碰到了问题,就是报错,没有这些csv,问题就在于需要进入neo4j文件下的bin中,在输入上述命令
另一个错误,就是导入过程中的错误,这就在于这些爬下来的数据,不知道为什么有重复又有遗漏的数据,那么就涉及数据清洗,这里还没有仔细研究,后期再研究研究
因为,数据不是很多,就采用人工校对,在关系中的节点必须要存在这些节点,不幸的我,200数据,在仔细筛选中,只剩下130。
每次导入必须把原错误导入的文件夹删除,在neo4j的data的databases中删除。
同时还有个关键,查看什么图谱,必须将neo4j的conf中neo4j.conf
dbms.active_database=novel.db
后面修改为你所需要查看的数据库,此处我的就是novel.db
4、问题众多啊,成功导入后,在cmd中输入neo4j.bat console,然后,在浏览器中输入http://localhost:7474/,就可以看到,我的竟然又乱码了,果然在前面的修改csv,有问题,
就可以将csv用记事本打开,然后,另存为,果然编码是ANSI,在这里需要改为UTF-8,然后,修改完就正确了。
很开心,后面再增加更多内容