前言

项目是上海市《农业信息服务平台及农业大数据综合利用研究》子课题《上海农业农村大数据共享服务平台建设和应用》的研究成果。

该课题是由上海市农业委员会信息中心主持,以“致富农民、服务市民、提高行政管理效能”为目标,充分发挥大数据在农业农村发展中的重要功能和巨大潜力,重点建设上海市级农业农村大数据中心,促进信息资源的共建共享和创新应用。

华东师范大学数据科学与工程学院(以下简称华师大数据学院)作为课题主要参与单位以实现智慧农业为目标,探索农业大数据分析、挖掘和综合应用。华师大课题组在前期国家重点研发计划《大数据知识工程基础理论及其应用研究》研究基础上,在本项目中,基于碎片化农业大数据,构建面向智慧农业的知识图谱及其应用系统。

项目地址见:https://github.com/qq547276542/Agriculture_KnowledgeGraph

本文介绍整个项目的部署过程,记录和总结部署过程中存在的问题。

1. 环境准备

  1. 创建python虚拟环境
conda create -n kg python=3.6
  1. 激活环境
conda activate kg

退出环境(可选)

conda deactivate

2. 安装依赖包

cd至项目根目录,有一个requirement.txt。requirement.txt文件里面记录了当前程序运行所需要的所有安装包和其版本号,作用是方便程序在其他机器上重新构建项目安装所有依赖。

打开requirement.txt文件可以看到里面需要安装的包:

Cython>=0.28.5
Django>=1.11.7
thulac>=0.1.2
py2neo4.1.0
pyfasttext0.4.5
pinyin>=0.4.0
pymongo>=3.6.1

requirement.txt的使用方式如下所示,即可自动下载requirement 中的安装包。

pip install -r requirement.txt

但需要注意的是我在安装过程中发现使用上述方式安装pyfasttext 安装失败。

参考这篇文章:https://pypi.org/project/pyfasttext/
首先直接安装cysignals和pyfasttext.

pip install cysignals
pip install pyfasttext

然后修改requirement.txt ,删除掉已经安装的pyfasttext. 再安装安装命令

pip install -r requirement.txt

3. 安装Jdk1.8

下载 Java
Java 8 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

解压
tar -xzvf jdk-8u131-linux-x64.tar.gz

配置环境变量
这里通过修改/etc/project文件来配置环境变量

vim /etc/project

在文件末尾添加如下信息

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

执行以下命令,使之生效

source /etc/profile

检查 Java 版本

java -version

4. 安装neo4j

下载
从官网下载neo4j 的3.5.2版本,下载地址为neo4j社区版
注意: neo4j 4.1版本要求jdk11 ,neo4j 3.5版本要求jdk8。 所以neo4j 选择3.5的版本。

解压

tar zxvf neo4j-community-3.5.22-unix.tar.gz

修改目录

mv neo4j-community-3.5.22 neo4j

配置环境变量

vi /etc/profile

添加:

export NEO4J_HOME=/opt/neo4j
export PATH=$PATH:$NEO4J_HOME/bin

执行以下命令,使之生效

source /etc/profile

修改配置文件

vi /etc/security/limits.conf

neo4j soft nofile 40000
neo4j hard nofile 40000

vi /opt/neo4j/conf/
#设置远程访问
dbms.connectors.default_listen_address=0.0.0.0
#设置数据库名称
dbms.active_database=agriculture_kg.db

启动服务

neo4j start

查看状态

neo4j status

停止服务

neo4j stop

导入数据(这部分内容和Github中Readme文件一样)

将hudong_pedia.csv导入neo4j:开启neo4j,进入neo4j控制台。将hudong_pedia.csv放入neo4j安装目录下的/import目录。在控制台依次输入:

// 将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})
// 创建索引
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个文件),然后分别运行

// 导入新的节点
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)

导入实体属性(数据来源: 互动百科)

将attributes.csv放到neo4j的import目录下,然后执行

