基于农业病虫害知识图谱的智能问答系统开发流程

基于农业病虫害知识图谱的智能问答系统


后端技术:java、springboot、Neo4j图数据库、python爬虫、数据处理技术、朴素贝叶斯分类算法、HANLP分词工具。

前端技术:微信小程序界面设计、合法域名配置、阿里云服务器、域名、ssl证书。

注意:修改和扩充的前提是要读懂后端代码。

注意:修改和扩充的前提是要读懂后端代码。

注意:修改和扩充的前提是要读懂后端代码。

界面演示:

一、知识图谱的建立与后续扩充

1.爬虫编写,获取知识图谱的数据,整理成csv

​ [数据源](农业病虫害信息云数据库 (sinoverse.cn))

​ 技术:python爬虫、selenium、数据处理

​ 通过父网页爬取子网页url,遍历子网页url,进行爬取。

​ 通过数据处理和re正则,提取关键信息,整理成csv文件,这里的作物名,疾病名、各种属性、关系都是自定义的,想扩充知识图谱的话,需要自己添加属性、实体、关系等信息,信息越多知识图谱越丰富。

爬父网页源代码(源代码中包含各种疾病的网页路径信息)

from selenium import webdriver
import time

f = open("plant.txt",encoding='utf-8')

# 调用文件的 readline()方法
lines = f.readlines()  # 每次读取一行内容
print(lines)
text = [line.strip("\n") for line in lines]
print(text)

for i in text:
    i = str(i)
    print(i)
    chromepath = 'D:\chrome\chromedriver.exe'
    browser = webdriver.Chrome(executable_path=chromepath)
    browser.get('http://cloud.sinoverse.cn/index_bch-list.html?k=' + i + '&ism=1')
    time.sleep(3)
    pageSource = browser.page_source
    print(pageSource)
    with open(r'D:\PycharmProjects\souhu\result/' + i + '.txt', 'a+', encoding='utf-8') as h:
        h.write(pageSource)
    browser.close()

提取子网页id

# coding=utf-8
import os
import csv
import pandas as pd
filenames=os.listdir(r'D:\PycharmProjects\souhu\result')
print(filenames)
# filenames = ['小麦.txt']
for name in filenames:
    f = open('D:\PycharmProjects\souhu/result/'+ name , encoding='utf-8')
    # 调用文件的 readline()方法
    res = []
    lines = f.readlines()  # 每次读取一行内容
    print(lines)
    for i in lines:
        print(i)
        p = i.find('href="index_bch-show.html?id=')
        if p > 0:
            count = i.count('href="index_bch-show.html?id=')
            print(count)
            # a = 0
            for x in range(count):
                p = i.find('href="index_bch-show.html?id=')
                res.append(i[p + 29:p + 61])
                # res = text1[p + 29:p + 61]
                # res.
                i = i[p + 29:]
    print(res)
    print(len(res))
    # 任意的多组列表
    a = res
    # 字典中的key值即为csv中列名
    dataframe = pd.DataFrame({'a_name': a})

    # 将DataFrame存储为csv,index表示是否显示行名,default=True
    dataframe.to_csv('D:\PycharmProjects\souhu\id/' + name[:-4] + '.csv', index=False, sep=',')

爬取各种疾病详细信息

import json
import os
import csv
import pandas as pd
import requests
import csv
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'}
url = 'http://app.sinoverse.cn:9090/api/cloud.jsp?t=bch_show'
filenames=os.listdir(r'D:\PycharmProjects\souhu\id')
print(filenames)

for name in filenames:
    list = []
    with open(r"D:\PycharmProjects\souhu\id/"+name, "r") as f:
        reader = csv.reader(f)
        for row in reader:
            list.append(row)
        print(list)
        for i in list[1:-1]:
            # print(type(i))
            d = {'id': i}
            r = requests.post(url, data=d, headers=headers)
            c = r.json()
            print(c['list'])
            data = str(c['list'])
            string = data
            string = string.replace('\': \'', ':')
            string = string.replace('\', \'', '\n')
            print(string)
            i = str(i)
            with open(r'D:\PycharmProjects\souhu\disdata/' + name[:-4] + i + '.txt', 'a+', encoding='utf-8') as h:
                h.write(string)

结果图:

提取主要信息

