需要将医疗数据导入到 Neo4j 数据库,并成功建立节点、主要以疾病名称(name)为实体所延伸的栏位,例如:疾病的症状描述(Symptom)、好發群体(Age)、發生部位(part)…etc 。
建立而成的医疗知识图谱,将能帮助我们看到:各个疾病之间在好發群体、疾病發生部位、治疗药物等等的关係呈现。
用 pandas 读入,原数据14336条内容,简单看下前五条是:阳痿、乙肝、癫痫、月经不调、颈椎病等。依照任务来看,他们是本次医疗知识图谱的『实体』,也是 build_graph.py
的第一步:create_node
。
編碼格式 GB18030 是跟簡體中文字符相關的編碼方式:
GB18030,全稱《信息技術 中文編碼字符集》,是中華人民共和國國家標準所規定的變長多位元組字元集。其對GB2312-1980完全向下相容,與GBK基本向下相容,並支援Unicode(GB 13000)的所有碼位。GB18030共收錄漢字70,244個。
(Source: 維基百科)
主要有以下特點:
首先需要辨识哪些栏位为实体的『Attribute(属性)』,哪些是作为实体与实体之间的『Relationship(关係)』。
Create disease node: 创建疾病实体,然后这个疾病的属性包含了:age(年龄)、infection(传染性)、insurance(医保)、treatment(治疗方法)、checklist(检查项目)、period(治癒週期)、rate(治癒率)、money(费用)。
Create node
3.Create relationship
这裡用了 set()
针对重複的关係去重之后,由于每一笔资料都是独立的,因此无序是可以接受的,接着针对每一条数据执行 create relationship 写回 Neo4j 数据库。
整体执行完后,关于边的数量统计如下:
查询特定的疾病关係,以月经失调为例:
下图将同属妇科的实体一起展开来看(这裡不只包含了疾病,也包含了前面所创建的各种实体 e.g. 症状、别名、部位、併發症…etc。
# query count of relationship
MATCH (n)-[r]->() RETURN type(r), count(*)
# query specific name
MATCH (n)-[r]->()
WHERE n.name='月经不调'
RETURN n,r
# delete all nodes
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
Q: 询问月经失调怎麽治
Q: 出现 error 的情形,当询问的问题无关键字或是不明确的时候,会自动退出查询程序。e.g. 输入繁体字 or 输入女生常说的『大姨妈』。