Sfoglia il codice sorgente

1.修改逻辑及bug
2.主诉现病史相似度算法接口修改入参

hujing 5 anni fa
parent
commit
ad34747bba

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0002.java

@@ -89,7 +89,8 @@ public class BEH0002 extends QCCatalogue {
                 String firstClinical = clinicals.get(0).getName();
                 /* 主诉现病史相似度算法接口 */
                 ModelAI modelAI = new ModelAI();
-                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstClinical, symptoms, false, chiefPresentSimilarityServiceClient);
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstClinical, symptoms, false
+                        , "chief_present", chiefPresentSimilarityServiceClient);
                 if (jsonArray.size() == 2) {
                     /* 相似度最高症状 */
                     String symptom = jsonArray.getString(0);

+ 23 - 15
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0414.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.behospitalized;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
@@ -20,26 +21,33 @@ import java.util.Map;
 public class BEH0414 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getFirstPageRecordDoc() == null) {
-            return;
-        }
-        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        Map<String, String> firstStructMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-        String contactAddress_bh = structureMap.get("年龄");
-        String contactAddress_first = firstStructMap.get(Content.age);
-        if (StringUtil.isNotBlank(contactAddress_bh) && StringUtil.isNotBlank(contactAddress_first)) {
-            contactAddress_bh = removeUnit(contactAddress_bh);
-            contactAddress_first = removeUnit(contactAddress_first);
-            if (!contactAddress_first.equals(contactAddress_bh)) {
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null
+                && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            String firstAdmissionAge = firstpageStructureMap.get(Content.age);
+            String admissionAge = beHospitalStructureMap.get(Content.age);
+            if (StringUtil.isBlank(firstAdmissionAge) || StringUtil.isBlank(admissionAge)) {
+                status.set("0");
+                return;
+            }
+            int firstAdmissionAgeNum = removalUnit(firstAdmissionAge);
+            int admissionAgeNum = removalUnit(admissionAge);
+            if (firstAdmissionAgeNum != admissionAgeNum) {
                 status.set("-1");
             }
         }
     }
 
-    private String removeUnit(String str) {
-        if (str.contains("岁")) {
-            return str.replace("岁", "");
+    private int removalUnit(String admissionAge) {
+        int age = 0;
+        if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
+            admissionAge = admissionAge.replaceAll("[岁天]", "");
+        }
+        admissionAge = admissionAge.replaceAll("[^0-9]","");
+        if (CatalogueUtil.numbersOnly(admissionAge)) {
+            age = Integer.parseInt(admissionAge);
         }
-        return str;
+        return age;
     }
 }

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0449.java

