鸣谢:该项目基于刘焕勇老师、IrvingBei这两位的代码启发下,才有了我这么一个辣鸡项目。期间我的学业导师,给了我很多指导帮助。站在前人的肩膀上,我们可以看得更远
摘要:知识图谱与自然语言的处理技术的结合使用愈发广泛,已经成为各大搜索引擎公司所重视的领域之一。尽管目前科技创新和普及中医药知识工作的稳步推进,但对于中医药领域中复杂的中药信息数据如何可视化分析与检索仍然是一个难以解决的问题。为此本研究立足中药领域,以垂直型中医药网站的本草纲目开源数据为数据来源,搭建了一个包含9类规模为7k的知识实体,7种关系的中药知识图谱。并在该知识图谱的基础上实现了中药知识自动问答和辅助开药方的功能。该系统的实现对于提升中医药知识在大众中的普及、为中医药临床实践、科研及教学提供决策支持上都有着重要意义和参考价值。
什么是知识图谱?
知识图谱是一种描述真实世界客观存在的实体、概念及它们之间关联关系的语义网络。它充分釆用了可视化的技术,不仅能够对知识资源和载体进行描述,同时还可以对知识以及知识之间的联系进行分析和描绘。在大数据存储技术支持下,大规模的知识图谱与数据挖掘、机器学习、信息分析等技术相结合,可以实现利用图形将复杂的知识领域绘制并展现出来。Google 早在 2012 年就发布了“知识图谱”,增强了其搜索结果的智能性,将互联网的信息表达成了更接近人类认知世界的形式,这标志着大规模知识在互联网语义搜索中的成功应用,知识图谱提供了一种更好的组织、管理和理解互联网海量信息的能力,它与大数据和深度学习一起,成为推动人工智能发展的核心驱动力[1]。知识图谱分为通用知识图谱和行业知识图谱,典型的通用知识图谱包括:面向语言的WordNet,大规模开放的知识图谱Yago、DBPedia和Freebase等[2-7];典型的行业知识图谱包括:描述人物亲属关系的Kinships、医疗领域图谱UMLS及中国中医科学院中医药信息所研制的中医药学语言系统(Traditional Chinese Medicine Language System,TCMLS)。
其中,TCMLS是以中医药学科体系为核心,遵循中医药语言学特点,借鉴语义网络的理念,建立的一个中医药学语言集成系统。它共收录约10万个概念、30万个术语及127万条语义关系[8]。近年来,已经有部分学者以TCMLS为骨架,开发了一些中医知识图谱的智能应用。
项目流程
本研究以垂直网站中药网和A+医学网站为主要数据来源,使用爬虫脚本爬取并对网站数据进行结构化处理,再利用Neo4j图数据库构建了中药知识图谱,并利用基于规则匹配算法、关键词匹配以及对问句进行分类等关键步骤实现了中药知识问答和辅助开方。为了提高用户体验与系统可视化程度,本研究又利用web.py框架设计搭建前端问答界面。
总体设计
基于中医药知识图计分为中医药知识图谱的构建和智能问答的搭建
中医药知识图谱的构建
- 数据获取与预处理- 基于Neo4j构建中医药知识图
数据获取与预处理
对于通用知识图谱搭建而言,最主要数据来源于互联网网页上的开源数据。本研究采用自底向上的模式,先从网页中识别出知识实体,再将知识实体归出合适的数据模式。对于通用知识图谱搭建而言,最主要数据来源于互联网网页上的开源数据。本研究采用自底向上的模式,先从网页中识别出知识实体,再将知识实体归纳出合适的数据模式。且这两个网站的数据以结构化数为主,基于这一特点,我们在爬取数据的时候,很容易通过网站结构化的信息抽取出相关实体和属性概念。对网页的结构化数据进行xpath解析,赋予相应的标签,得到的数据以excel表形式存储,然后将这些表格数据导入Neo4j数据库。
import requests
from lxml import html
import pandas
from openpyxl import Workbook
import re
class zhongyao():
def __init__(self):
self.text_all = dict()
self.url="http://www.a-hospital.com/w/%E6%9C%AC%E8%8D%89%E7%BA%B2%E7%9B%AE"
self.headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"}
def get_parse_html(self,url): #将网页源代码转换成xpath对象的函数
res=requests.get(url,headers=self.headers)
res.encoding = "utf-8"
html_text = res.text
parse_html = html.etree.HTML(html_text)#将网页源代码转换成xpath对象
return parse_html
def get_url(self):
res=requests.get(self.url,headers=self.headers)
res.encoding="utf-8"
en = html.etree.HTML(res.text)
text_title=en.xpath('//h3/span[@class="mw-headline"]/text()')
text_url1 = en.xpath('//*[@id="bodyContent"]/p[5]/a/@href')
self.get_nate(text_url1)
text_url2 = en.xpath('//*[@id="bodyContent"]/p[6]/a/@href')
text_url3 = en.xpath('//*[@id="bodyContent"]/p[7]/a/@href')
# self.get_nate(text_url3)
text_url4 = en.xpath('//*[@id="bodyContent"]/p[8]/a/@href')
#self.get_nate(text_url4)
text_url5 = en.xpath('//*[@id="bodyContent"]/p[9]/a/@href')
#self.get_nate(text_url5)
text_url6 = en.xpath('//*[@id="bodyContent"]/p[10]/a/@href')
# self.get_nate(text_url6)
text_url7 = en.xpath('//*[@id="bodyContent"]/p[11]/a/@href')
# self.get_nate(text_url7)
text_url8 = en.xpath('//*[@id="bodyContent"]/p[12]/a/@href')
# self.get_nate(text_url8)
text_url9 = en.xpath

本研究基于垂直型中医药网站的本草纲目开源数据,构建了一个包含9类7k知识实体、7种关系的中药知识图谱,实现中药知识自动问答与辅助开药方功能,对中医药知识普及与临床实践具有重要意义。
最低0.47元/天 解锁文章
480

被折叠的 条评论
为什么被折叠?



