还是参考徐阿衡的博客[项目实战--知识图谱初探](http://www.shuang0420.com/2017/09/05/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98-%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1%E5%88%9D%E6%8E%A2/)。
[TOC]
这篇比较全面的介绍了知识图谱的构建过程。这里并没有从头构建知识图谱。如果要从头做的话,得构建分布式爬虫,作者用的分布式爬虫是`scrapy-redis`,我还没有研究`scrapy-redis`怎么安装部署。作者提供了爬取、清理之后的数据,所以暂时先不部署。这些数据是从[中财网数据引擎](http://data.cfi.cn/cfidata.aspx)和[巨潮资讯](http://www.cninfo.com.cn/cninfo-new/index)爬取的上市公司高管信息(所属公司、学历、性别、出生年)。
[TOC]
作者提供了两种知识图谱的存储方式:图数据库`neo4j`和关系型数据库`MySQL`。我在本地部署,就使用了关系型数据库`MySQL`。
克隆下作者在`Github`上的项目:
`git clone https://github.com/Shuang0420/knowledge_graph_demo.git`
作者提供了在`MySQL`的建库表的脚本:
```
CREATE DATABASE IF NOT EXISTS `knowledge_graph` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE knowledge_graph;
CREATE TABLE IF NOT EXISTS company (
id varchar(20) PRIMARY KEY,
label varchar(20),
create_time datetime,
update_time datetime,
industry varchar(20),
first_register_addr varchar(100),
security_short_name varchar(20),
legal_entity varchar(20),
manager varchar(20),
code int NOT NULL UNIQUE KEY,
company_address varchar(100),
register_number varchar(50),
zipcode varchar(20),
company_name varchar(100))
DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS management (
company_id varchar(20) NOT NULL,
title varchar(50),
person_id varchar(20) NOT NULL,
type varchar(20) NOT NULL,
create_time datetime,
update_time datetime,
UNIQUE KEY (person_id, company_id))
DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS spo (
subj varchar(100),
pred varchar(100),
obj varchar(500),
type varchar(20),
create_time datetime,
update_time datetime,
UNIQUE KEY (subj, pred, obj))
DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS person (
id varchar(20) PRIMARY KEY,
label varchar(20),
create_time datetime,
update_time datetime,
education varchar(50),
birth varchar(20),
name varchar(20),
sex varchar(20),
UNIQUE KEY (birth, sex, name))
DEFAULT CHARSET=utf8;
LOAD DATA LOCAL INFILE 'company_node.txt' INTO TABLE company CHARACTER SET utf8 FIELDS TERMINATED BY '\t' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE 'person_node.txt' INTO TABLE person CHARACTER SET utf8 FIELDS TERMINATED BY '\t' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE 'management_edge.txt' INTO TABLE management CHARACTER SET utf8 FIELDS TERMINATED BY '\t' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE 'spo.txt' INTO TABLE spo CHARACTER SET utf8 FIELDS TERMINATED BY '\t' IGNORE 1 LINES;
```
这里涉及将四个文本文件 'company_node.txt'、 'person_node.txt'、'management_edge.txt'、'spo.txt'导入到数据库中。
这个`sql`的执行脚本`dump.sh`如下:
`mysql -uroot -p密码 < dump.sql`
部署好数据库后,就可以建立知识图谱的应用了。
[TOC]
作者使用`python`的`flask`、`d3`作为可视化web应用的开发工具。作者已经提供了web应用,所以只要更改数据库配置文件`./visualization/server/config.py`、安装`./visualization/server/models.py`上的工具就可以了。启动服务`python run_server.py`
如果想知道公司(例如公司代码为600276)的高管信息,在浏览器输入:
`http://localhost:8080/api/v1?company=600276`,可看到下图,
![](https://box.kancloud.cn/b74d9f369bdcb4c4470fac2beb538714_916x604.png)
如果想知道某一位高管的信息,输入:
![](https://box.kancloud.cn/bc03cee4ac062c16e6e989100152faac_265x375.png)
如果想做完整的知识图谱,得从爬虫做起。例如,先部署一个分布式爬虫。