知识图谱的小demo
这是一个试图实现知识图谱的“微项目”,从头到尾的工作包括,从网上爬取格式化的数据,简单的数据处理,将数据存入图数据库中。
关于知识图谱构建技术的相关知识详见附带的《知识图谱构建技术综述》
嫌麻烦不想看论文可以简单看看徐阿衡的博客 http://www.shuang0420.com/2017/09/05/项目实战-知识图谱初探/ 补充一下理论知识
环境及工具
Win10
python 3.6.5
scrapy
scrapy_redis
redis
neo4j
目录及文件
当前目录为scrapy项目的根目录内,记为{SCRAPY_ROOT}
{SCRAPY_ROOT}\
| medicine_company_list.txt 公司编号代码文件
| neo4j_import.bat 将处理后的data目录下的数据文件导入neo4j数据库中
| neo4j_nodes_edges.py 将redis服务器中的数据处理后输出data目录下的三个文件
| scrapy.cfg srapy的配置文件
| spiders_entry.py 开始爬取数据的入口
| urls.py 保存几个爬取网页的url
| Crawlers scrapy的项目目录
| | ···
| data 保存从redis导出后输出的数据文件
| | company_nodes.neo4j 公司结点的数据
| | person_nodes.neo4j 个人结点的数据
| | management_edges.neo4j 公司和个人之间管理关系的数据
| graph_demo.db 导入neo4j数据库后得到的数据库目录
| | ···
项目运行流程
Step 1
运行spiders_entry.py文件,成功后数据保存在redis服务器中
python spiders_entry.py [-h] [--host HOST] [--codefile CODEFILE] [--master MASTER] [--spiders SPIDERS]
optional arguments:
-h, --help show this help message and exit
--host HOST Redis服务器地址,默认为本地localhost
--codefile CODEFILE 公司代码列表,默认为 medicine_company_list.txt
--master MASTER 是master还是slave,1 表示master,0 表示slave,默认为 1
--spiders SPIDERS 选择爬虫,用逗号分隔,默认为 companySpider,managementSpider,noticeSpider
Step 2
直接运行neo4j_nodes_edges.py文件,将redis服务器中的数据导出到data目录下的文件中
python neo4j_nodes_edges.py
Step 3
运行批处理文件neo4j_import.bat文件,将数据导入neo4j服务器中
.\neo4j_import
引用连接
其他事项
这个项目主要参照shuang0420的knowledge_graph_demo的思路走,在数据方面的一些问题,如文件medicine_company_list.txt的来源未知,准确率和覆盖率没有细究,所以在导入neo4j数据库的时候提示出现了一堆referring to missing node的错误,不过对其他导入的结点不影响,就没有纠结这个地方。
爬虫爬取的数据包括公司信息,个人信息及管理关系,还有公司的公告信息,这里存入neo4j只考虑了公司和个人的管理关系,因为对公告的处理涉及到自然语言技术,所以暂时没有考虑,造成的结果就是每个公司(包括其管理人员)都是孤立的结点。
使用neo4j_import.bat将数据导入neo4j数据库时有可能出现乱码现象,需要将data目录下的三个文件转换为utf-8无BOM编码
neo4j需要安装Community Server版本,才能使用neo4j_import.bat文件中的neo4j-import命令,安装详见neo4j W3Cschool教程 Zip环境设置章节