Jelajahi Sumber

反推诊断入参替换,体征中加入症状

kongwz 4 tahun lalu
induk
melakukan
a56b531a24

+ 2 - 0
src/main/java/com/diagbot/dto/WordCrfDTO.java

@@ -56,6 +56,8 @@ public class WordCrfDTO {
     private DiagLabel diagLabel = new DiagLabel();
 
     /*******************************************入参数据拷贝开始******************************/
+     // 诊断
+    private List<Item> diag = new ArrayList<>();
     // 当前化验开单项
     private List<Lis> lisOrder = new ArrayList<>();
     // 当前辅检开单项

+ 11 - 4
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -61,6 +61,9 @@ public class CommonFacade {
         if (ListUtil.isNotEmpty(searchData.getDiagOrder())) {
             wordCrfDTO.setDiagOrder(searchData.getDiagOrder());
         }
+        if (ListUtil.isNotEmpty(searchData.getDiag())) {
+            wordCrfDTO.setDiag(searchData.getDiag());
+        }
         aiAnalyze.aiProcess(searchData, wordCrfDTO);
         return wordCrfDTO;
     }
@@ -87,6 +90,9 @@ public class CommonFacade {
         //下的诊断
         diagList.addAll(wordCrfDTO.getDiagOrder().stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
                 .map(x -> x.getName()).collect(Collectors.toList()));
+        //传的诊断
+        diagList.addAll(wordCrfDTO.getDiag().stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
+                .map(x -> x.getName()).collect(Collectors.toList()));
 
         //所有化验(结构化数据)
         List<String> allLis = new ArrayList<>();
@@ -164,6 +170,7 @@ public class CommonFacade {
         //诊断回填
         CoreUtil.setPropertyList(diagLabel.getDiags(), map.get(StandConvertEnum.disease.getName()));
         CoreUtil.setPropertyList(wordCrfDTO.getDiagOrder(),"name", "uniqueName", map.get(StandConvertEnum.disease.getName()));
+        CoreUtil.setPropertyList(wordCrfDTO.getDiag(),"name", "uniqueName", map.get(StandConvertEnum.disease.getName()));
         //药品回填
         CoreUtil.setPropertyList(presentLabel.getMedicines(), map.get(StandConvertEnum.drug.getName()));
         CoreUtil.setPropertyList(pastLabel.getAllergyMedicines(), map.get(StandConvertEnum.drug.getName()));
@@ -189,7 +196,7 @@ public class CommonFacade {
         NeoPushVO pushVO = new NeoPushVO();
         ChiefLabel chiefLabel = wordCrfDTO.getChiefLabel();
         PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
-        List<Item> diagOrder = wordCrfDTO.getDiagOrder();
+        List<Item> diags = wordCrfDTO.getDiag();
         PastLabel pastLabel = wordCrfDTO.getPastLabel();
         List<Lis> lis = wordCrfDTO.getLis();
 //        List<Pacs> pacs = wordCrfDTO.getPacs();
@@ -247,14 +254,14 @@ public class CommonFacade {
             pacsPushVo.setPacs(pacsNewList);
             pushVO.setPacsPushVo(pacsPushVo);
         }
-        if(ListUtil.isNotEmpty(diagOrder)){
+        if(ListUtil.isNotEmpty(diags)){
             DiagVo diagVo = new DiagVo();
-            List<Diag> diags = diagOrder.stream().map(x -> {
+            List<Diag> diseases = diags.stream().map(x -> {
                 Diag diag = new Diag();
                 diag.setName(x.getUniqueName());
                 return diag;
             }).collect(Collectors.toList());
-            diagVo.setDiags(diags);
+            diagVo.setDiags(diseases);
             pushVO.setDiagVo(diagVo);
         }
 

+ 4 - 4
src/main/java/com/diagbot/model/ai/BeHospitalizedAI.java

@@ -555,7 +555,8 @@ public class BeHospitalizedAI extends ModelAI {
     public List<Vital> loadvital(JSONObject aiOut) {
         //一般情况描述信息
         EntityProcessVital entityProcessVital = new EntityProcessVital();
-        List<Vital> vitals = entityProcessVital.extractEntity(aiOut);
+        VitalLabel vitalLabel = entityProcessVital.extractEntity(aiOut);
+        List<Vital> vitals = vitalLabel.getVitals();
         return vitals;
     }
 
@@ -594,9 +595,8 @@ public class BeHospitalizedAI extends ModelAI {
 
         //一般情况描述信息
         EntityProcessVital entityProcessVital = new EntityProcessVital();
-        List<Vital> vitals = entityProcessVital.extractEntity(aiOut);
-        VitalLabel vitalLabel = new VitalLabel();
-        vitalLabel.setVitals(vitals);
+        VitalLabel vitalLabel = entityProcessVital.extractEntity(aiOut);
+        List<Vital> vitals = vitalLabel.getVitals();
 
         // 生命体征特殊处理
         for (Vital vi : vitals) {

+ 49 - 2
src/main/java/com/diagbot/model/ai/process/EntityProcessVital.java

@@ -2,16 +2,20 @@ package com.diagbot.model.ai.process;
 
 import com.alibaba.fastjson.JSONObject;
 import com.diagbot.model.ai.model.EntityEnum;
+import com.diagbot.model.ai.model.Lemma;
 import com.diagbot.model.entity.*;
+import com.diagbot.model.label.VitalLabel;
 import com.diagbot.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
 public class EntityProcessVital extends EntityProcess {
-    public List<Vital> extractEntity(JSONObject outputs) {
+    public VitalLabel extractEntity(JSONObject outputs) {
+        VitalLabel vitalLabel = new VitalLabel();
         List<Vital> vitals = new ArrayList<>();
         Vital vital =null;
         List<Map<String, String>> vitalEntityList = processJson(outputs, EntityEnum.SIGN.toString());
@@ -59,6 +63,49 @@ public class EntityProcessVital extends EntityProcess {
             }
             vitals.add(vital);
         }
-        return vitals;
+        vitalLabel.setVitals(vitals);
+        try{
+        //临床表现
+        List<Lemma> clinicLemmas = createEntityTree(outputs, EntityEnum.CLINICAL_FEATURE.toString());
+        for (Lemma lemma : clinicLemmas) {
+            Clinical clinical = new Clinical();
+            clinical.setName(lemma.getText());
+            clinical.setStandName(lemma.getText());
+
+            List<PD> timestamp = new LinkedList<>();
+            for (Lemma relationLemma : lemma.getRelationLemmas()) {
+                if (relationLemma.getProperty().equals(EntityEnum.NEGATIVE.toString())) {
+                    clinical.setNegative(findNegative(lemma));
+                }
+                clinical.setModification(findT(lemma, new Modification(), EntityEnum.MODIFICATION.toString()));//修饰
+                clinical.setBodyPart(findT(lemma, new BodyPart(), EntityEnum.BODY.toString()));//部位
+                clinical.setTrend(findT(lemma, new Trend(), EntityEnum.TREND.toString()));//趋势
+                clinical.setCause(findT(lemma, new Cause(), EntityEnum.CAUSE.toString()));//诱因
+                clinical.setProperty(findT(lemma, new Property(), EntityEnum.PROPERTY.toString()));//性质
+                clinical.setDegree(findT(lemma, new Degree(), EntityEnum.DEGREE.toString()));//程度
+                clinical.setAggravate(findT(lemma, new Aggravate(), EntityEnum.AGGRAVATE.toString()));//加重因素
+                clinical.setRelief(findT(lemma, new Relief(), EntityEnum.RELIEF.toString()));//缓解因素
+                if (relationLemma.getProperty().equals(EntityEnum.TIME.toString())) {
+                    String[] time_split = relationLemma.getText().split(",");
+                    for (String time : time_split) {
+                        PD pd = new PD();
+                        String[] val_unit = new String[2];
+                        if (time.trim().length() > 0) {
+                            val_unit = extract_digit(time);
+                        }
+                        pd.setValue(val_unit[0]);
+                        pd.setUnit(val_unit[1]);
+                        pd.setName(time);
+                        timestamp.add(pd);
+                    }
+                }
+            }
+            clinical.setTimestamp(timestamp);
+            vitalLabel.add(vitalLabel.getClinicals(), clinical);
+        }
+        } catch (Exception e) {
+                e.printStackTrace();
+            }
+        return vitalLabel;
     }
 }

+ 5 - 0
src/main/java/com/diagbot/model/label/VitalLabel.java

@@ -1,5 +1,6 @@
 package com.diagbot.model.label;
 
+import com.diagbot.model.entity.Clinical;
 import com.diagbot.model.entity.Vital;
 import lombok.Data;
 
@@ -17,4 +18,8 @@ public class VitalLabel extends GeneralLabel{
     private List<Vital> vitals = new ArrayList<>();
     // private PD sbp = new PD(); // 收缩压
     // private PD dbp = new PD(); // 舒张压
+    private List<Clinical> clinicals = new ArrayList<>();
+    public <T> void add(List<T> list, T obj) {
+        list.add(obj);
+    }
 }