一、项目背景
项目要求,对医生书写的门诊病历及住院病程记录进行挖掘,找出符合条件的出现一定症状的患者,统计每日人数,所给的规则是这样的:
同时还含有补充条件:
常见的门诊病历是下面这样的:
主诉:患者XXX,男,69岁,因“反复气促、发热、咳嗽咳痰12天,加重1天”于2023-05-31 17 :40收入本区,伴有紫癜。
首记
患者基本信息:患者男,69岁。现病史:患者家属代诉患者于12前无明显诱因出现气促、发热,具体热型不详,伴有咳嗽咳痰,无恶心,无呕吐,
偶有胸闷,无胸痛,无腹痛腹泻,自服退热药物,未见明显好转,6天前患者症状加重,在家属陪同下至“XXXXXXXXXX医院”就诊,
行胸部CT检查示:
1.左肺上叶下舌段肿块影,不除外肿瘤病变,建议完善增强扫描及穿刺活检明确性质;纵膈内数枚增大或肿大淋巴结;
2.肺气肿伴肺大泡;双肺散在纤维化、间质性炎症,双侧胸膜增厚,建议治疗后复查;
心包少量积液,主动脉弓及左冠状动脉钙化斑;
左胸壁少许积气。
予高流量氧疗,予抗感染、化痰、维持内环境平衡等对症治疗后,症状好转后出院,现患者气促、咳嗽加重,今日遂来我院就诊
发育正常,营养中等,自主体位,步态不稳,表情痛苦,神志清楚,对答切题,查体合作。
全身浅表淋巴结未扪及肿大。无畸形。眉毛无脱落,眼睑无水肿、下垂、倒睫,
睑结膜无苍白、充血,球结膜无充血、水肿,巩膜无黄染,角膜透明,眼球运动灵活,无凸出、凹陷、震颤、运动障碍,
双侧瞳孔等大等圆,直径约3-4mm,对光反射灵敏,辐辏反射正常。耳廓正常,无畸形,无结节,无肿胀,外耳道未见异常分泌物 ,
粗测听力无下降,乳突区无压痛。鼻部个形无异常,无鼻翼扇动,鼻腔无异常分泌物,鼻中隔无偏曲,鼻窦区无压痛。
口唇发绀,口腔黏膜未见出血点及溃疡,伸舌
居外院胸部CT检查示:1.左肺上叶下舌段肿块影,不除外肿瘤病变,建议完善增强扫描及穿刺活检明确性质;纵膈内数枚增大或肿大淋巴结;
2.肺气肿伴肺大泡;双肺散在纤维化、间质性炎症,双侧胸膜增厚,建议治疗后复查;心包少量积液,主动脉弓及左冠状动脉钙化斑;左胸壁少许积气。
鉴别诊断:无
诊疗计划:1、重症监护、告病重。
2、完善相关辅助检查:三大常规、肝肾功能、生化检查、胸片、心电图等。
3、具体治疗用药方案:予抗感染、雾化稀释痰液促进痰液排出、维持酸碱电解质平衡及营养支持等治疗。
4.根据病情变化及时调整方案。
5.请示上级医师指导下一步诊疗方案。记录日期:2023-05-31 21:30
发热门诊
二、面对的问题
1、首先可以较为明显的看到,这段文本描述中出现了很多否定性质的表述,比如“无”、“未见”等
2、有些否定表述是会夸标点的,比如“球结膜无充血、水肿”,
3、文章有比较明显的段落区分,有比较清晰的层次结构,
4、从文章中可以拿到就诊时间和患者症状的出现时间,如咳嗽咳痰12天
这种情况下,我们仅仅使用字符串匹配、或者正则表达式的话,一个是表达能力有限,另外一个是处理逻辑会跟代码耦合,不方便随时调整
三、脚本示例
前两章有对Ruta脚本有做简单介绍,
这里我把我这边处理这个问题的脚本放过来:
PACKAGE com.ll.syndrome;
//规则运行的主入口
TYPESYSTEM SyndromeTypeSystem;
DECLARE Annotation CaesuraSign;
//将需要用到的此表引入进来
WORDLIST KeyWord_Negative = '/wordList/KeyWord_Negative_Expression.txt';
WORDLIST KeyWord_Fever = '/wordList/KeyWord_Fever.txt';
WORDLIST KeyWord_Respiratory = '/wordList/KeyWord_Respiratory.txt';
WORDLIST KeyWord_Bleeding = '/wordList/KeyWord_Bleeding.txt';
WORDLIST KeyWord_Rash = '/wordList/KeyWord_Rash.txt';
WORDLIST KeyWord_Diarrhea = '/wordList/KeyWord_Diarrhea.txt';
WORDLIST KeyWord_Meningitis_1 = '/wordList/KeyWord_Meningitis_1