本项目为本人的本科毕业设计,基于知识图谱的中文医疗问答系统,通过爬虫工具从公开的医疗网站获取医疗知识并利用Neo4j图数据库构建知识图谱。问句意图利用Fasttext文本分类算法识别,并简单编写了一个槽位记忆功能辅助记住上下文信息,最后利用Django框架搭建了一个简单的前端对话界面。
- JDK 15以上
- Neo4j 4.2.1
- Python3.6以上
- Django 2.1.7
- jieba 0.42.1
- fasttext 0.9.2
- py2neo 2020.1.1
- requests 2.25.1
- lxml 4.3.0
- retrying 1.3.3
- vthread 0.1.1
- cchardet 2.1.7
- pyTelegramBotAPI 3.7.4 (用于连接TelegramBot)
点击医疗知识图谱数据下载数据,提取码:a04c
下载后执行下面的命令进行数据还原
# 如果没有把neo4j的命令加进环境变量,请到neo4j的安装目录下的bin文件中执行
# 假设neo4j.dum的路径是:G:/dump/neo4j.dump
# neo4j数据库的名称是graph
neo4j-admin load --from=G:/dump/neo4j.dump --database=graph.db --force
打开项目中的contextual/KGQuery.py文件,修改连接的用户名和密码
# 在命令行中启动Neo4j
neo4j.bat console
# 定位到MASystem目录下,执行manage.py
python manage.py runserver
TelegramBot需要到官网申请创建机器人,并将生成的Token复制到telegramBot.py的Token变量即可运行。
主要代码存放在MASystem文件夹中
- Crawler 爬虫代码以及爬取到的医疗信息
- dict 实体字典列表
- entities 爬取的所有数据,整理成json格式
- build_dict.py 从爬取后的数据中提取实体字典
- buIld_graph.py 依靠爬取的数据连接neo4j构建知识图谱
- request_disease.py 爬取疾病分类数据
- request_others.py 爬取其他分类数据
- classifier 意图分类器相关代码
- dict 部分意图语料和实体字典
- intent 意图语料
- models 存储训练好的模型
- fasttext_data.txt Fasttext库能够识别的语料
- intent.txt 所有意图的举例解释文件
- stopwords.txt 停用词语料
- train_intents_fasttext.py 训练Fasttext分类器的代码
- vocabs.txt 训练Fasttext过程中留下的字典,不重要
- word2vec-test.py 采用word2vec的尝试,不重要
- contextual 处理上下文信息的代码
- IntentDetector.py 调用模型识别意图代码
- IntentProcessor.py 记忆上下文实体,处理对应意图的回复
- KGQuery.py 提供从图数据库查询的各类方法
- telegramBot.py 支持机器人在telegram上运行的相关代码
- static中存放网页相关的静态文件
- 其他文件均为 Django框架生成或依赖的文件