当前位置: 首页 > news >正文

中关村能力建设网站十堰网站建设多少钱

中关村能力建设网站,十堰网站建设多少钱,咨询公司名称,二次网站开发平台基于知识图谱的医疗知识问答系统 一、项目概述 本项目基于医疗方面知识的问答#xff0c;通过搭建一个医疗领域知识图谱#xff0c;并以该知识图谱完成自动问答与分析服务。本项目以neo4j作为存储#xff0c;基于传统规则的方式完成了知识问答#xff0c;并最终以关键词执…基于知识图谱的医疗知识问答系统 一、项目概述 本项目基于医疗方面知识的问答通过搭建一个医疗领域知识图谱并以该知识图谱完成自动问答与分析服务。本项目以neo4j作为存储基于传统规则的方式完成了知识问答并最终以关键词执行cypher查询并返回相应结果查询语句作为问答。 问答系统完全基于规则匹配实现通过关键词匹配对问句进行分类医疗问题本身属于封闭域类场景对领域问题进行穷举并分类然后使用cypher的match去匹配查找neo4j根据返回数据组装问句回答最后返回结果。 二、实现知识图谱的医疗知识问答系统基本流程 1、Node4j软件的安装和使用。 2、数据预处理方法。 3、Python处理数据方法。 4、能够实现一个知识图谱问答系统。 三、项目工具所用的版本号 Node4j-4.4.5PythonJDK1.8 四、Node4j实验环境的安装配置 (一)安装JAVA 1.下载java安装包 官网下载链接https://www.oracle.com/java/technologies/javase-downloads.html 本人下载的版本为JDK-1.8,JDK版本的选择一定要恰当版本太高或者太低都可能导致后续的neo4j无法使用。 安装好JDK之后就要开始配置环境变量了。 配置环境变量的步骤如下 右键单击此电脑—点击属性—点击高级系统设置—点击环境变量 在下方的系统变量区域新建环境变量命名为JAVA_HOME变量值设置为刚才JAVA的安装路径我这里是C:\Program Files\Java\jdk1.8.0_211 编辑系统变量区的Path点击新建然后输入 %JAVA_HOME%\bin 打开命令提示符CMDWINR,输入cmd)输入 java -version若提示Java的版本信息则证明环境变量配置成功。 2.安装好JDK之后就可以安装neo4j了 2.1 下载neo4j 官方下载链接https://neo4j.com/download-center/#community 也可以直接下载我上传到云盘链接 Neo4j Desktop Setup 1.4.15.exe https://www.aliyundrive.com/s/huXS4HXMn9V 提取码: 36vf 打开之后会有一个自己设置默认路径可以根据自己电脑情况自行设置然后等待启动就行了 打开之后我们新建一个数据库名字叫做“基于医疗领域的问答系统” 详细信息看下图: 数据库所用的是4.4.5版本其他数据库参数信息如下 项目结构整体目录: ├── pycache \编译结果保存目录 │ ├── answer_search.cpython-39.pyc │ ├── question_classifier.cpython-39.pyc │ └── question_parser.cpython-39.pyc ├── answer_search.py ├── build_medicalgraph.py \知识图谱数据入库脚本 ├── chatbot_graph.py \问答程序脚本 ├── data │ └── medical.json \本项目的数据通过build_medicalgraph.py导neo4j │ └── medical2.json\本项目的部分数据通过build_medicalgraph.py导neo4j ├── dict │ ├── check.txt \诊断检查项目实体库 │ ├── deny.txt \否定词词库 │ ├── department.txt \医疗科目实体库 │ ├── disease.txt \疾病实体库 │ ├── drug.txt \药品实体库 │ ├── food.txt \食物实体库 │ ├── producer.txt \在售药品库 │ └── symptom.txt \疾病症状实体库 ├── prepare_data │ ├──__pycache__ │ ├── build_data.py \数据库操作脚本 │ ├── data_spider.py \网络资讯采集脚本 │ └── max_cut.py \基于词典的最大向前/向后脚本 │ ├── 处理后的medical数据.xlsx │ ├── MongoDB数据转为json格式数据文件.py │ ├──从MongoDB导出的medical.csv │ ├──data.json #从MongoDB导出的json格式数据 ├── question_classifier.py \问句类型分类脚本 ├── answer_search.py \基于问题答复脚本 ├── build_medicalgraph.py \构建医疗图谱脚本 ├── chatbot_graph.py \小艺问答系统机器人脚本 ├── question_parser.py \基于问句解析脚本 ├── 删除所有关系.py ├── 删除关系链.py ├── 两节点新加关系.py ├── 交互 匹配所有节点.py ├── 更新节点.py 这里chatbot_graph.py脚本首先从需要运行的chatbot_graph.py文件开始分析。 该脚本构造了一个问答类ChatBotGraph定义了QuestionClassifier类型的成员变量classifier、QuestionPase类型的成员变量parser和AnswerSearcher类型的成员变量searcher。 question_classifier.py脚本构造了一个问题分类的类QuestionClassifier定义了特征词路径、特征词、领域actree、词典、问句疑问词等成员变量。 question_parser.py问句分类后需要对问句进行解析。 该脚本创建一个QuestionPaser类该类包含三个成员函数。 answer_search.py问句解析之后需要对解析后的结果进行查询。 该脚本创建了一个AnswerSearcher类。与build_medicalgraph.py类似该类定义了Graph类的成员变量g和返回答案列举的最大个数num_list。 该类的成员函数有两个一个查询主函数一个回复模块。 问答系统框架的构建是通过chatbot_graph.py、answer_search.py、question_classifier.py、question_parser.py等脚本实现。 五、系统实现具体步骤 1数据来源爬取数据来源。 安装MongoDB数据库 MongoDB官方下载地址 https://www.mongodb.com/try 安装完成 进行MongoDB环境配置 在变量Path里加入E:\MongoDB\bin 打开终端cmd输入mongod --dbpath E:\MongoDB\data\db 在浏览器输入 127.0.0.1:27017查看MongoDB服务是否启动成功 安装好MongoDB之后开始爬取数据 数据来源于寻医问药网http://jib.xywy.com/ 具体的疾病详情页面如下 首先对网址上的疾病链接进行分析以感冒为例 感冒的链接http://jib.xywy.com/il_sii_38.htm 可以看到上面包含了疾病的简介、病因、预防、症状、检查、治疗、并发症、饮食保健等详情页的内容。下面我们要使用爬虫把信息收集起来。 通过观察可以看出链接部分 http://jib.xywy.com/il_sii_ 都是相同的是通过数字的叠加来组成不同的病例。通过string类型的拼接进行循环后可以得到我们需要的内容。 数据收集模块放在/prepare_data文件夹下面。 要收集 url 下面对应的数据具体爬虫代码如下 需要爬取的信息包括疾病名、所属目录、症状、治疗方案等等都可以从页面上获取。 在MongoDB中查看爬取到的疾病链接和解析出的网页内容 2原始数据的处理。 定义一个max_cut.py文件来进行词语的切分其中包含了最大向前匹配最大向后匹配双向最大向前匹配。 然后通过collect_medical函数完成数据的收集整理工作。 再将整理好的数据重新存入数据库中。 在init文件里配置数据库连接找到当前文件所在的目录指定连接的数据库及其下面的collection。 再利用python脚本导出爬出的医疗数据并设置格式为data.json格式文件 处理数据后对应的图谱系统数据关键词 将从MongoDB导出的data.json数据格式处理之后保存为medical.json和medical2.json文件其中medical2.json为medical.json中的部分数据。 考虑到构建全部知识图谱需要很久所以取出一部分数据medical2.json先进行构建图谱。 处理后结构化的数据保存到excel文件: 3所搭建的系统框架包括知识图谱实体类型实体关系类型知识图谱属性类型等。 知识图谱实体类型: departments [] #科室diseases [] # 疾病drugs [] # 药品foods [] # 食物producers [] #药品大类symptoms []#症状实体关系类型: # 构建节点实体关系共11类medical2做出来的只有10类因为数据量少rels_department []rels_noteat [] # 疾病忌吃食物关系rels_doeat [] # 疾病宜吃食物关系rels_recommandeat [] # 疾病推荐吃食物关系rels_commonddrug [] # 疾病通用药品关系rels_recommanddrug [] # 疾病热门药品关系rels_check [] # 疾病检查关系rels_drug_producer [] # 厂商药物关系rels_symptom [] #疾病症状关系rels_acompany [] # 疾病并发关系rels_category [] # 疾病与科室之间的关系知识图谱属性类型 4导入Neo4j数据库生成图谱。 新建一个数据库基于医疗领域的问答系统 开启Node4j数据库: 连接我们所建的neo4j数据库 知识图谱数据入库 根据字典形式的数据创建结点以疾病为中心定义关系形成三元组表示的知识将结点和关系导入neo4j数据库形成知识图谱通过运行build_medicalgraph.py脚本构建图谱 建立实体关系类型 该脚本构建了一个MedicalGraph类定义了Graph类的成员变量g和json数据路径成员变量data_path。 建立的图谱实体关系和属性类型数量有点多需要等待一会。 脚本运行完之后查看neo4j数据库中构建的知识图谱 match (n) return n提示Not all return nodes are being displayed due to Initial Node Display setting. Only 3000 of 44112 nodes are being displayed 由于“初始节点显示”设置并非所有返回节点都显示。44112个节点中仅显示3000个 这里因为我设置的参数只显示前3000个4万多个节点只显示了一部分。 对于单个节点分析是先建一个label为disease、name为疾病名称的nodeproperty方面包括prevent、cure_way、cause等等另外对于症状、科室、检查方法等信息都建立单独的node同时通过has_symptom、belongs_to、need_check等关联把它们和疾病名称关联起来因为疾病之间存在并发关系疾病之间也可以通过症状串联起来所以最后我们利用大量的 医疗数据就能构建一个大型的医疗知识图谱 提示Started streaming 44112 records in less than 1 ms and completed in less than 1 ms. 在不到1毫秒内开始流式传输44112条记录并在不到1秒内完成。 5Python 与Neo4j的交互实现。 连接Node4j数据库 from py2neo import Graph class AnswerSearcher:def __init__(self):#调用数据库进行查询# self.g Graph(bolt://localhost:7687, usernameneo4j, password123456)#老版本neo4jself.g Graph(bolt://localhost:7687, auth(neo4j, 123456))#输入自己修改的用户名密码self.num_limit 20#最多显示字符数量创建图对象 class MedicalGraph:def __init__(self):cur_dir /.join(os.path.abspath(__file__).split(/)[:-1])self.data_path os.path.join(cur_dir, data/medical.json)# self.g Graph(http://localhost:7474, usernameneo4j, password123456)self.g Graph(bolt://localhost:7687, auth(neo4j, 123456)) 增加node节点: def create_node(self, label, nodes):count 0for node_name in nodes:node Node(label, namenode_name)self.g.create(node)count 1print(count, len(nodes))return创建实体关系 def create_graphrels(self):Drugs, Foods, Checks, Departments, Producers, Symptoms, Diseases, disease_infos, rels_check, rels_recommandeat, rels_noteat, rels_doeat, rels_department, rels_commonddrug, rels_drug_producer, rels_recommanddrug,rels_symptom, rels_acompany, rels_category self.read_nodes()self.create_relationship(Disease, Food, rels_recommandeat, recommand_eat, 推荐食谱)#调用下面的关系边创建函数self.create_relationship(Disease, Food, rels_noteat, no_eat, 忌吃)self.create_relationship(Disease, Food, rels_doeat, do_eat, 宜吃)self.create_relationship(Department, Department, rels_department, belongs_to, 属于)self.create_relationship(Disease, Drug, rels_commonddrug, common_drug, 常用药品)self.create_relationship(Producer, Drug, rels_drug_producer, drugs_of, 生产药品)self.create_relationship(Disease, Drug, rels_recommanddrug, recommand_drug, 好评药品)self.create_relationship(Disease, Check, rels_check, need_check, 诊断检查)self.create_relationship(Disease, Symptom, rels_symptom, has_symptom, 症状)self.create_relationship(Disease, Disease, rels_acompany, acompany_with, 并发症)self.create_relationship(Disease, Department, rels_category, belongs_to, 所属科室)更新节点 更新先要找出Nodes再使用事务的push更新 from py2neo import Graph, Node, Relationship, NodeMatcher, Subgraphg Graph(http://localhost:7687, auth(neo4j, 123456))from py2neo import Graph, NodeMatchertx g.begin()# 找到要找的Nodes matcher NodeMatcher(g)init_node matcher.match(Person, name节点名称) new_node init_node.first() new_node[name] 新的节点名称 sub Subgraph(nodes[new_node]) tx.push(sub) g.commit(tx)from py2neo import Graph, Node, Relationship, NodeMatcher, Subgraphg Graph(http://localhost:7687, auth(neo4j, 123456))from py2neo import Graph, NodeMatchertx g.begin() # 找到要找的Nodes matcher NodeMatcher(g)init_node matcher.match(Person, name节点名称) new_node init_node.first() new_node[name] 新的节点名称 sub Subgraph(nodes[new_node]) tx.push(sub) g.commit(tx)删除关系链(节点也会删除) from py2neo import Graph, Node, Relationship, NodeMatcher, Subgraph, RelationshipMatcherg Graph(http://localhost:7687, auth(neo4j, 123456))matcher NodeMatcher(g) r_matcher RelationshipMatcher(g) fugui matcher.match(Person, namename1).first() youqian matcher.match(Person, namename2).first()relation r_matcher.match(nodes[fugui, youqian]).first() #也可以是none,表示任意节点 print(relation) g.delete(relation)两个节点新加关系 from py2neo import Graph, Node, Relationship, NodeMatcher, Subgraphg Graph(http://localhost:7687, auth(neo4j, 123456))matcher NodeMatcher(g)fugui matcher.match(Person, name节点名称1).first() youqian matcher.match(Person, name节点名称2).first()relation Relationship(节点名称1, 所要建立的关系, 节点名称2)g.create(relation)6问答系统的实现与测试包括问答系统·支持的问答类型实现方法与步骤。 本项目问答对话系统的分析思路整体上接近一个基于规则的对话系统首先我们需要对用户输入进行分类其实就是分析用户输入涉及到的实体及问题类型也就是Neo4j中的node、property、relationship然后我们利用分析出的信息转化成Neo4j的查询语句最后再把查询的结果返回给用户就完成了一次问答。 本项目问答系统支持的问答类型 问答系统整体上涉及到三个模块问题的分类、问题的解析以及回答的搜索。 对于property和relationship我们先预设定一系列的问句疑问词从而对问句的每个词进行对比分析判断出问句的类型 然后根据问句的类型和之前识别出来的实体基于规则推断出property和relationship 把问题转化为Neo4j的Cypher语句其实也是预先写好Cypher语句的模板根据实际的情况把之前分析得到的node、property、relationship填入Cypher语句中进行查询。 得到了Cypher语句我们就能连接Neo4j数据库进行查询得到结果之后还需要对语句进行一点微调根据对应的qustion_type调用相应的回复模板 问答框架包含问句分类、问句解析、查询结果三个步骤具体一步步分析。 首先是问句分类是通过question_classifier.py脚本实现的。 再通过question_parser.py脚本进行问句分类后对问句进行解析。 然后通过answer_search.py脚本对解析后的结果进行查询 最后通过chatbot_graph.py脚本进行问答实测。 执行chatbot_graph.py脚本后出现 “请输入您所要咨询的问题小艺会帮您解决:”我们输入一个简单的问题感冒应该怎么治疗 问答系统返回的结果如下 再试试其它的问题比如什么是苯中毒等等 问答系统返回结果如下 经过测试本问答系统能回答的问题有很多基于问句中存在的关键词回答效果表现很好。做出来的基于知识图谱的医疗知识问答系统能够根据用户提出的问题很好的进行解答。 做出来的问答系统还是很Nice的。本项目问答系统的主要特征是知识图谱系统依赖一个或多个领域的实体并基于图谱进行推理或演绎深度回答用户的问题更擅长回答知识性问题与基于模板的聊天机器人有所不同的是它更直接、直观的给用户答案。本项目问答系统没有复杂的算法一般采用模板匹配的方式寻找匹配度最高的答案可以直接给出答案。 各位有兴趣的小伙伴可以私信我要详细的项目文档和项目完整系统源码欢迎各位小伙伴的来访
http://www.hkea.cn/news/14515530/

