项目三气象知识图谱的构建及区域积水地区预测:

奈天昏地暗,斗转星移。风骤紧,缥缈风头云乱。用知识图谱构建气象知识图谱,在结合具体地点地势做到即使预警,将技术及时的落地才是王道。


项目需求分析

我拿到手上的需求是这样的,需求一需要将某个地区降雨等级,降雨量,措施用知识图谱封装好,然后某地再次遇到降雨,提取之前相同情况下的预警措施,给出相对应建议。同时,在根据降雨地区地势,给出相对应的预警,比如低洼地区无论什么降雨等级都会积水。


降雨预警知识图谱构建:

当输入一句话,例如郑州市气象台2021年07月20日01时14分继续发布暴雨橙色预警信号:预计未来3小时内,郑州市区及所辖六县(市)降雨量将达50毫米以上,局部达100毫米以上,请注意防范。先自动提取时间,地点和降雨等级依次分别存入到知识图谱中,其中地点的抽取我们将用到 jiagu 分成工具,地点的词性标识是ORG 或者 LOC,因此我们全都拿下以防万一。要注意的是知识图谱的一次存入是节点必须是唯一性的,但分开依次创建节点存入,就会没有这问题,但是我们不需要个地名或者一个降雨等级重复太多次数,因此每次存入时需要筛查是否存在一样内容的节点,存在那么跳过,不存在就创建然后塞进去。好了代码如下:

__author__ = "Huzhichen"
#coding=utf-8
import jiagu
from py2neo import Graph, Node, Relationship, NodeMatcher
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from selenium import webdriver
import webbrowser
# 输入文本
char =input()
text=''
while char!="":text= charprint(char)char=input()
print(text)
#提取时间
import re
K=re.findall(r'[0-9]+[年|月|日|时|分]',text)
time=''
for i in range(len(K)):if K[i].find('年')!=-1 and K[i+1].find('月')!=-1 and K[i+2].find('日')!=-1 and K[i+3].find('时')!=-1 and K[i+4].find('分')!=-1:time=time+K[i]+K[i+1]+K[i+2]+K[i+3]+K[i+4]
print(time)
#提取等级
jiagu.load_userdict(['暴雨蓝色预警','暴雨黄色预警','暴雨橙色预警','暴雨红色预警'])
words = jiagu.seg(text)
level=''
for i in range(len(words)):if text.find('暴雨蓝色预警')!=-1:level='暴雨蓝色预警'breakif text.find('暴雨黄色预警')!=-1:level='暴雨黄色预警'breakif text.find('暴雨橙色预警')!=-1:level='暴雨橙色预警'breakif text.find('暴雨红色预警')!=-1:level='暴雨红色预警'break
print(level)
# 提取地点
ner = jiagu.ner(words) # 命名实体识别
loc=''
flagi=0
for i in range(len(ner)):if (ner[i].find('ORG')!=-1 or ner[i].find('LOC')!=-1):flagi=iloc = loc + words[flagi]if ner[i+1]=='O':break
print(loc)
# neo4j
graph = Graph("http://localhost:7474", auth=("neo4j", "admin"))
matcher = NodeMatcher(graph)
# 查询预警
blue=matcher.match('蓝色预警').where("_.name='暴雨蓝色预警'").first()
yellow=matcher.match('黄色预警').where("_.name='暴雨黄色预警'").first()
orange=matcher.match('橙色预警').where("_.name='暴雨橙色预警'").first()
red=matcher.match('红色预警').where("_.name='暴雨红色预警'").first()time_node = Node('时间',label='time',name=time)
loc_pre=matcher.match('地址').where("_.name="+"\'"+loc+"\'").first()
if matcher.match('地址').where("_.name="+"\'"+loc+"\'").exists() == False:loc_node= Node('地址',label='location',name=loc)graph.create(loc_node)print("节点不存在正在创建")
else:loc_node=matcher.match('地址').where("_.name="+"\'"+loc+"\'").first()print("节点已经存在")
graph.create(time_node)
#关系
relationshipTime = Relationship(time_node,'时间'+time,loc_node)
graph.create(relationshipTime)

如图片所示:

之后还有一个小功能就是发送邮件,给各个职位的工作人员发送预防邮件,别问我为什么不发短信,因为穷没钱买。不是俺不会。代码如下:

