Selaa lähdekoodia

恩泽:一般手术记录优化

wangsy 4 vuotta sitten
vanhempi
commit
bdb0b16698

+ 22 - 17
structure-center/src/main/java/com/lantone/structure/ai/OperationAI.java

@@ -36,7 +36,7 @@ public class OperationAI extends ModelAI {
     /**
      *
      */
-    public static List<String> medicalTextType = Arrays.asList("CourseAfterOperation_cx", "CourseRecordSRR","Taizhou_before_surgery");
+    public static List<String> medicalTextType = Arrays.asList("CourseAfterOperation_cx", "CourseRecordSRR", "Taizhou_before_surgery");
     public static String entityRelationObject = "entity_relation_object";
     public static String outputs = "outputs";
     public static String content = "content";
@@ -54,35 +54,35 @@ public class OperationAI extends ModelAI {
                 //部位
 
                 StringBuffer sb = new StringBuffer();
-                if(StringUtil.isNotEmpty(structureMap.get("拟实施手术及操作名称"))){
-                    String opName = "拟实施手术及操作名称:"+structureMap.get("拟实施手术及操作名称");
-                    putContent(crfContent, medicalTextType.get(2),opName,Content.surgicalSite);
+                if (StringUtil.isNotEmpty(structureMap.get("拟实施手术及操作名称"))) {
+                    String opName = "拟实施手术及操作名称:" + structureMap.get("拟实施手术及操作名称");
+                    putContent(crfContent, medicalTextType.get(2), opName, Content.surgicalSite);
                 }
                 //手术禁忌 = 手术指征 || 术前准备
                 //手术禁忌 = 诊断依据 || 术前准备 || "药物、食物过敏史
                 String opFlag = structureMap.get("手术指征");
-                if(StringUtil.isNotEmpty(opFlag)){
-                    sb.append("手术指征:"+opFlag+"\n");
+                if (StringUtil.isNotEmpty(opFlag)) {
+                    sb.append("手术指征:" + opFlag + "\n");
                 }
 
                 String preCase = structureMap.get("术前准备");
-                if(StringUtil.isNotEmpty(preCase)){
-                    sb.append("术前准备:"+preCase+"\n");
+                if (StringUtil.isNotEmpty(preCase)) {
+                    sb.append("术前准备:" + preCase + "\n");
                 }
 
                 String simCase = structureMap.get("诊断依据");
-                if(StringUtil.isNotEmpty(simCase)){
-                    sb.append("简要病情:"+simCase+"\n");
+                if (StringUtil.isNotEmpty(simCase)) {
+                    sb.append("简要病情:" + simCase + "\n");
                 }
 
                 String pillCase = structureMap.get("药物、食物过敏史");
-                if(StringUtil.isNotEmpty(pillCase) && StringUtil.isEmpty(simCase)){
-                    sb.append("药物、食物过敏史:"+pillCase+"\n");
+                if (StringUtil.isNotEmpty(pillCase) && StringUtil.isEmpty(simCase)) {
+                    sb.append("药物、食物过敏史:" + pillCase + "\n");
                 }
 
-                if(StringUtil.isNotEmpty(sb.toString())){
+                if (StringUtil.isNotEmpty(sb.toString())) {
                     text = sb.toString();
-                    putContent(crfContent, medicalTextType.get(2),text,Content.preoperativeDiscussion);
+                    putContent(crfContent, medicalTextType.get(2), text, Content.preoperativeDiscussion);
                 }
             }
             if (operationDocs.get(i).getOperationRecordDoc() != null) {
@@ -91,6 +91,10 @@ public class OperationAI extends ModelAI {
                 //存放抓取的药品
                 String content = CatalogueUtil.structureMapJoin(structureMap, Lists.newArrayList("手术经过及处理", "手术中用药(化疗等药物)"));
                 putContent(crfContent, medicalTextType.get(1), content, "手术记录" + i + "药物");
+
+                /***************************** 后结构化数据处理(一般手术记录)****************************************/
+                String text = operationRecordDoc.getText();
+                putContent(crfContent, medicalTextType.get(1), text, Content.operationRecord);
             }
             if (operationDocs.get(i).getOperationDiscussionDoc() != null) {
                 OperationDiscussionDoc operationDiscussionDoc = operationDocs.get(i).getOperationDiscussionDoc();
@@ -112,9 +116,9 @@ public class OperationAI extends ModelAI {
             if (midData.get(Content.surgicalSite) == null) {
                 continue;
             }
-            putPreoperativeDiscussionCrfData(midData.getJSONObject(Content.preoperativeDiscussion),inputInfo);
+            putPreoperativeDiscussionCrfData(midData.getJSONObject(Content.preoperativeDiscussion), inputInfo);
             PreoperativeDiscussionLabel preoperativeDiscussionLabel = inputInfo.getOperationDocs().get(0).getPreoperativeDiscussionDoc().getPreoperativeDiscussionLabel();
-            putPreoperativeDiscussionCrfData(midData.getJSONObject(Content.surgicalSite),inputInfo);
+            putPreoperativeDiscussionCrfData(midData.getJSONObject(Content.surgicalSite), inputInfo);
             PreoperativeDiscussionLabel preoperativeDiscussionLabelRe = inputInfo.getOperationDocs().get(0).getPreoperativeDiscussionDoc().getPreoperativeDiscussionLabel();
             preoperativeDiscussionLabel.setOpBottomName(preoperativeDiscussionLabelRe.getOpBottomName());
             inputInfo.getOperationDocs().get(0).getPreoperativeDiscussionDoc().setPreoperativeDiscussionLabel(preoperativeDiscussionLabel);
@@ -190,6 +194,7 @@ public class OperationAI extends ModelAI {
 
     /**
      * 存放抓取的药品
+     *
      * @param jsonObject
      */
     public List<Drug> putDrugCrfData(JSONObject jsonObject) {
@@ -207,7 +212,7 @@ public class OperationAI extends ModelAI {
      *
      * @param jsonObject
      */
-    public void putPreoperativeDiscussionCrfData(JSONObject jsonObject,InputInfo inputInfo) {
+    public void putPreoperativeDiscussionCrfData(JSONObject jsonObject, InputInfo inputInfo) {
         if (jsonObject == null) {
             return;
         }

+ 20 - 5
structure-center/src/main/java/com/lantone/structure/facade/tran/OperationRecordDocTran.java

@@ -36,7 +36,7 @@ public class OperationRecordDocTran extends TargetTran {
         operationDoc.setOperationRecordDoc(operationRecordDoc);
         operationDocs.add(operationDoc);
         inputInfo.setOperationDocs(operationDocs);
-        aiProcess();
+//        aiProcess();
 
         Map<String, String> structureMap = cutWord(text);
         Map<String, String> retMap = new HashMap<String, String>();
@@ -54,6 +54,9 @@ public class OperationRecordDocTran extends TargetTran {
                 int interventionCount = 1;
                 StringBuffer interventionString = new StringBuffer();
                 OperationRecordLabel operationRecordLabel = operationRecordDoc.getOperationRecordLabel();
+                if (operationRecordLabel == null) {
+                    return;
+                }
                 //手术目标部位名称
                 if (StringUtil.isNotBlank(operationRecordLabel.getOpBottomName())) {
                     retMap.put("手术目标部位名称", operationRecordLabel.getOpBottomName());
@@ -130,8 +133,9 @@ public class OperationRecordDocTran extends TargetTran {
         Map<String, String> sourceMap = Maps.newHashMap();
         text = text.replace("年  月  日  时  分", "");
         List<String> titles = CommonAnalysisUtil.sortTitles(
-                Lists.newArrayList("手术开始时间", "手术结束时间", "术前诊断", "手术名称", "术中诊断", "手 术 者", "助手", "麻醉方法", "麻 醉 者", "手术标本",
-                        "术中并发症", "术中失血量", "手术经过", "记录者", "主刀医生"),
+                Lists.newArrayList("手术开始时间", "手术结束时间", "术前诊断", "手术名称", "术中诊断", "手 术 者", "手术人员", "助手",
+                        "麻醉方法", "麻醉方式", "麻 醉 者", "麻醉医师", "手术标本", "手术切除标本", "术中并发症", "术中失血量", "术中输血量", "手术简要经过(包括“术中所见”)",
+                        "手术经过", "术后情况及诊疗计划", "术后注意事项", "记录者", "主刀医生", "医生签名", "患者或代理人签名", "与病人关系"),
                 text
         );
         CommonAnalysisUtil.cutByTitles(text, titles, 0, sourceMap);
@@ -143,8 +147,16 @@ public class OperationRecordDocTran extends TargetTran {
                     sourceMap.put("主刀医生", dataStr.replace(date, ""));
                     sourceMap.put("签名日期时间", date);
                 }
+            } else if (sourceMap.containsKey("医生签名")) {
+                String dataStr = sourceMap.get("医生签名");
+                String date = extractDate(dataStr);
+                if (StringUtil.isNotBlank(date)) {
+                    sourceMap.put("医生签名", dataStr.replace(date, ""));
+                    sourceMap.put("签名日期时间", date);
+                }
             }
-            CommonAnalysisUtil.removeKey(sourceMap, "术前诊断", "术中诊断", "⒈患者基本情况", "⒉拟实施的输血方案");
+            CommonAnalysisUtil.removeKey(sourceMap, "术前诊断", "术中诊断", "⒈患者基本情况", "⒉拟实施的输血方案", "手术标本", "手术切除标本", "术中并发症",
+                    "与病人关系", "术后情况及诊疗计划", "术后注意事项", "手术简要经过(包括“术中所见”)");
         }
         return sourceMap;
     }
@@ -185,9 +197,12 @@ public class OperationRecordDocTran extends TargetTran {
             "手术结束时间=手术结束日期时间",
             "手术经过=手术过程描述",
             "手术者=手术者姓名",
+            "手术人员=手术者姓名",
             "麻醉者=麻醉医师姓名",
+            "麻醉医师=麻醉医师姓名",
             "医护人员陈述=手术者签名",
             "主刀医生=手术者签名",
-            "术中失血量=出血量(mL)"
+            "术中失血量=出血量(mL)",
+            "术中输血量=输血量(mL)"
     );
 }