LOAD CSV WITH HEADERS FROM "file:///attributes.csv" AS line
MATCH (entity1:HudongItem{title:line.Entity}), (entity2:HudongItem{title:line.Attribute})
CREATE (entity1)-[:RELATION { type: line.AttributeName }]->(entity2);LOAD CSV WITH HEADERS FROM "file:///attributes.csv" AS line
MATCH (entity1:HudongItem{title:line.Entity}), (entity2:NewNode{title:line.Attribute})
CREATE (entity1)-[:RELATION { type: line.AttributeName }]->(entity2);LOAD CSV WITH HEADERS FROM "file:///attributes.csv" AS line
MATCH (entity1:NewNode{title:line.Entity}), (entity2:NewNode{title:line.Attribute})
CREATE (entity1)-[:RELATION { type: line.AttributeName }]->(entity2);LOAD CSV WITH HEADERS FROM "file:///attributes.csv" AS line
MATCH (entity1:NewNode{title:line.Entity}), (entity2:HudongItem{title:line.Attribute})
CREATE (entity1)-[:RELATION { type: line.AttributeName }]->(entity2)  //我们建索引的时候带了label,因此只有使用label时才会使用索引,这里我们的实体有两个label,所以一共做2*2=4次。当然,可以建立全局索引,即对于不同的label使用同一个索引

导入气候名称:

将wikidataSpider/weatherData/static_weather_list.csv放在指定的位置(import文件夹下)

//导入节点
LOAD CSV WITH HEADERS FROM "file:///static_weather_list.csv" AS line
MERGE (:Weather { title: line.title })//添加索引
CREATE CONSTRAINT ON (c:Weather)
ASSERT c.title IS UNIQUE

导入气候与植物的关系


将wikidataSpider/weatherData/weather_plant.csv放在指定的位置(import文件夹下)
//导入hudongItem和新加入节点之间的关系
LOAD CSV  WITH HEADERS FROM "file:///weather_plant.csv" AS line
MATCH (entity1:Weather{title:line.Weather}) , (entity2:HudongItem{title:line.Plant})
CREATE (entity1)-[:Weather2Plant { type: line.relation }]->(entity2)
导入城市的气候将city_weather.csv放在指定的位置(import 文件夹下)
(这步大约需要15分钟左右)
//导入城市对应的气候
LOAD CSV WITH HEADERS FROM "file:///city_weather.csv" AS line
MATCH (city{title:line.city}) , (weather{title:line.weather})
CREATE (city)-[:CityWeather { type: line.relation }]->(weather)

以上步骤是导入爬取到的关系

2.下载词向量模型:(如果只是为了运行项目,步骤2可以不做,预测结果已经离线处理好了)

http://s3-us-west-1.amazonaws.com/fasttext-vectors/wiki.zh.zip
将wiki.zh.bin放入 KNN_predict 目录 。

3.修改Neo4j用户

进入demo/Model/neo_models.py,修改第9行的neo4j账号密码,改成你自己的

4.启动服务

进入demo目录,然后运行脚本:

sudo sh django_server_start.sh

这样就成功的启动了django。我们进入8000端口主页面,输入文本,即可看到以下命名实体和分词的结果(确保django和neo4j都处于开启状态)