# 发送通知邮件
host_server = 'smtp.qq.com'  #qq邮箱smtp服务器
sender_qq = '************************' #发件人邮箱
pwd = '************************'
receiver = ['1053962771@qq.com']#收件人邮箱
#receiver = '1053962771@qq.com@qq.com'
mail_title = '降雨预防提醒' #邮件标题
mail_content=''
if level== '暴雨蓝色预警':relationshipLevel = Relationship(loc_node, '灾害等级'+time, blue)graph.create(relationshipLevel)mail_content = text +'预防措施: 1.政府及相关部门按照职责做好防暴雨准备工作。 ' \'2.学校、幼儿园采取适当措施,保证学生和幼儿安全。 ' \'3.驾驶人员应当注意道路积水和交通阻塞,确保安全。' \'4.检查城市、农田、鱼塘排水系统,做好排涝准备。'  # 邮件正文内容
elif level== '暴雨黄色预警':relationshipLevel = Relationship(loc_node, '灾害等级'+time, yellow)graph.create(relationshipLevel)mail_content = text+'预防措施: 1、政府及相关部门按照职责做好防暴雨工作。' \'2、交通管理部门应当根据路况在强降雨路段采取交通管制措施,在积水路段实行交通引导。' \'3、切断低洼地带有危险的室外电源,暂停在空旷地方的户外作业,转移危险地带人员和危房居民到安全场所避雨。' \'4、检查城市、农田、鱼塘排水系统,采取必要的排涝措施。'  # 邮件正文内容
elif level== '暴雨橙色预警':relationshipLevel = Relationship(loc_node, '灾害等级'+time, orange)graph.create(relationshipLevel)mail_content = text+'预防措施:1、政府及相关部门按照职责做好防暴雨应急工作。' \'2、切断有危险的室外电源,暂停户外作业。' \'3、处于危险地带的单位应当停课、停业,采取专门措施保护已到校学生、幼儿和其他上班人员的安全。' \'4、做好城市、农田的排涝,注意防范可能引发的山洪、滑坡、泥石流等灾害。'  # 邮件正文内容
elif level== '暴雨红色预警':relationshipLevel = Relationship(loc_node, '灾害等级'+time, red)graph.create(relationshipLevel)mail_content = text+'预防措施:1.政府及相关部门按照职责做好防暴雨应急和抢险工作;' \'2、停止集会、停课、停业(除特殊行业外);' \'3、做好山洪、滑坡、泥石流等灾害的防御和抢险工作。'  # 邮件正文内容# 初始化一个邮件主体
msg = MIMEMultipart()
msg["Subject"] = Header(mail_title,'utf-8')
msg["From"] = sender_qq
# msg["To"] = Header("测试邮箱",'utf-8')
msg['To'] = ";".join(receiver)
# 邮件正文内容
msg.attach(MIMEText(mail_content,'plain','utf-8'))smtp = SMTP_SSL(host_server) # ssl登录# login(user,password):
# user:登录邮箱的用户名。
# password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。
smtp.login(sender_qq,pwd)# sendmail(from_addr,to_addrs,msg,...):
# from_addr:邮件发送者地址
# to_addrs:邮件接收者地址。字符串列表['接收地址1','接收地址2','接收地址3',...]或'接收地址'
# msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。
smtp.sendmail(sender_qq,receiver,msg.as_string())# quit():用于结束SMTP会话。
smtp.quit()

如图所示:

发送完邮件后,就要开始设计降雨地势问题。

完整代码如下:

__author__ = "Huzhichen"
#coding=utf-8
import jiagu
from py2neo import Graph, Node, Relationship, NodeMatcher
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from selenium import webdriver
import webbrowser
# 输入文本
char =input()
text=''
while char!="":text= charprint(char)char=input()
print(text)
#提取时间
import re
K=re.findall(r'[0-9]+[年|月|日|时|分]',text)
time=''
for i in range(len(K)):if K[i].find('年')!=-1 and K[i+1].find('月')!=-1 and K[i+2].find('日')!=-1 and K[i+3].find('时')!=-1 and K[i+4].find('分')!=-1:time=time+K[i]+K[i+1]+K[i+2]+K[i+3]+K[i+4]
print(time)
#提取等级
jiagu.load_userdict(['暴雨蓝色预警','暴雨黄色预警','暴雨橙色预警','暴雨红色预警'])
words = jiagu.seg(text)
level=''
for i in range(len(words)):if text.find('暴雨蓝色预警')!=-1:level='暴雨蓝色预警'breakif text.find('暴雨黄色预警')!=-1:level='暴雨黄色预警'breakif text.find('暴雨橙色预警')!=-1:level='暴雨橙色预警'breakif text.find('暴雨红色预警')!=-1:level='暴雨红色预警'break
print(level)
# 提取地点
ner = jiagu.ner(words) # 命名实体识别
loc=''
flagi=0
for i in range(len(ner)):if (ner[i].find('ORG')!=-1 or ner[i].find('LOC')!=-1):flagi=iloc = loc + words[flagi]if ner[i+1]=='O':break
print(loc)
# neo4j
graph = Graph("http://localhost:7474", auth=("neo4j", "admin"))
matcher = NodeMatcher(graph)
# 查询预警
blue=matcher.match('蓝色预警').where("_.name='暴雨蓝色预警'").first()
yellow=matcher.match('黄色预警').where("_.name='暴雨黄色预警'").first()
orange=matcher.match('橙色预警').where("_.name='暴雨橙色预警'").first()
red=matcher.match('红色预警').where("_.name='暴雨红色预警'").first()time_node = Node('时间',label='time',name=time)
loc_pre=matcher.match('地址').where("_.name="+"\'"+loc+"\'").first()
if matcher.match('地址').where("_.name="+"\'"+loc+"\'").exists() == False:loc_node= Node('地址',label='location',name=loc)graph.create(loc_node)print("节点不存在正在创建")
else:loc_node=matcher.match('地址').where("_.name="+"\'"+loc+"\'").first()print("节点已经存在")
graph.create(time_node)
#关系
relationshipTime = Relationship(time_node,'时间'+time,loc_node)
graph.create(relationshipTime)
# 发送通知邮件
host_server = 'smtp.qq.com'  #qq邮箱smtp服务器
sender_qq = '***********' #发件人邮箱
pwd = '***********'
receiver = ['1053962771@qq.com']#收件人邮箱
#receiver = '1053962771@qq.com@qq.com'
mail_title = '降雨预防提醒' #邮件标题
mail_content=''
if level== '暴雨蓝色预警':relationshipLevel = Relationship(loc_node, '灾害等级'+time, blue)graph.create(relationshipLevel)mail_content = text +'预防措施: 1.政府及相关部门按照职责做好防暴雨准备工作。 ' \'2.学校、幼儿园采取适当措施,保证学生和幼儿安全。 ' \'3.驾驶人员应当注意道路积水和交通阻塞,确保安全。' \'4.检查城市、农田、鱼塘排水系统,做好排涝准备。'  # 邮件正文内容
elif level== '暴雨黄色预警':relationshipLevel = Relationship(loc_node, '灾害等级'+time, yellow)graph.create(relationshipLevel)mail_content = text+'预防措施: 1、政府及相关部门按照职责做好防暴雨工作。' \'2、交通管理部门应当根据路况在强降雨路段采取交通管制措施,在积水路段实行交通引导。' \'3、切断低洼地带有危险的室外电源,暂停在空旷地方的户外作业,转移危险地带人员和危房居民到安全场所避雨。' \'4、检查城市、农田、鱼塘排水系统,采取必要的排涝措施。'  # 邮件正文内容
elif level== '暴雨橙色预警':relationshipLevel = Relationship(loc_node, '灾害等级'+time, orange)graph.create(relationshipLevel)mail_content = text+'预防措施:1、政府及相关部门按照职责做好防暴雨应急工作。' \'2、切断有危险的室外电源,暂停户外作业。' \'3、处于危险地带的单位应当停课、停业,采取专门措施保护已到校学生、幼儿和其他上班人员的安全。' \'4、做好城市、农田的排涝,注意防范可能引发的山洪、滑坡、泥石流等灾害。'  # 邮件正文内容
elif level== '暴雨红色预警':relationshipLevel = Relationship(loc_node, '灾害等级'+time, red)graph.create(relationshipLevel)mail_content = text+'预防措施:1.政府及相关部门按照职责做好防暴雨应急和抢险工作;' \'2、停止集会、停课、停业(除特殊行业外);' \'3、做好山洪、滑坡、泥石流等灾害的防御和抢险工作。'  # 邮件正文内容# 初始化一个邮件主体
msg = MIMEMultipart()
msg["Subject"] = Header(mail_title,'utf-8')
msg["From"] = sender_qq
# msg["To"] = Header("测试邮箱",'utf-8')
msg['To'] = ";".join(receiver)
# 邮件正文内容
msg.attach(MIMEText(mail_content,'plain','utf-8'))smtp = SMTP_SSL(host_server) # ssl登录# login(user,password):
# user:登录邮箱的用户名。
# password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。
smtp.login(sender_qq,pwd)# sendmail(from_addr,to_addrs,msg,...):
# from_addr:邮件发送者地址
# to_addrs:邮件接收者地址。字符串列表['接收地址1','接收地址2','接收地址3',...]或'接收地址'
# msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。
smtp.sendmail(sender_qq,receiver,msg.as_string())# quit():用于结束SMTP会话。
smtp.quit()