@@ -62,7 +62,8 @@ public class BEH0449 extends QCCatalogue {
                 List<String> clinicName = getClinicName(presentClinicals);
                 /* 文本相似度模型 */
                 ModelAI modelAI = new ModelAI();
-                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(chiefClinic, clinicName, false, chiefPresentSimilarityServiceClient);
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(chiefClinic, clinicName,
+                        false, "chief_present", chiefPresentSimilarityServiceClient);
                 if (jsonArray.size() == 2) {
                     double likeRate = jsonArray.getDoubleValue(1);
                     if (likeRate > 0.9) {

+ 8 - 8
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0724.java

@@ -54,10 +54,10 @@ public class BEH0724 extends QCCatalogue {
         if (ListUtil.isNotEmpty(allergies)) {
             if (firpAllergyMedicine.contains("无")) {
                 allergies = allergies.stream().filter(i -> i != null
-                                && i.getNegative() != null
-                                && StringUtil.isNotBlank(i.getName())
-                                && i.getAllergyMedicine() != null
-                                && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
+                        && i.getNegative() != null
+                        && StringUtil.isNotBlank(i.getName())
+                        && i.getAllergyMedicine() != null
+                        && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
                 ).collect(Collectors.toList());
                 /* 模型提出的药物过敏史内容有一个否定就算与病案首页的药物过敏:无 相同 */
                 if (allergies.size() > 0) {
@@ -65,16 +65,16 @@ public class BEH0724 extends QCCatalogue {
                 }
             } else {
                 allergies = allergies.stream().filter(i -> i != null
-                                && StringUtil.isNotBlank(i.getName())
-                                && i.getAllergyMedicine() != null
-                                && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
+                        && StringUtil.isNotBlank(i.getName())
+                        && i.getAllergyMedicine() != null
+                        && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
                 ).collect(Collectors.toList());
 
                 List<String> allergyMedicine = getAllergyMedicine(allergies);
                 /* 主诉现病史相似度算法接口 */
                 ModelAI modelAI = new ModelAI();
                 JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firpAllergyMedicine, allergyMedicine,
-                        false, chiefPresentSimilarityServiceClient);
+                        false, "chief_present", chiefPresentSimilarityServiceClient);
                 if (jsonArray.size() == 2) {
                     /* 相似度分数 */
                     double likeRate = jsonArray.getDoubleValue(1);

+ 6 - 10
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0504.java

@@ -1,10 +1,10 @@
 package com.lantone.qc.kernel.catalogue.firstcourserecord;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -20,18 +20,14 @@ public class FIRC0504 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
-        if(firstCourseRecordDoc != null){
+        if (firstCourseRecordDoc != null) {
             Map<String, String> firstRecordMap = firstCourseRecordDoc.getStructureMap();
-            if(firstRecordMap != null){
-                String morbidity_after = firstRecordMap.get("治疗计划");
-                if(morbidity_after != null){
-                    if(CatalogueUtil.isEmpty(morbidity_after)){
-                        status.set("-1");
-                    }
-                }else {
+            if (firstRecordMap != null) {
+                String treatPlan = firstRecordMap.get("治疗计划");
+                if (StringUtil.isBlank(treatPlan)) {
                     status.set("-1");
                 }
             }
         }
     }
-    }
+}

+ 19 - 9
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0178.java

@@ -2,6 +2,7 @@ package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
 import com.alibaba.fastjson.JSONArray;
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
 import com.lantone.qc.kernel.client.SimilarityServiceClient;
 import com.lantone.qc.kernel.structure.ai.ModelAI;
 import com.lantone.qc.pub.Content;
@@ -28,6 +29,8 @@ import java.util.Map;
 public class FIRP0178 extends QCCatalogue {
     @Autowired
     SimilarityServiceClient similarityServiceClient;
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
@@ -53,24 +56,31 @@ public class FIRP0178 extends QCCatalogue {
                 return;
             }
 
-            /* 目前相似度算法是针对文本的,在此处并不适用,如 截瘫 - 高位截瘫,相似度为0 */
+            /* 修改为疾病相似度模型 */
             ModelAI modelAI = new ModelAI();
             int matchDiagSum = 0;
             for (String firstpageLeaveDiag : firstpageLeaveDiags) {
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstpageLeaveDiag, leaveDiagsStr, false
+                        , "diagnose", chiefPresentSimilarityServiceClient);
+                if (jsonArray.size() == 2) {
+                    /* 相似度最高症状 */
+                    String symptom = jsonArray.getString(0);
+                    /* 相似度分数 */
+                    double likeRate = jsonArray.getDoubleValue(1);
+                    if (likeRate > 0.9) {
+                        matchDiagSum++;
+                    }
+                }
+                /*
                 for (String leaveDiag : leaveDiagsStr) {
                     if (firstpageLeaveDiag.equals(leaveDiag) || leaveDiag.contains(firstpageLeaveDiag)) {
                         matchDiagSum++;
                         break;
-                    } else {
-                        JSONArray similarContent = new JSONArray();
-                        modelAI.putContent(similarContent, firstpageLeaveDiag, leaveDiag);
-                        double likeRate = modelAI.loadSimilarAI(similarContent, similarityServiceClient);
-                        if (likeRate > 0.9) {
-                            matchDiagSum++;
-                            break;
-                        }
                     }
                 }
+
+                 */
+
             }
 
             if (matchDiagSum != firstpageLeaveDiags.size()) {

+ 10 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0601.java

@@ -6,6 +6,7 @@ import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -25,15 +26,22 @@ public class THR0601 extends QCCatalogue {
             return;
         }
         List<ThreeLevelWardDoc> allDoctorWradDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();//查房记录
-        String title;
+        String title, record;
         boolean findIndications = false;
         for (ThreeLevelWardDoc threeLevelWardDoc : allDoctorWradDocs) {
             Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
             title = CatalogueUtil.subTitle(rescueStructureMap.get("查房标题"));
-            if (!CatalogueUtil.isEmpty(title) && title.contains(Content.attend)) {
+            record = CatalogueUtil.subTitle(rescueStructureMap.get("病情记录"));
+            if (StringUtil.isNotBlank(title) && title.contains(Content.attend)) {
                 findIndications = true;
                 break;
             }
+            if (StringUtil.isNotBlank(title) && StringUtil.isNotBlank(record)
+                    && title.contains("共同照护讨论记录") && record.contains(Content.attend)) {
+                findIndications = true;
+                break;
+            }
+
         }
         if (!findIndications) {
             status.set("-1");

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/ModelAI.java

@@ -189,13 +189,14 @@ public class ModelAI {
      * @return
      */
     public JSONArray loadChiefPresentSimilarAI(String string1, List<String> string2, boolean directionCheck
-            , ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient) {
+            ,String modelName, ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient) {
         //存储CRF完整所需结构数据
         ChiefPresentSimilarityVo similarityVo = new ChiefPresentSimilarityVo();
         JSONObject data = new JSONObject();
         putContent(data, string1, string2);
         similarityVo.setData(data);
         similarityVo.setDirection_check(directionCheck);
+        similarityVo.setModel_name(modelName);
         //获取CRF模型返回数据
         JSONArray predY = getAnnotation(chiefPresentSimilarityServiceClient, similarityVo).getPred_y();
         return getChiefPresentSimilarOutputs(predY);

+ 1 - 0
public/src/main/java/com/lantone/qc/pub/model/vo/ChiefPresentSimilarityVo.java

@@ -9,4 +9,5 @@ import lombok.Setter;
 public class ChiefPresentSimilarityVo {
     private JSONObject data;
     private boolean direction_check;
+    private String model_name;
 }