相关文章:

  • 如何迁移wordpress网站如何自己免费做网站
  • 房地产网站建设东营网站优化
  • 上海网站建设广告怎么做
  • 做网站补贴企业电话号码查询网
  • 做服装商城网站论文网站ico制作
  • 怎么用frontpage做网站网页游戏平台哪个好
  • 南昌网站维护制作网站建设必备语言
  • 不知情的情况下帮别人做网站他违法在线建网址
  • 余姚建设公司网站公司名称注册查询网
  • 衡阳营养师报考网站南宁app下载
  • 电商网站特点信息服务平台
  • 天津网站建设好公司wordpress cropping 图片 出错
  • 网站UI怎么做太原新站优化
  • 网站制作步骤流程图学3d建模学费一般多少
  • 网站做加QQ群链接二维码创意设计
  • 做网站要服务器吗大朗做网站公司
  • 加强网站的建设淘宝联盟的网站怎么自己做
  • 上海手机站网站建设天津开发区建设工程管理中心网站
  • 鹿泉城乡建设局网站网站运营托管方案
  • 1号店网站模板下载深圳网络开发
  • 品牌网站建设968经典软文案例分析
  • 抖音网站建设的基本情况制作微信小程序公司
  • 苏州做网站最好公司哪家好做微商海报的网站
  • 云南省网站备案要求wordpress侧边栏折叠
  • 旅行网站建设下载期货行情软件
  • 做网站用什么软件知乎温州专业手机网站制作多少钱
  • php 网站响应时间深圳跑网约车怎么样
  • 电脑怎么下载网页视频seo站长之家
  • 石狮网站建设公司西宁网站制作
  • 南阳企业网站推广wordpress放在二级目录下