├── 0.png ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── 9.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── 15.png ├── 16.png ├── 免费论文.docx ├── 代码下载百度云连接.txt ├── 1.txt ├── ReduceByKeySortRddDemo.scala ├── JedisUtil.java ├── crawler.py ├── README.md └── 介绍.txt /0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/0.png -------------------------------------------------------------------------------- /1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/1.png -------------------------------------------------------------------------------- /2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/2.png -------------------------------------------------------------------------------- /3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/3.png -------------------------------------------------------------------------------- /4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/4.png -------------------------------------------------------------------------------- /5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/5.png -------------------------------------------------------------------------------- /6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/6.png -------------------------------------------------------------------------------- /7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/7.png -------------------------------------------------------------------------------- /8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/8.png -------------------------------------------------------------------------------- /9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/9.png -------------------------------------------------------------------------------- /10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/10.png -------------------------------------------------------------------------------- /11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/11.png -------------------------------------------------------------------------------- /12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/12.png -------------------------------------------------------------------------------- /13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/13.png -------------------------------------------------------------------------------- /14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/14.png -------------------------------------------------------------------------------- /15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/15.png -------------------------------------------------------------------------------- /16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/16.png -------------------------------------------------------------------------------- /免费论文.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/免费论文.docx -------------------------------------------------------------------------------- /代码下载百度云连接.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bysj2022NB/python2025_medical_wenda_ai_rec/HEAD/代码下载百度云连接.txt -------------------------------------------------------------------------------- /1.txt: -------------------------------------------------------------------------------- 1 | 计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计 2 | 3 | +VX:bysj2023nb 或 QQ:2827724252 备注医疗问答 4 | 5 | https://www.bilibili.com/video/BV199qaY2EAV/?spm_id_from=333.999.0.0 -------------------------------------------------------------------------------- /ReduceByKeySortRddDemo.scala: -------------------------------------------------------------------------------- 1 | package com.bigdata.spark.reducebykey_sort 2 | 3 | import org.apache.spark.{SparkConf, SparkContext} 4 | 5 | /** 6 | * @program: spark-api-demo 7 | * @description: 类作用描述 8 | * @author: 小毕 9 | * @company: 清华大学深圳研究生院 10 | * @create: 2019-09-02 18:00 11 | */ 12 | object ReduceByKeySortRddDemo { 13 | 14 | def main(args: Array[String]): Unit = { 15 | val conf=new SparkConf() 16 | .setAppName("MapFilterApp") 17 | .setMaster("local") 18 | val sc=new SparkContext(conf) 19 | val rdd1=sc.parallelize(List(("tom", 1), ("jerry", 3), ("kitty", 2), ("shuke", 1))) 20 | val rdd2=sc.parallelize(List(("jerry", 2), ("tom", 3), ("shuke", 2), ("kitty", 5))) 21 | val rdd3=rdd1.union(rdd2) 22 | //按key进行聚合 23 | val rdd4=rdd3.reduceByKey(_+_) 24 | rdd4.collect.foreach(println(_)) 25 | //按value的降序排序 26 | val rdd5=rdd4.map(t=>(t._2,t._1)).sortByKey(false).map(t=>(t._2,t._1)) 27 | rdd5.collect.foreach(println) 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /JedisUtil.java: -------------------------------------------------------------------------------- 1 | package com.bigdata.storm.kafka.util; 2 | 3 | import redis.clients.jedis.Jedis; 4 | import redis.clients.jedis.JedisPool; 5 | import redis.clients.jedis.JedisPoolConfig; 6 | 7 | /** 8 | * @program: storm-kafka-api-demo 9 | * @description: redis工具类 10 | * @author: 小毕 11 | * @company: 清华大学深圳研究生院 12 | * @create: 2019-08-22 17:23 13 | */ 14 | public class JedisUtil { 15 | 16 | /*redis连接池*/ 17 | private static JedisPool pool; 18 | 19 | /** 20 | *@Description: 返回redis连接池 21 | *@Param: 22 | *@return: 23 | *@Author: 小毕 24 | *@date: 2019/8/22 0022 25 | */ 26 | public static JedisPool getPool(){ 27 | if(pool==null){ 28 | //创建jedis连接池配置 29 | JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); 30 | //最大连接数 31 | jedisPoolConfig.setMaxTotal(20); 32 | //最大空闲连接 33 | jedisPoolConfig.setMaxIdle(5); 34 | pool=new JedisPool(jedisPoolConfig,"node03.hadoop.com",6379,3000); 35 | } 36 | return pool; 37 | } 38 | 39 | public static Jedis getConnection(){ 40 | return getPool().getResource(); 41 | } 42 | 43 | /* public static void main(String[] args) { 44 | //System.out.println(getPool()); 45 | //System.out.println(getConnection().set("hello","world")); 46 | }*/ 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | } -------------------------------------------------------------------------------- /crawler.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | from bs4 import BeautifulSoup 3 | import requests 4 | import sys 5 | import random 6 | import pymysql 7 | links = [] 8 | datas = [] 9 | hea = { 10 | 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36' 11 | } 12 | urls =[ 13 | "https://www.chinanews.com/china.shtml", #国内 14 | "https://www.chinanews.com/society.shtml", #社会 15 | "https://www.chinanews.com/compatriot.shtml",#港澳 16 | "https://www.chinanews.com/wenhua.shtml",#文化 17 | "https://www.chinanews.com/world.shtml",#国际 18 | "https://www.chinanews.com/cj/gd.shtml",#财经 19 | "https://www.chinanews.com/sports.shtml",#体育 20 | "https://www.chinanews.com/huaren.shtml" #华人 21 | ] 22 | # 打开数据库连接 23 | db = pymysql.connect(host='127.0.0.1', user='root', password='123456', port=3396, db='news_recommendation_system') 24 | # 使用cursor()方法获取操作游标 25 | cursor = db.cursor() 26 | 27 | def main(): 28 | #reload(sys) 29 | #sys.setdefaultencoding("utf-8") 30 | #baseurl = 'https://www.chinanews.com/taiwan.shtml' # 要爬取的网页链接 31 | baseurl = 'https://www.chinanews.com/taiwan.shtml' # 要爬取的网页链接 32 | # deleteDate() 33 | # 1.爬取主网页获取各个链接 34 | getLink(baseurl) 35 | # 2.根据链接爬取内部信息并且保存数据到数据库 36 | getInformationAndSave() 37 | # 3.关闭数据库 38 | db.close() 39 | 40 | def getInformationAndSave(): 41 | for link in links: 42 | data = [] 43 | url = "https://www.chinanews.com" + link[1] 44 | cur_html = requests.get(url, headers=hea) 45 | cur_html.encoding = "utf8" 46 | soup = BeautifulSoup(cur_html.text, 'html.parser') 47 | # 获取时间 48 | title = soup.find('h1') 49 | title = title.text.strip() 50 | # 获取时间和来源 51 | tr = soup.find('div', class_='left-t').text.split() 52 | time = tr[0] + tr[1] 53 | recourse = tr[2] 54 | # 获取内容 55 | cont = soup.find('div', class_="left_zw") 56 | content = cont.text.strip() 57 | print(link[0] + "---" + title + "---" + time + "---" + recourse + "---" + url) 58 | saveDate(title,content,time,recourse,url) 59 | 60 | def deleteDate(): 61 | sql = "DELETE FROM news " 62 | try: 63 | # 执行SQL语句 64 | cursor.execute(sql) 65 | # 提交修改 66 | db.commit() 67 | except: 68 | # 发生错误时回滚 69 | db.rollback() 70 | 71 | def saveDate(title,content,time,recourse,url): 72 | try: 73 | cursor.execute("INSERT INTO news(news_title, news_content, type_id, news_creatTime, news_recourse,news_link) VALUES ('%s', '%s', '%s', '%s', '%s' ,'%s')" % \ 74 | (title, content, random.randint(1,8), time, recourse,url)) 75 | db.commit() 76 | print("执行成功") 77 | except: 78 | db.rollback() 79 | print("执行失败") 80 | 81 | def getLink(baseurl): 82 | html = requests.get(baseurl, headers=hea) 83 | html.encoding = 'utf8' 84 | soup = BeautifulSoup(html.text, 'html.parser') 85 | for item in soup.select('div.content_list > ul > li'): 86 | # 对不符合的数据进行清洗 87 | if (item.a == None): 88 | continue 89 | data = [] 90 | type = item.div.text[1:3] # 类型 91 | link = item.div.next_sibling.next_sibling.a['href'] 92 | data.append(type) 93 | data.append(link) 94 | links.append(data) 95 | 96 | if __name__ == '__main__': 97 | main() 98 | 99 | 100 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计 2 | 3 | ## 要求 4 | ### 源码有偿!一套(论文 PPT 源码+sql脚本+教程) 5 | 6 | ### 7 | ### 加好友前帮忙start一下,并备注github有偿纯python医疗问答系统 8 | ### 我的QQ号是2827724252或者798059319或者 1679232425或者微信:bysj2023nb 9 | 10 | # 11 | 12 | ### 加qq好友说明(被部分 网友整得心力交瘁): 13 | 1.加好友务必按照格式备注 14 | 2.避免浪费各自的时间! 15 | 3.当“客服”不容易,repo 主是体面人,不爆粗,性格好,文明人。 16 | ## 演示视频 17 | https://www.bilibili.com/video/BV199qaY2EAV/?spm_id_from=333.999.0.0 18 | ## 运行截图 19 | ![](0.png) 20 | ![](1.png) 21 | ![](2.png) 22 | ![](3.png) 23 | ![](4.png) 24 | ![](5.png) 25 | ![](6.png) 26 | ![](7.png) 27 | ![](8.png) 28 | ![](9.png) 29 | ![](10.png) 30 | ![](11.png) 31 | ![](12.png) 32 | ![](13.png) 33 | ![](14.png) 34 | ![](15.png) 35 | ![](16.png) 36 | ## 设计总说明 37 | 本设计项目旨在开发基于Neo4j的医疗知识图谱可视化系统。近年来,随着医疗数据量的迅速增长,知识图谱作为一种将不同实体和关系关联并可视化的工具,为医学领域的研究和应用提供了新的机会。本项目的任务来源于希望通过知识图谱整合医疗领域的多源数据提供一种直观、交互的方式来探索医疗信息的关联性。为了确保设计质量和系统稳性,本项目遵循以下设计标准:具备扩展能力,能够添加新的实体和关系,支持未来需求的变化;提供直观、易用的可视化界面,帮助用户快速理解知识图谱的结构;具有良好的交互体验,用户可以轻松浏览、搜索和探索知识图谱;保持高效的性能,即使面对大量数据和复杂查询,也应保持响应迅速;系统应确保数据的安全与隐私,防止未经授权的访问和数据泄露。在设计过程中,本项目采用以下原则:系统的设计应分为独立模块,以便于维护和扩展;设计需具备一定的灵活性,能够适应不同的应用场景;界面设计应注重用户体验,确保易用性和可操作性;系统应具备稳健性,确保运行稳定。同时本项目的创新点为将医疗小助手与可视化界面联合起来,而不是使两个系统孤立开来。医疗小助手回答中会将系统中储存的疾病关键词标红,用户可以提供点击任意标红疾病关键词跳转至可视化界面,并直接生成对应的知识图谱。 38 | 39 | 本项目使用了多种技术和工具,以下是主要的技术资料:Neo4j官方文档,提供了图数据库的使用方法和最佳实践,为知识图谱的构建提供指导;Py2neo库,这是一个与Neo4j交互的Python库,帮助实现节点和关系的创建及查询;Flask框架,一个轻量级的Web框架,用于构建后端服务和API;D3.js库,用于知识图谱的可视化,提供了丰富的交互功能。设计过程主要包括以下步骤:确定系统需要构建哪些实体和关系,明确系统的功能需求;构建系统的总体架构,确定数据库设计和模块划分;定义知识图谱中的实体、关系和属性,并使用Neo4j实现;使用Flask构建后端服务,使用Py2neo与Neo4j交互,前端使用D3.js进行可视化;对系统进行测试,修复错误,确保系统稳定运行;将系统部署到目标环境,制定维护计划。 40 | 41 | 本项目成功构建了一个完整的医疗知识图谱可视化系统,主要结果如下:在该知识图谱系统中,构建了涵盖疾病、症状、药物、科室等实体,以及实体之间的各种关系;系统提供了基于D3.js的可视化界面,用户可以浏览和探索知识图谱;系统支持多种搜索和查询功能,用户可以搜索实体和关系,进行相关分析;系统在测试中表现良好,能够处理较大规模的数据,保持稳定运行。 42 | 43 | 本项目通过构建医疗知识图谱可视化系统,为医疗信息管理和研究提供了一种有效工具。尽管在设计过程中遇到了一些挑战,但最终实现了预期目标,为后续研究和应用打下了基础。 44 | ## 技术路线 45 | 数据收集与整合: 首先,需要收集来自多个来源的数据,包括文本数据、结构化数 46 | 47 | 据和半结构化数据。这些数据来自于公开数据集、网络抓取、API接口等渠道。然后,利 48 | 49 | 用数据整合技术将这些数据进行处理和整合,构建知识图谱的数层。 50 | 51 | 本体建模与规范化: 接下来,设计和建立知识图谱的模式层。可以借助本体描述语言(如OWL)来进行本体建模,并严格规范模式层的结构和约束。 52 | 53 | 知识图谱构建与存储: 利用已经整合和规范化的数据,在构建知识图谱的数据层时,我们选择采用图数据库或三元组存储技术来高效地存储和管理知识图谱的数据。这些技术能够准确捕捉和表示图谱中的节点(代表各种实体或概念)以及它们之间的边(代表关联关系),从而确保知识图谱的完整性和准确性,并保证数据的一致性、完整性和可扩展性。 54 | 55 | 可视化算法与界面设计: 开发可视化算法和用户界面,支持用户对知识图谱中实体、属性和关系的交互式探索。这涉及到图形布局算法、图形渲染技术等,以及用户界面设计原则和实践。 56 | 57 | 交互式探索与信息检索: 实现交互式探索功能,使用户可以通过图形界面对知识图 58 | 59 | 谱进行浏览、搜索和查询。开发多层次的信息筛选和检索功能,支持实体搜索、属性分析、关系探索等。系统集成与部署: 将各个模块整合起来,构建完整的基于知识图谱的可视 60 | 61 | 化系统。进行系统测试和调试,确保系统稳定性和性能。最后,部署系统到相应的平台上,并提供用户友好的配置管理。 62 | ## 系统工作流程分析 63 | 系统的工作流程可以分为数据整合、知识图谱构建、可视化展示、交互式探索和部署运维几个关键步骤。以下是系统的总体工作流程: 64 | 65 | 数据整合:从多源数据中提取信息。本系统将从medical.json数据集中对数据进行清洗、格式转换,最后分类成相应的txt文件。 66 | 67 | 知识图谱构建:运用提取的数据所分类的txt文件,构建知识图谱,包含实体、属性和关系。这一步通常涉及图数据库或其他结构的运用。 68 | 69 | 可视化展现:采用了前沿的可视化算法技术,旨在为用户提供一个直观且易于理解的展示形式。为实现这一目标,设计了用户界面,并融入了丰富的交互功能,确保用户能够迅速、准确地理解和操作这一知识图谱,从而更有效地挖掘和利用其中的信息与资源。这种设计不仅提升了用户体验,也极大地提高了知识图谱的实用价值。 70 | 71 | 交互式探索:用用户能够借助精心设计的界面与知识图谱进行深度互动。这一过程中,用户不仅能进行实体的精确搜索,还能深入探索实体间的关系网络,并进行详尽的属性分析。这种多层次的交互方式,为用户提供了更为全面和细致的知识图谱体验。 72 | 73 | 智能问答:用户通过可视化界面与智能医疗助手提问互动,得到所需答案。 74 | 75 | ## 系统总体架构 76 | 数据集成层:负责数据收集和整合。该层提供数据源接口和数据处理逻辑,其中知识图谱的基本单元是由不同来源的数据转换而来。 77 | 78 | 知识图谱构建层:支持实体、属性和关系的多维度关联,将处理后的数据构建为知识图谱。 79 | 80 | 可视化层:负责将知识图谱数据可视化,提供交互式界面。该层需要设计良好的用户界面,以便用户操作。 81 | 82 | 信息检索和分析层:提供搜索和分析工具,支持多层次信息筛选和检索。该层可以支持复杂的查询和关系探索。 83 | 84 | 部署和运维层:负责系统的部署、配置和维护,确保系统的稳定性和安全性。 85 | 86 | ## 系统模块划分 87 | 数据源接口模块:连接和提取来自多源数据的内容,可能涉及文本分析、数据转换等功能。 88 | 89 | 知识图谱构建模块:根据数据源接口模块提供的数据,构建知识图谱。这可能涉及图数据库的设计与操作。 90 | 91 | 可视化与交互模块:负责知识图谱的可视化和用户界面的设计,提供交互功能。 92 | 93 | 信息检索与分析模块:提供信息筛选、检索和分析的功能。该模块与可视化与交互模块协同工作,支持用户的不同需求。 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /介绍.txt: -------------------------------------------------------------------------------- 1 | 设计总说明 2 | 本设计项目旨在开发基于Neo4j的医疗知识图谱可视化系统。近年来,随着医疗数据量的迅速增长,知识图谱作为一种将不同实体和关系关联并可视化的工具,为医学领域的研究和应用提供了新的机会。本项目的任务来源于希望通过知识图谱整合医疗领域的多源数据提供一种直观、交互的方式来探索医疗信息的关联性。为了确保设计质量和系统稳性,本项目遵循以下设计标准:具备扩展能力,能够添加新的实体和关系,支持未来需求的变化;提供直观、易用的可视化界面,帮助用户快速理解知识图谱的结构;具有良好的交互体验,用户可以轻松浏览、搜索和探索知识图谱;保持高效的性能,即使面对大量数据和复杂查询,也应保持响应迅速;系统应确保数据的安全与隐私,防止未经授权的访问和数据泄露。在设计过程中,本项目采用以下原则:系统的设计应分为独立模块,以便于维护和扩展;设计需具备一定的灵活性,能够适应不同的应用场景;界面设计应注重用户体验,确保易用性和可操作性;系统应具备稳健性,确保运行稳定。同时本项目的创新点为将医疗小助手与可视化界面联合起来,而不是使两个系统孤立开来。医疗小助手回答中会将系统中储存的疾病关键词标红,用户可以提供点击任意标红疾病关键词跳转至可视化界面,并直接生成对应的知识图谱。 3 | 4 | 本项目使用了多种技术和工具,以下是主要的技术资料:Neo4j官方文档,提供了图数据库的使用方法和最佳实践,为知识图谱的构建提供指导;Py2neo库,这是一个与Neo4j交互的Python库,帮助实现节点和关系的创建及查询;Flask框架,一个轻量级的Web框架,用于构建后端服务和API;D3.js库,用于知识图谱的可视化,提供了丰富的交互功能。设计过程主要包括以下步骤:确定系统需要构建哪些实体和关系,明确系统的功能需求;构建系统的总体架构,确定数据库设计和模块划分;定义知识图谱中的实体、关系和属性,并使用Neo4j实现;使用Flask构建后端服务,使用Py2neo与Neo4j交互,前端使用D3.js进行可视化;对系统进行测试,修复错误,确保系统稳定运行;将系统部署到目标环境,制定维护计划。 5 | 6 | 本项目成功构建了一个完整的医疗知识图谱可视化系统,主要结果如下:在该知识图谱系统中,构建了涵盖疾病、症状、药物、科室等实体,以及实体之间的各种关系;系统提供了基于D3.js的可视化界面,用户可以浏览和探索知识图谱;系统支持多种搜索和查询功能,用户可以搜索实体和关系,进行相关分析;系统在测试中表现良好,能够处理较大规模的数据,保持稳定运行。 7 | 8 | 本项目通过构建医疗知识图谱可视化系统,为医疗信息管理和研究提供了一种有效工具。尽管在设计过程中遇到了一些挑战,但最终实现了预期目标,为后续研究和应用打下了基础。 9 | 10 | 11 | 1. 知识图谱是什么? 12 | 13 | 1.1 知识图谱的概念 14 | 知识图谱,作为一种技术工具,通过图模型这一形式,深入刻画并构建起了世间万千实体与抽象概念间错综复杂的联系网络。这一图谱的构建基础在于节点与边的精妙结合,其中,节点象征着各式各样的实体,无论是具体的个体如人物、书籍,还是抽象的概念如人工智能、知识图谱等,而边则巧妙地连接着这些实体或概念,揭示出它们之间的内在联系与相互影响。通过这样的方式,知识图谱提供了一种全新的视角。而边则用于表示这些实体或概念之间的属性或关系,比如一个人的姓名、一本书的书名,以及更为复杂的实体间关系,如朋友关系、配偶关系等。这种结构化的表示方法能够清晰、直观地展示世界万物的相互关联,为信息检索、数据分析等任务提供有力的支持。知识图谱的早期理念来自Semantic Web(语义网络),其最初理想是把基于文本链接的万维网落转化为基于实体链接的语义网络。它的核心思想是将大量的信息结构化地组织起来,以便计算机可以理解、推理和利用这些信息,从而实现智能化的数据分析、推荐和决策。 15 | 16 | 1.2 知识图谱的本体要素介绍 17 | 在知识图谱的构建中,实体作为其核心组成部分,代表了现实世界中的具体对象或抽象概念。这些实体既可以是具体的个体,如人物、地点、组织、书籍、电影等,也可以是抽象的概念或联系,如情感状态、哲学思想、学术理论等。对于知识图谱的完整性而言,准确识别和细致分类这些实体是至关重要的第一步。 18 | 19 | 此外,关系在知识图谱中扮演着至关重要的角色,它们作为连接不同实体的桥梁,揭示了实体之间的相互作用和紧密联系。这些关系不仅描述了实体间的语义关联,如家庭关系、友情纽带、包含关系等,还进一步丰富了知识图谱的内涵。因此,关系的精准识别和分类对于深入理解实体间的互动模式具有不可或缺的意义。 20 | 21 | 在知识图谱中,属性作为描述实体或关系特征的元数据,提供了关于这些元素更为详尽的信息。无论是实体还是关系,都可以拥有各自的属性。例如,一个人物实体可能具有姓名、年龄、性别等属性,而一个组织实体则可能包含成立时间、总部地点等属性。这些属性不仅丰富了知识图谱的语义层次,还使其更加贴近现实世界的复杂性。 22 | 23 | 最后,在知识图谱中,概念是对一类相同事物的不同个体的总称。它们类似于面向对象编程中的类(Class)概念,为实体提供了分类和归纳的依据。例如,“水果”就是一个概念,而“苹果”、“香蕉”等则是这一概念下的具体实例。概念在知识图谱中起到了构建层次化知识结构的关键作用,使得知识图谱更加系统化和易于理解。 24 | 25 | 1.3 知识图谱的分层架构 26 | 知识图谱的构建涉及两个关键层次:数据层与模式层。其中,模式层扮演着至关重要的角色,它不仅构成了知识图谱的概念框架和逻辑基石,更定义了图谱中的核心要素,包括概念、关系、属性以及规则。这一层次的设立为数据层提供了明确的规范与约束,确保了知识图谱的严谨性和一致性。这一结构确保了知识图谱的一致性和准确性,为后续的数据分析、信息检索等任务提供了坚实的基础。在知识图谱的构建中,本体(Ontology)通常作为模式层的核心组成部分,它负责界定图谱中的基本概念、关联、特性以及准则。本体不仅为数据层提供了标准化的框架,还确保了图谱的一致性和规范性,对于知识图谱的整体结构具有至关重要的作用。通过本体定义的规则和公理,可以确保知识图谱中的数据在结构和语义上保持一致性和准确性。这种结构化的表示方法有助于提升知识图谱的质量,并为后续的数据分析、信息检索等任务提供坚实的基础。知识图谱亦可被视为本体的一种具体实现或实例化。若其不具备推理能力,则它主要聚焦于数据层的表现,而并未涵盖定义核心概念、关系和规则的模式层。这样的结构虽然侧重于数据的存储与展示,但在逻辑完整性和功能丰富性上可能有所欠缺。在知识图谱的模式层中,节点表示本体概念,边表示概念之间的关系。 27 | 28 | 在数据层中,事实信息通过“实体-关系-另一实体”或“实体-特定属性-对应属性值”的三元组结构进行存储,构建成一个网络状的知识库。其中,实体作为知识图谱的基础构建单元,涵盖了具体的人名、组织机构名、地理位置、日期以及时间等。关系则代表着两个实体之间所存在的语义联系,是模式层定义关系的具体实现。而属性则是对实体特性的描述,通过实体与属性值之间的映射关系,为实体提供了更为详尽的说明。属性可以被视为实体与属性值之间的hasValue 关系,因此也可以转化为以“实体-关系-实体”的三元组形式存储。在知识图谱的数据层中,节点表示实体,边表示实体之间的关系或实体的属性。 29 | 30 | 1.4 知识图谱构建流程及应用 31 | 本文提出了一种基于自下而上和自上而下两种方法来建立知识图谱。本文介绍了一种基于开放领域的知识图谱,即通过自下向上的方式自动抽取概念和概念间的联系。目前,大多数领域知识图谱都是从上到下建立本体的。一方面,领域知识图谱所涉及的概念和范围相对于开放领域知识图谱而言是固定的的;而领域知识图谱,则要求它的精确度要高一些。自顶向下是先把本体和数据模型定义为知识图谱,然后在知识库中加入实体。 32 | 33 | 2. 技术平台关键点介绍 34 | 整体框架平台集成开发环境为: 35 | 36 | Pycharm+neo4j-community-5.16.0+JDK1.6+Python3.10+Microsoft Edge 124.0.2478.67 (64 位)。 37 | 38 | 技术平台为:py2neo+json+flask+D3.js+ahocorasick。 39 | 40 | 2.1 技术路线 41 | 数据收集与整合: 首先,需要收集来自多个来源的数据,包括文本数据、结构化数 42 | 43 | 据和半结构化数据。这些数据来自于公开数据集、网络抓取、API接口等渠道。然后,利 44 | 45 | 用数据整合技术将这些数据进行处理和整合,构建知识图谱的数层。 46 | 47 | 本体建模与规范化: 接下来,设计和建立知识图谱的模式层。可以借助本体描述语言(如OWL)来进行本体建模,并严格规范模式层的结构和约束。 48 | 49 | 知识图谱构建与存储: 利用已经整合和规范化的数据,在构建知识图谱的数据层时,我们选择采用图数据库或三元组存储技术来高效地存储和管理知识图谱的数据。这些技术能够准确捕捉和表示图谱中的节点(代表各种实体或概念)以及它们之间的边(代表关联关系),从而确保知识图谱的完整性和准确性,并保证数据的一致性、完整性和可扩展性。 50 | 51 | 可视化算法与界面设计: 开发可视化算法和用户界面,支持用户对知识图谱中实体、属性和关系的交互式探索。这涉及到图形布局算法、图形渲染技术等,以及用户界面设计原则和实践。 52 | 53 | 交互式探索与信息检索: 实现交互式探索功能,使用户可以通过图形界面对知识图 54 | 55 | 谱进行浏览、搜索和查询。开发多层次的信息筛选和检索功能,支持实体搜索、属性分析、关系探索等。系统集成与部署: 将各个模块整合起来,构建完整的基于知识图谱的可视 56 | 57 | 化系统。进行系统测试和调试,确保系统稳定性和性能。最后,部署系统到相应的平台上,并提供用户友好的配置管理。 58 | 59 | 3. 需求分析 60 | 3.1 一般性需求分析 61 | 集中疾病智能问答,知识图谱可视化,数据库后端管理为一体,为用户提供全面的疾病与医疗数据。 62 | 63 | 64 | 3.3 可行性分析 65 | 基于对当前系统的初步调查,可以设定新系统的目标,这些目标即为新系统建成后预期达到的运行标准,它们将成为系统开发和评估的基准。新系统应保留现有系统的优势,同时改进其不足之处。此外,新系统的目标应与当前系统的基本功能紧密相连,并可根据实际情况分阶段逐步实现。需要强调的是,新系统的目标在总体规划阶段可能无法详尽设定,而是在后续的开发过程中逐步清晰化和量化。 66 | 67 | 对基于知识图谱的可视化系统的设计与实现课题进行可行性分析,在正式着手实现前是十分重要的。而在新系统的目标确定后,就可以通过对以下三方面来对能否实现新系统目标进行可行性分析: 68 | 69 | 1.技术可行性:当前,图数据库、可视化算法、前端开发技术等方面的技术已经相对成熟,并且有许多现成的工具和库可供使用,如Neo4j、D3.js等。因此,在技术上实现这样一个系统是可行的。 70 | 71 | 2.数据可行性:获取和整合多源数据可能是一个挑战,但是随着互联网和开放数据源的不断增加,可以获得大量的结构化和半结构化数据,用于构建知识图谱。此外,许多数据集和API都提供了开放的访问接口,便于数据的获取和整合。 72 | 73 | 3.用户需求可行性:在知识管理、智能问答系统等领域,对于可视化系统的需求日益增长。构建一个基于知识图谱的可视化系统,能够为用户提供直观、全面的知识视图,满足用户对于知识探索和理解的需求。 74 | 75 | 4.2 项目设计 76 | 本项目主要用于疾病学术类研究或非学术类简单的疾病问题咨询。该项目主要通过知识图谱可视化功能和智能问答功能,来达到多层次的信息筛选和检索功能,以满足不同用户需求,从学术研究者到普通用户。提高知识图谱的可用性,使知识更容易被利用,从而推动知识管理和智能应用领域的发展。 77 | 78 | 4.3 设计目标 79 | 具体实现目标如下: 80 | 81 | 1.数据整合和知识图谱构建:从多源数据中构建知识图谱数据库,包括文本、结构化数据和半结构化数据。这将涵盖实体、属性和关系的多维信息。 82 | 83 | 2.可视化算法和界面开发:设计和实现可视化算法,以呈现知识图谱中的实体、属性和关系,同时开发用户友好的界面,支持交互式探索。 84 | 85 | 3.多层次信息筛选和检索功能:实现信息筛选和检索功能,以满足不同用户需求,包括实体搜索、属性分析、关系探索等。 86 | 87 | 4.部署和使用工具:集成用户友好的工具,使知识图谱可视化系统易于部署和使用,包括配置管理、权限控制等功能。 88 | 89 | 4.4 数据库设计 90 | 本系统依托Neo4j数据库来存储和管理数据。数据的保存和安全性是数据库的核心职责,因此,底层引擎以维护数据的完整性和有效性为首要任务至关重要。这要求关系数据库管理系统(RDBMS)必须实施严格的检查机制,以防止任何无效数据未经审查即进入数据库,从而在数据库层面确保数据完整性的强制执行。本系统所使用的数据集medical.json为网上开源疾病数据集而其中的数据爬取于寻医问药网站资讯,保证了数据的可靠度。数据库系统名为neo4j,数据库中将数据集转化为知识图谱各个类型表如下: 91 | 92 | 5. 详细设计 93 | 5.1 系统总体分析 94 | 5.1.1 系统工作流程分析 95 | 系统的工作流程可以分为数据整合、知识图谱构建、可视化展示、交互式探索和部署运维几个关键步骤。以下是系统的总体工作流程: 96 | 97 | 数据整合:从多源数据中提取信息。本系统将从medical.json数据集中对数据进行清洗、格式转换,最后分类成相应的txt文件。 98 | 99 | 知识图谱构建:运用提取的数据所分类的txt文件,构建知识图谱,包含实体、属性和关系。这一步通常涉及图数据库或其他结构的运用。 100 | 101 | 可视化展现:采用了前沿的可视化算法技术,旨在为用户提供一个直观且易于理解的展示形式。为实现这一目标,设计了用户界面,并融入了丰富的交互功能,确保用户能够迅速、准确地理解和操作这一知识图谱,从而更有效地挖掘和利用其中的信息与资源。这种设计不仅提升了用户体验,也极大地提高了知识图谱的实用价值。 102 | 103 | 交互式探索:用用户能够借助精心设计的界面与知识图谱进行深度互动。这一过程中,用户不仅能进行实体的精确搜索,还能深入探索实体间的关系网络,并进行详尽的属性分析。这种多层次的交互方式,为用户提供了更为全面和细致的知识图谱体验。 104 | 105 | 智能问答:用户通过可视化界面与智能医疗助手提问互动,得到所需答案。 106 | 107 | 5.1.2 系统总体架构 108 | 数据集成层:负责数据收集和整合。该层提供数据源接口和数据处理逻辑,其中知识图谱的基本单元是由不同来源的数据转换而来。 109 | 110 | 知识图谱构建层:支持实体、属性和关系的多维度关联,将处理后的数据构建为知识图谱。 111 | 112 | 可视化层:负责将知识图谱数据可视化,提供交互式界面。该层需要设计良好的用户界面,以便用户操作。 113 | 114 | 信息检索和分析层:提供搜索和分析工具,支持多层次信息筛选和检索。该层可以支持复杂的查询和关系探索。 115 | 116 | 部署和运维层:负责系统的部署、配置和维护,确保系统的稳定性和安全性。 117 | 118 | 5.2 系统模块划分 119 | 数据源接口模块:连接和提取来自多源数据的内容,可能涉及文本分析、数据转换等功能。 120 | 121 | 知识图谱构建模块:根据数据源接口模块提供的数据,构建知识图谱。这可能涉及图数据库的设计与操作。 122 | 123 | 可视化与交互模块:负责知识图谱的可视化和用户界面的设计,提供交互功能。 124 | 125 | 信息检索与分析模块:提供信息筛选、检索和分析的功能。该模块与可视化与交互模块协同工作,支持用户的不同需求。 126 | 127 | 5.3 数据库设计 128 | 5.3.1数据库概念设计 129 | 在深入探讨了系统的需求并进行详尽的设计之后,现将对本系统中将采用的数据库实体以及它们之间的关联关系进行详细的阐述和介绍。以下是关于这些数据库实体及其关系概念的规划: 130 | 131 | 1.实体(节点)知识图谱中的实体就是图数据库中的节点,以下是主要的实体类型: 132 | 133 | Disease(疾病):其中有疾病名称、描述、预防、原因、治愈概率等。 134 | 135 | Symptom(症状):代表与疾病相关的症状表现。 136 | 137 | Drug(药物):包含药物的名称及其制造厂商等详细信息。 138 | 139 | Food(食物):涉及与疾病管理相关的食物建议,包括适宜摄入、应避免的食物以及推荐的饮食选择。 140 | 141 | Department(科室):指的是医疗体系内的各个专业部门,如内科负责内部疾病、外科处理外部创伤、妇科关注女性健康等。 142 | 143 | Manufacturer(制造商):指的是药品的制造或生产单位,负责药物的研发和生产流程。 144 | 145 | Check(检查):与疾病相关的医疗检查,如血检、X光等。 146 | 147 | 在知识图谱的构建中,实体间的联系被定义为关系。基于这些实体节点之间的关联性,可以将其归纳为以下几种主要类型的关系: 148 | 149 | has_symptom(症状):疾病与症状之间的关系。 150 | 151 | recommand_eating(推荐食谱):这一关系描述了疾病与应避免食用的食物之间的联系。 152 | 153 | no_eating(忌吃):疾病与忌吃食物之间的关系。 154 | 155 | do_eat(宜吃):这指代疾病与推荐食用的食物之间的关联。 156 | 157 | belongs_to(属于):此关系涵盖了科室与其上级部门之间的关系,以及疾病与所属科室的联系。 158 | 159 | common_drug(常用药品):这一术语描绘了疾病与常规使用的药品之间的关联性。 160 | 161 | drug_of(生产药品):药品与生产商之间的关系。 162 | 163 | recommand_drug(好评药品):疾病与好评药品之间的关系。 164 | 165 | need_check(诊断检查):疾病与相关检查之间的关系。 166 | 167 | accompany_with(并发症):疾病与并发症之间的关系。 168 | 169 | 5.3.2 数据库逻辑设计 170 | E-R图是实体和关系的概念模型,它可以被看作是一个多关系图,其中包含了多种类型的节点和边,以抽象的方式展现各种信息之间的关联。结合推荐系统,我们可以利用知识图谱来有效地过滤和推荐相关信息,为用户提供更加精准和个性化的服务。因此它比数学中的图论和数据库原理中的E-R图更具应用价值,但为了方便理解,这里还是用E-R图来描述逻辑关系。 171 | 172 | 173 | 在这个E-R图中: 174 | 175 | Disease是核心实体,代表各种疾病。而其他的实体都是从Disease实体出发,根据不同关系所联系的,这将会作为之后系统实现的关键逻辑依据。 176 | 177 | 与Disease相关的实体有:Food、Drug、Symptom、Check、Department和Producer。 178 | 179 | 实体之间的关系类型,包括recommand_eat、no_eat、do_eat、common_drug、has_symptom等。 180 | 181 | 图中的箭头表示关系的方向,实体之间通过关系链接。 182 | 183 | 此E-R图示例展示了节点之间的关联,并提供了对知识图谱结构的概念性理解。 184 | 185 | 6. 系统实现 186 | 6.1系统结构实现 187 | 基于知识图谱的可视化系统的实现涉及多个模块和技术组件结构: 188 | 189 | 数据获取与整合模块: 这个模块负责从medical.json数据集中分类出多个txt数据源并将这些txt文件数据整合到知识图谱数据库中。 190 | 191 | 知识图谱构建模块: 这个模块承载着知识图谱核心架构的创建职责,具体包括构建其数据层和模式层两大组件。在数据层面,它囊括了实体、各类关联关系以及属性信息的存储功能,为此,可以灵活运用图数据库技术(比如Neo4j这样的工具)来高效管理图形化的数据结构。而在模式层方面,它则专注于定义和规范本体的结构,确保知识图谱的逻辑性和一致性,可以使用本体描述语言(如OWL)来定义知识图谱的概念模型和关联关系。 192 | 193 | 可视化算法与界面模块: 这个模块负责设计和实现知识图谱的可视化算法和界面。可视化算法用于呈现知识图谱中的实体、属性和关系,可以使用D3.js等可视化库来实现图形化展示。界面设计包括用户友好的交互式探索界面,使用户能够自由地浏览和查询知识图谱,并能使用基于知识图谱的智能问答系统。 194 | 195 | 信息筛选与检索模块: 这个模块负责实现信息的筛选和检索功能,以满足用户不同的需求。 196 | 197 | 部署与管理模块: 这个模块负责系统的部署和管理,包括配置管理、权限控制、性能优化等。 198 | 199 | 6.2系统公用代码设计 200 | 6.2.1 知识图谱入库脚本 201 | 利用Python中的py2neo库函数,将医疗相关数据按照实体与关系的对应导入Neo4j图数据库,以构建一个医疗知识图谱。下面主要介绍入库脚本内容,及部分代码展示。 202 | 203 | 1. 构建知识图谱 204 | 205 | 整个脚本的核心目标是构建知识图谱,包括创建节点和关系。主要步骤如下: 206 | 207 | 读取数据:从medical.json文件读取医疗数据。 208 | 209 | 创建节点:将数据转化为知识图谱中的节点。 210 | 211 | 创建关系:根据数据中的信息,创建节点之间的关系。 212 | 213 | 导出数据:还可以将某些数据导出到文本文件,通过Neo4j图像数据库自带的导出功能。 214 | 215 | 2. 数据源 216 | 217 | 数据来自medical.json,存储在脚本所在目录的data文件夹中。每一行都是一个JSON格式的数据,包含有关医疗信息的各类字段,如疾病名称、症状、药品等。 218 | 219 | 3. Neo4j连接和初始化 220 | 221 | 通过py2neo库连接Neo4j图数据库。 222 | 223 | MedicalGraph类初始化时,建立连接并配置访问权限。这里可以看到Neo4j的连接方式,以及用户名和密码等信息。 224 | 225 | 226 | 227 | 228 | 229 | --------------------------------------------------------------------------------