Github 链接:
https://github.com/qq547276542/Agriculture_KnowledgeGraph
Demo:
http://p2052x6533.iok.la:44910/
目录结构:
代码语言:javascript复制.
├── MyCrawler // scrapy爬虫项目路径(已爬好)
│ └── MyCrawler
│ ├── data
│ └── spiders
├── data processing // 数据清洗(已无用)
│ └── data
├── demo // django项目路径
│ ├── Model // 模型层,用于封装Item类,以及neo4j和csv的读取
│ ├── demo // 用于写页面的逻辑(View)
│ ├── label_data // 标注训练集页面的保存路径
│ │ └── handwork
│ ├── static // 静态资源
│ │ ├── css
│ │ ├── js
│ │ └── open-iconic
│ ├── templates // html页面
│ └── toolkit // 工具库,包括预加载,命名实体识别
│ └── KNN_predict
├── KNN_predict // KNN算法预测标签
├── dfs_tree_crawler // 爬取互动百科农业实体树形结构的爬虫
└── wikidataSpider // 爬取wiki中的关系
可复用资源
- hudong_pedia.csv : 已经爬好的农业实体的百科页面的结构化csv文件
- labels.txt: 5000多个手工标注的实体类别
- predict_labels.txt: KNN算法预测的13W多个实体的类别
项目配置
系统需要安装:
- scrapy ---爬虫框架
- django ---web框架
- neo4j ---图数据库
- thulac ---分词、词性标注
- py2neo ---python连接neo4j的工具
- pyfasttext ---facebook开源的词向量计算框架
- pinyin ---获取中文首字母小工具
- 预训练好的词向量模型wiki.zh.bin(仅部署网站的话不需要下载) ---下载链接:http://s3-us-west-1.amazonaws.com/fasttext-vectors/wiki.zh.zip
(以上部分除了neo4j在官网下,wiki.zh.bin在亚马逊s3下载,其它均可直接用pip3 install 安装)
项目部署:
1、将hudong_pedia.csv导入neo4j:开启neo4j,进入neo4j控制台。将hudong_pedia.csv放入neo4j安装目录下的/import目录。在控制台依次输入:
代码语言:javascript复制// 将hudong_pedia.csv 导入
LOAD CSV WITH HEADERS FROM "file:///hudong_pedia.csv" AS line
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})
// 新增了hudong_pedia2.csv
LOAD CSV WITH HEADERS FROM "file:///hudong_pedia2.csv" AS line
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})
代码语言:javascript复制// 创建索引
CREATE CONSTRAINT ON (c:HudongItem)
ASSERT c.title IS UNIQUE
以上两步的意思是,将hudong_pedia.csv导入neo4j作为结点,然后对titile属性添加UNIQUE(唯一约束/索引)
(如果导入的时候出现neo4j jvm内存溢出,可以在导入前,先把neo4j下的conf/neo4j.conf中的dbms.memory.heap.initial_size 和dbms.memory.heap.max_size调大点。导入完成后再把值改回去)
进入/wikidataSpider/wikidataProcessing中,将new_node.csv,wikidata_relation.csv,wikidata_relation2.csv三个文件放入neo4j的import文件夹中(运行relationDataProcessing.py可以得到这3个文件),然后分别运行
代码语言:javascript复制// 导入新的节点
LOAD CSV WITH HEADERS FROM "file:///new_node.csv" AS line
CREATE (:NewNode { title: line.title })
//添加索引
CREATE CONSTRAINT ON (c:NewNode)
ASSERT c.title IS UNIQUE
//导入hudongItem和新加入节点之间的关系
LOAD CSV WITH HEADERS FROM "file:///wikidata_relation2.csv" AS line
MATCH (entity1:HudongItem{title:line.HudongItem}) , (entity2:NewNode{title:line.NewNode})
CREATE (entity1)-[:RELATION { type: line.relation }]->(entity2)
LOAD CSV WITH HEADERS FROM "file:///wikidata_relation.csv" AS line
MATCH (entity1:HudongItem{title:line.HudongItem1}) , (entity2:HudongItem{title:line.HudongItem2})
CREATE (entity1)-[:RELATION { type: line.relation }]->(entity2)
以上步骤是导入爬取到的关系
2、下载词向量模型:http://s3-us-west-1.amazonaws.com/fasttext-vectors/wiki.zh.zip将wiki.zh.bin放入 KNN_predict 目录 。 (如果只是为了运行项目,步骤2可以不做,预测结果已经离线处理好了)
3、进入demo/Model/neo_models.py,修改第9行的neo4j账号密码,改成你自己的
4、进入demo目录,然后运行脚本:
代码语言:javascript复制sudo sh django_server_start.sh
这样就成功的启动了django。我们进入8000端口主页面,输入文本,即可看到以下命名实体和分词的结果(确保django和neo4j都处于开启状态)。