import json
import os
import csv
import pandas as pd
import requests
import csv
filenames=os.listdir(r'D:\PycharmProjects\souhu\disdata')
print(filenames)
pid = []
yname = []
disname = []
style =[]
factors = []
way = []
type =[]
ename = []
for name in filenames:
    f = open('D:\PycharmProjects\souhu\disdata/'+name, encoding='utf-8')
    lines= f.readlines()  # 每次读取一行内容
    # print(lines)
    print(lines[3][4:])
    pid.append(name[:-40])
    # yname.append(lines[-6][6:])
    disname.append(lines[11][5:])
    style.append(lines[8][6:])
    factors.append(lines[-3][8:])
    way.append(lines[3][4:])
    type.append(lines[9][6:])
    ename.append(lines[-2][6:])

dataframe = pd.DataFrame({'pid':pid,'disname':disname,'style':style,'factors':factors,'way': way,'type':type,'ename':ename})
dataframe.to_csv('D:\PycharmProjects\souhu/final.csv', index=False, sep=',',encoding='gbk')


结果图:

2.将数据导入Neo4j图数据库

技术:Neo4j图数据库、cypher查询语言

会安装Neo4j图数据库,会简单使用(百度一下,10min学会)

上节整理好的数据

导入代码:

LOAD CSV WITH HEADERS  FROM "file:///genre.csv" AS line
MERGE (p:Genre{gid:toInteger(line.gid),name:line.gname})

LOAD CSV WITH HEADERS FROM 'file:///plant.csv' AS line
MERGE (p:Plant { pid:toInteger(line.pid),pname:line.pname,
alias:line.alias,place:line.place,text:line.text})


LOAD CSV WITH HEADERS  FROM "file:///disease.csv" AS line  
MERGE (p:Disease{did:toInteger(line.did),disname:line.disname,style:line.style,
factors:line.factors,way:line.way,ename:line.ename})


LOAD CSV WITH HEADERS FROM "file:///plant_to_disease.csv" AS line 
match (from:Plant{pid:toInteger(line.pid)}),(to:Disease{did:toInteger(line.did)})  
merge (from)-[r:mayget{pid:toInteger(line.pid),did:toInteger(line.did)}]->(to)

LOAD CSV WITH HEADERS FROM "file:///disease_to_genre.csv" AS line
match (from:Disease{did:toInteger(line.did)}),(to:Genre{gid:toInteger(line.gid)})  
merge (from)-[r:is{did:toInteger(line.did),gid:toInteger(line.gid)}]->(to)

通过网页查看:

可视化

知识图谱构建完毕,想要扩充内容,可以将csv文件内容扩充,按以上步骤重新导入即可。

二、环境配置

1.Spark、hadoop环境安装

​ 后期会涉及到spark的朴素贝叶斯分类器,而该分类器可以通过训练问题集合进行问题模板概率匹配,因此,系统中是否搭建了spark环境对项目是否能run起来至关重要。

下载地址: 下载地址

​ 环境搭建流程简单,参考这篇文章[Spark/Hadoop安装]((75条消息) Spark在Windows下的环境搭建_xuweimdm的博客-CSDN博客_spark在windows下的环境搭建)

2.Hanlp分词器安装

​ 由于项目是基于模板匹配的,后面会有中文分词和词性替换过程,会使用到Hanlp分词工具。

​ 需要下载Hanlp的字典包和springboot配置文件,项目中已经包含。

​ 如下图:hanlp配置

custom文件中会有各种实体词典用于词性替换,当需要扩充知识图谱时,需要把新实体加入custom的词典中。

三.朴素贝叶斯和问题模板

1.朴素贝叶斯分类算法

百度一下,需要理解原理。

2.问题模板

理解了朴素贝叶斯再来看问题模板

共十个问题模板,每个模板里有各种问题的不同问法,也就是朴素贝叶斯训练集,question_classification里面是各种类别,看懂朴素贝叶斯,这里就明白了,想要扩充问题集的话,就在每个模板里加入不同的问法,想扩充模板就添加新问题模板,例如“【11】XXXXX.txt”,在vocabulary中加入新添加的问题特征。

四、具体运行步骤

1.配置maven

2.配置项目文件

3.启动springboot

五、前端交互

1.接口配置

小程序基本不用动,只需要将接口地址放进去即可。

2.合法域名

3.安全证书

去阿里云服务器申请,免费证书,定期更换pfx文件。

百度一下过程,10min。

posted @   zhaojiabo  阅读(1147)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示