降雨地势淹没方案:

我们可以简但的认为,地势最高的地方将会被红色预警降雨淹没,较高的地方将会被红色预警或橙色预警淹没,较低的地方会被橙色,红色,黄色降雨预警淹没,而低洼地方将会被红色,橙色,黄色,蓝色降雨预警淹没,这样一个简单例子。同时我们需要知道,城市和城市直接地势不一样,我们不能简单的给一个固定值,我们需要动态的将这里的地势进行划分,而不是一杆子打死定义死。因此我们需要一个简单的聚类算法将这些地方动态分类。那么分类的算法用什么呢,最简单就是最好用的K-means将地势分个类,代码如下:

import pandas as pd
from sklearn.cluster import KMeans
import numpy as np
from sklearn.preprocessing import MinMaxScaler# 将上述数据放到 excel 里,并用 pandas 读取
df = pd.read_excel(r'D:\pythonProjectWeather\weather\test.xlsx', index_col=0)scale_values =  MinMaxScaler().fit_transform(df.values)  # 数据预处理kmeans = KMeans(n_clusters=4).fit(scale_values) # 分为 4 类
print(kmeans.labels_) # 输出判别结果列表# 具体输出判别结果
cluster_1 = []
cluster_2 = []
cluster_3 = []
cluster_4 = []
for i, j in enumerate(kmeans.labels_):if j == 0:cluster_1.append(df.index[i])elif j == 1:cluster_2.append(df.index[i])elif j==2:cluster_3.append(df.index[i])else:cluster_4.append(df.index[i])
print('类别1')
print(cluster_1)
print('类别2')
print(cluster_2)
print('类别3')
print(cluster_3)
print('类别4')
print(cluster_4)# draw pictures by tsne, or pca, 利用主成分降维,并画图显示分类结果#from sklearn.manifold import TSNE
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
#from mpl_toolkits.mplot3d import Axes3Dtsne = PCA(n_components = 2).fit_transform(scale_values)
df2 = pd.DataFrame(tsne)
df2['labels'] = kmeans.labels_df_1 = df2[df2['labels'] == 0]
df_2 = df2[df2['labels'] == 1]
df_3 = df2[df2['labels'] == 2]
df_4 = df2[df2['labels'] == 3]
# 画图
plt.figure()
plt.plot(df_1[0], df_1[1], 'yo', df_2[0], df_2[1], 'g*', df_3[0], df_3[1], 'rD',df_4[0], df_4[1], 'bD')
plt.savefig('a.jpg',dpi = 300)
plt.show()

到此我们就可以用了一个简单的关联关系,就是图谱的降雨可以联系到地区地势,地势被淹问题。

地图可视化:

这个我们将用到百度,百度地方在地点可视化方面有详细的简绍和标识,我们只要将上面某个降雨等级下可能淹没地点投射到地图中即可,但是这里,我简单的举了例子,没有动态写入,只是将地点写死。代码和图如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><title>郑州降雨积水路段</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="initial-scale=1.0, user-scalable=no"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><style>body,html,#container {overflow: hidden;width: 100%;height: 100%;margin: 0;font-family: "微软雅黑";}</style><script src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=********"></script>
</head>
<body><div id="container"></div>
</body>
</html>
<script>
var map = new BMapGL.Map('container');
map.centerAndZoom(new BMapGL.Point(113.631419,34.753439), 12);
map.enableScrollWheelZoom(true);
// 创建点标记
var point1 = new BMapGL.Point(113.539225,34.600379);
var point2 = new BMapGL.Point(113.642706,34.720525);
var point3 = new BMapGL.Point(113.693071,34.601209);
var point4 = new BMapGL.Point(113.65976,34.756405);
var point5 = new BMapGL.Point(113.631419,34.753439);
var point6 = new BMapGL.Point(113.734436,34.724458);
var point7 = new BMapGL.Point(113.711848,34.814838);// //#region 创建点,并且展开大小
// map.centerAndZoom(point1, 12);
// map.centerAndZoom(point2, 12);
// map.centerAndZoom(point3, 12);
// map.centerAndZoom(point4, 12);
// map.centerAndZoom(point5, 12);
// map.centerAndZoom(point6, 12);
// map.centerAndZoom(point7, 12);var marker1 = new BMapGL.Marker(point1);
var marker2 = new BMapGL.Marker(point2);
var marker3 = new BMapGL.Marker(point3);
var marker4 = new BMapGL.Marker(point4);
var marker5 = new BMapGL.Marker(point5);
var marker6 = new BMapGL.Marker(point6);
var marker7 = new BMapGL.Marker(point7);
// 在地图上添加点标记
map.addOverlay(marker1);
map.addOverlay(marker2);
map.addOverlay(marker3);
map.addOverlay(marker4);
map.addOverlay(marker5);
map.addOverlay(marker6);
map.addOverlay(marker7);
//创建标记
var opts1 = {width : 200,     // 信息窗口宽度height: 100,     // 信息窗口高度title : "郑州市郑密路南" , // 信息窗口标题}
var opts2 = {width : 200,     // 信息窗口宽度height: 100,     // 信息窗口高度title : "郑州市航海路淮南街" , // 信息窗口标题}
var opts3 = {width : 200,     // 信息窗口宽度height: 100,     // 信息窗口高度title : "郑州市京广路淮河路" , // 信息窗口标题}
var opts4 = {width : 200,     // 信息窗口宽度height: 100,     // 信息窗口高度title : "郑州市陇海路京广路" , // 信息窗口标题}
var opts5 = {width : 200,     // 信息窗口宽度height: 100,     // 信息窗口高度title : "郑州市京广南路隧道入口路" , // 信息窗口标题}
var opts6 = {width : 200,     // 信息窗口宽度height: 100,     // 信息窗口高度title : "郑州市启明路机场高速涵洞" , // 信息窗口标题}
var opts7 = {width : 200,     // 信息窗口宽度height: 100,     // 信息窗口高度title : "郑州市北三环意惠街" , // 信息窗口标题}
var infoWindow1 = new BMapGL.InfoWindow("地址:郑州市郑密路南", opts1);  // 创建信息窗口对象marker1.addEventListener("click", function(){map.openInfoWindow(infoWindow1, point1); //开启信息窗口});
var infoWindow2 = new BMapGL.InfoWindow("地址:郑州市航海路淮南街", opts2);  // 创建信息窗口对象marker2.addEventListener("click", function(){map.openInfoWindow(infoWindow2, point2); //开启信息窗口});
var infoWindow3 = new BMapGL.InfoWindow("地址:郑州市京广路淮河路", opts3);  // 创建信息窗口对象marker3.addEventListener("click", function(){map.openInfoWindow(infoWindow3, point3); //开启信息窗口});
var infoWindow4 = new BMapGL.InfoWindow("地址:郑州市陇海路京广路", opts4);  // 创建信息窗口对象marker4.addEventListener("click", function(){map.openInfoWindow(infoWindow4, point4); //开启信息窗口});
var infoWindow5 = new BMapGL.InfoWindow("地址:郑州市京广南路隧道入口路", opts5);  // 创建信息窗口对象marker5.addEventListener("click", function(){map.openInfoWindow(infoWindow5, point5); //开启信息窗口});
var infoWindow6 = new BMapGL.InfoWindow("地址:郑州市启明路机场高速涵洞", opts6);  // 创建信息窗口对象marker6.addEventListener("click", function(){map.openInfoWindow(infoWindow6, point6); //开启信息窗口});
var infoWindow7 = new BMapGL.InfoWindow("地址:郑州市北三环意惠街", opts7);  // 创建信息窗口对象marker7.addEventListener("click", function(){map.openInfoWindow(infoWindow7, point7); //开启信息窗口});var fk1 = {position : point1,    // 指定文本标注所在的地理位置offset   : new BMapGL.Size(30, -30)    //设置文本偏移量}
var fk2 = {position : point2,    // 指定文本标注所在的地理位置offset   : new BMapGL.Size(30, -30)    //设置文本偏移量}
var fk3 = {position : point3,    // 指定文本标注所在的地理位置offset   : new BMapGL.Size(30, -30)    //设置文本偏移量}
var fk4 = {position : point4,    // 指定文本标注所在的地理位置offset   : new BMapGL.Size(30, -30)    //设置文本偏移量}
var fk5 = {position : point5,    // 指定文本标注所在的地理位置offset   : new BMapGL.Size(30, -30)    //设置文本偏移量}
var fk6 = {position : point6,    // 指定文本标注所在的地理位置offset   : new BMapGL.Size(30, -30)    //设置文本偏移量}
var fk7 = {position : point7,    // 指定文本标注所在的地理位置offset   : new BMapGL.Size(30, -30)    //设置文本偏移量}
var label1 = new BMapGL.Label("地址:郑密路南", fk1);
var label2 = new BMapGL.Label("地址:航海路淮南街", fk2);
var label3 = new BMapGL.Label("地址:京广路淮河路", fk3);
var label4 = new BMapGL.Label("地址:陇海路京广路", fk4);
var label5 = new BMapGL.Label("地址:京广南路隧道入口路", fk5);
var label6 = new BMapGL.Label("地址:启明路机场高速涵洞", fk6);
var label7 = new BMapGL.Label("地址:北三环意惠街", fk7);
label1.setStyle({color : 'red',fontSize : '12px',height : '20px',lineHeight : '20px',fontFamily: '微软雅黑'});
label2.setStyle({color : 'red',fontSize : '12px',height : '20px',lineHeight : '20px',fontFamily: '微软雅黑'});
label3.setStyle({color : 'red',fontSize : '12px',height : '20px',lineHeight : '20px',fontFamily: '微软雅黑'});
label4.setStyle({color : 'red',fontSize : '12px',height : '20px',lineHeight : '20px',fontFamily: '微软雅黑'});
label5.setStyle({color : 'red',fontSize : '12px',height : '20px',lineHeight : '20px',fontFamily: '微软雅黑'});
label6.setStyle({color : 'red',fontSize : '12px',height : '20px',lineHeight : '20px',fontFamily: '微软雅黑'});
label7.setStyle({color : 'red',fontSize : '12px',height : '20px',lineHeight : '20px',fontFamily: '微软雅黑'});
map.addOverlay(label1);
map.addOverlay(label2);
map.addOverlay(label3);
map.addOverlay(label4);
map.addOverlay(label5);
map.addOverlay(label6);
map.addOverlay(label7);
</script>

图片如下:

为此简单的项目构建完成。源码分享到github,链接如下:https://github.com/zhichen-roger/Rainfall-and-Location-Forecast.git

胡笨笨硕士期间项目心得之项目三气象知识图谱的构建及区域积水地区预测相关推荐

  1. 10大NLP精选项目-涉及预训练Bert、知识图谱、智能问答、机器翻译、对话等

    自然语言处理技术近几年发展非常快,像BERT.GPT-3.图神经网络.知识图谱等技术被大量应用于项目实践中. 今年大厂的NLP面试中对项目方面的考察深度也随之提升了很多,经常会被面试官揪着细节一步一步 ...

  2. 强烈推荐十大NLP主流经典项目:预训练BERT、知识图谱、智能问答、机器翻译、文本自动生成等...

    自然语言处理技术近几年发展非常快,像BERT.GPT-3.图神经网络.知识图谱等技术被大量应用于项目实践中. 今年大厂的NLP面试中对项目方面的考察深度也随之提升了很多,经常会被面试官揪着细节一步一步 ...

  3. NLP精选10个实现项目推荐-涉及预训练、知识图谱、智能问答、机器翻译、对话等...

    自然语言处理技术近几年发展非常快,像BERT.GPT-3.图神经网络.知识图谱等技术被大量应用于项目实践中. 今年大厂的NLP面试中对项目方面的考察深度也随之提升了很多,经常会被面试官揪着细节一步一步 ...

  4. 项目实战:如何构建知识图谱

    实践了下怎么建一个简单的知识图谱,两个版本,一个从 0 开始(start from scratch),一个在 CN-DBpedia 基础上补充,把 MySQL,PostgreSQL,Neo4j 数据库 ...

  5. 【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part7项目优化与打包

    前序文章: [知识图谱]实践篇--基于知识图谱的<红楼梦>人物关系可视化及问答系统实践:part1项目介绍与环境准备 [知识图谱]实践篇--基于知识图谱的<红楼梦>人物关系可视 ...

  6. 基于Python面向《海贼王》领域数据的知识图谱项目【100010385】

    <海贼王>知识图谱构建-项目报告 1. 项目背景 本次任务试图为<海贼王>中出现的各个实体,包括人物.地点.组织等,构建一个知识图谱,帮助我们更好的理解这部作品. 2. 项目内 ...

  7. 电网知识图谱项目总结(1)python代码实现RDF三元组自动化标注

    电网知识图谱项目总结(1)python代码实现RDF三元组自动化标注 文章目录 电网知识图谱项目总结(1)python代码实现RDF三元组自动化标注 简介 文档内容 RDF规范 标注思路 代码结构 详 ...

  8. 知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等

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

  9. Blog1 TCMKG——中医药知识图谱项目介绍

    一.项目背景 知识图谱以结构化的形式描述客观世界中概念.实体及其之间的关系,将互联网的信息表达成更接近人类认知世界的形式,提供了一种更好地组织.管理和理解互联网海量,的能力.知识图谱给互联网语义搜索带 ...

最新文章

  1. Linux安装git和maven的详细过程
  2. python要在哪里写代码-初识python【今天开始写代码】第一课
  3. Github Windows安装帮助
  4. 【Java数据结构】线性表
  5. uniapp光标自动定义到文本框_如何在Mac上的照片应用中创建自定义日历
  6. 2020对于音视频行业意味着什么?
  7. Newbe.ObjectVisitor 0.2.10 发布,更花里胡哨
  8. 基于C#.NET的--Windows进程管理工具
  9. java联合主键_hibernate联合主键映射(注解版)
  10. Skin++ 使用教程(VC软件外观美化工具)
  11. 如何评估 Serverless 服务能力?这份报告给出了 40 条标准
  12. Qt 设置窗体大小和背景颜色
  13. python pytest setupclass_python – Pytest – 如何将参数传递给setup_class?
  14. 面试官:你是如何调用 wait() 方法的?使用 if 还是 while?别答错了!
  15. KITTI数据集Raw Data与Ground Truth序列00-10的对应关系,以及对应的标定参数
  16. 安全提示:勒索病毒漏洞与CPU漏洞务必小心
  17. java 斗地主出牌算法_Golang算法实战之斗地主一
  18. IE浏览器访问出现Automation 服务器不能创建对象
  19. 苹果Mac电脑缓存如何清理?
  20. 给控件做数字签名——摘录自阿泰博客

热门文章

  1. 卡尔曼滤波 - 状态空间模型中的状态方程
  2. 神经网络 深度神经网络,边缘计算 神经网络
  3. 两数之和(LeetCode)
  4. 【Markdown 1】什么是Markdown?怎么用? - Markdown语法个人简述总结(图文)(常用)
  5. 【Linux编程】一、Linux常见指令和权限理解(思维导图总结)
  6. 【MyBatis】关联查询
  7. Git提交记住用户名和密码
  8. 初学订单-支付流程(思路)
  9. 电影《寒战1》中的管理知识
  10. 如何做默认样式重置?RESETTING 和 NORMALIZING 之间有什么区别?