部署农业知识图谱开源项目相关推荐

  1. 华师农业知识图谱(Agriculture_KnowledgeGraph)项目环境构建指南

    本次项目所用到的资源包括pyhon3,java11,neo4j以及一系列pip依赖.下面按照顺序进行项目的安装说明. 1. Python3 (该部分参考:Anaconda安装教程(超详细)_anaco ...

  2. 技术动态 | 人工智能开源软件发展现状连载——知识图谱开源软件

    本文转载自公众号:中国人工智能开源软件发展联盟,欢迎大家点击文末二维码关注. 知识图谱 (Knowledge Graph)是一种基于图的数据结构,由节点(Point)和边(Edge)组成.在知识图谱里 ...

  3. 知识图谱开源社区_您需要了解的关于开源社区中的倦怠的知识

    知识图谱开源社区 今年年初,我筋疲力尽. 碰巧的是,当时我也在研究倦怠的话题. 我花了一些时间将自己的研究和经验总结出来. 最近,国际疾病分类将倦怠归类为职业现象. 它把倦怠定义为"概念化的 ...

  4. 知识图谱开源开放及生态 | 7月12日TF65

    本期会议邀请到来自阿里巴巴等头部企业的代表,以及来自北京大学.南京大学和浙江大学的研究人员,一起深入探讨开放知识图谱.知识图谱开源工具等所面临的机遇和挑战,并进一步了解知识图谱开放和开源工具构建的应用 ...

  5. 会议交流 | 知识图谱开源开放及生态——7月12日TF65

    转载公众号 | 中国计算机学会 本期会议邀请到来自阿里巴巴等头部企业的代表,以及来自北京大学.南京大学和浙江大学的研究人员,一起深入探讨开放知识图谱.知识图谱开源工具等所面临的机遇和挑战,并进一步了解 ...

  6. neo4j构建农业知识图谱

    neo4j构建农业知识图谱 农业知识图谱(Agriculture_KnowledgeGraph)项目环境构建 前言 1.环境构建 2.导入数据 2.1导入节点HudongItem数据 2.2导入节点N ...

  7. 基于Neo4j与js制作的农业知识图谱

    主要提供农作物.农产品相关的知识.本项目以扶贫助农.加速全面建成小康社会为主要目的,从农业知识图谱着手,以扶持农业发展为起点,致力于帮助当地农民的电商发展.采用人工智能与大数据相结合的方式,前端与后端 ...

  8. 手把手教学构建农业知识图谱:农业领域的信息检索+智能问答,命名实体识别,关系抽取,实体关系查询

    项目设计集合(人工智能方向):助力新人快速实战掌握技能.自主完成项目设计升级,提升自身的硬实力(不仅限NLP.知识图谱.计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户 ...

  9. 农业知识图谱搭建和遇到的问题

    Agriculture_KnowledgeGraph demo:http://ecnukg.vicp.io github:https://github.com/qq547276542/Agricult ...

最新文章

  1. C++ Rand()各种实现
  2. Beetlex之websocket/tls服务压测工具
  3. 宣告推出.NET Core 3.0 Preview 7
  4. 阿里P8架构师谈:从单体架构、到SOA、再到微服务的架构设计详解
  5. oracle怎么查询模式名,oracle怎么查询数据库实例的三种方式
  6. unity3D与网页的交互---做项目的一点总结
  7. mysql 覆盖索引 简书_mysql覆盖索引与回表
  8. 判断能否组成三角形(水题)
  9. matlab padarray
  10. oracle+in+多,Oracle in子句过多的硬编码引发的故障
  11. pdf格式压缩大小,pdf如何压缩大小?
  12. maven常用命令大全(附详细解释)
  13. 全球主要气象气候研究部门及其共享数据集介绍
  14. Python教学案例 - 三天打渔、两天晒网
  15. 数学之美(Beauty Of Mathematics)
  16. Numpy中take的用法
  17. 斗罗大陆斗神再临服务器维修,斗罗大陆斗神再临攻略汇总:FAQ常见问题解答[多图]...
  18. 灵魂画师全都出来了,都怪昨天那个AI画猫的应用……
  19. adobe xd 白屏闪退 终极拯救方法
  20. 华为路由器交换机常用命令(随时补充更新)

热门文章

  1. cacti简单安装部署
  2. Mac OS下Appium环境搭建及Genymotion模拟器安装
  3. 使用Ajax实现简单的增删查改前端Ajax传的值,后端如何获取
  4. OpenCV之Mat与Bitmap之间的转换
  5. 扇区示意图计算机组成原理,计算机组成原理(本).ppt
  6. Collaborative Knowledge Base Embedding for Recommender Systems(译)
  7. 【入门模拟】形状与转换
  8. 数据库设计工具的使用(实用)
  9. 世界杯掠影系列(一)
  10. python彩票预测与分析_彩票专家分析预测号码