Browse Source

婚育史关系解读后结构化

louhr 5 năm trước cách đây
mục cha
commit
40f3dad554

+ 22 - 4
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/BeHospitalizedAI.java

@@ -10,10 +10,7 @@ import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
 import com.lantone.qc.pub.model.entity.*;
-import com.lantone.qc.pub.model.label.ChiefLabel;
-import com.lantone.qc.pub.model.label.FamilyLabel;
-import com.lantone.qc.pub.model.label.PersonalLabel;
-import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.model.label.*;
 import com.lantone.qc.pub.model.vo.CRFVo;
 import com.lantone.qc.pub.util.StringUtil;
 
@@ -135,6 +132,11 @@ public class BeHospitalizedAI {
         presentLabel.setPacses(loadpacses(aiOut));
     }
 
+    /**
+     * 家族史
+     * @param jsonObject
+     * @param inputInfo
+     */
     public void putFamilyCrfData(JSONObject jsonObject, InputInfo inputInfo){
         if (jsonObject == null) {
             return;
@@ -146,6 +148,22 @@ public class BeHospitalizedAI {
         familyLabel.setText(inputInfo.getBeHospitalizedDoc().getFamilyLabel().getText());
     }
 
+    /**
+     * 婚育史
+     * @param jsonObject
+     * @param inputInfo
+     */
+    public void putMaritalCrfData(JSONObject jsonObject, InputInfo inputInfo){
+        if (jsonObject == null) {
+            return;
+        }
+        JSONObject aiOut = jsonObject.getJSONObject(entityRelationObject).getJSONObject(BeHospitalizedAI.outputs);
+        //家族史信息处理
+        EntityProcessMarital entityProcess = new EntityProcessMarital();
+        MaritalLabel maritalLabel = entityProcess.extractEntity(aiOut);
+        maritalLabel.setText(inputInfo.getBeHospitalizedDoc().getMaritalLabel().getText());
+    }
+
     public void putPastCrfData(JSONObject jsonObject, InputInfo inputInfo){
         if (jsonObject == null) {
             return;

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/model/EntityEnum.java

@@ -19,7 +19,7 @@ public enum EntityEnum {
     BIRTH_HIS("生育情况"), RELATIVES("家属"), GROUP_CONSULTATION("会诊"), ORGANISM("生物体"),
     OCCUPATION("职业"), LOCATION("地点"), DEAD("死亡"), DEAD_REASON("死亡原因"),
     SIMILAR_DISEASE_KEYWORD("相似疾病"), GENETIC_DISEASE_KEYWORD("家族遗传病"), EPIDEMIC_AREA_HISTORY("疫区史"),
-    CONTACT_HISTORY("接触史"), MARITAL_HISTORY("冶游史"), MARITAL_STATUS("婚姻情况"), NEAR_RELATION("近亲史"),
+    CONTACT_HISTORY("接触史"), MARITAL_HISTORY("冶游史"), MARITAL_STATUS("婚姻情况"), MARRYIAGE("结婚年龄"), NEAR_RELATION("近亲史"),
     CURE_AIM("治疗目的"), OTHER("其他");
 
     private String value;

+ 16 - 0
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcess.java

@@ -146,6 +146,22 @@ public class EntityProcess {
         return connectEntityIdList;
     }
 
+    /**
+     * 查找阴性表述
+     * @param detailLemma
+     * @return
+     */
+    protected Negative findNegative(Lemma detailLemma) {
+        for (Lemma lemma : detailLemma.getRelationLemmas()) {
+            if (lemma.getProperty().equals(EntityEnum.NEGATIVE.toString())) {
+                Negative negative = new Negative();
+                negative.setName(lemma.getText());
+                return negative;
+            }
+        }
+        return null;
+    }
+
     /**
      * 获取实体id列表对应的所有实体类型及实体值
      *

+ 21 - 13
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessFamily.java

@@ -17,6 +17,12 @@ public class EntityProcessFamily extends EntityProcess {
 
     public FamilyLabel extractEntity(JSONObject aiOut) {
         FamilyLabel familyLabel = new FamilyLabel();
+        List<Family> families = loadFamilies(aiOut);
+        familyLabel.setFamilies(families);
+        return familyLabel;
+    }
+
+    public List<Family> loadFamilies(JSONObject aiOut) {
         //家属情况
         List<Family> families = new ArrayList<>();
         //读取家属所有本体及关联信息
@@ -32,6 +38,8 @@ public class EntityProcessFamily extends EntityProcess {
                         family.setDiagInfectious(addInfectious(relationLemma));
                     } else if (relationLemma.getProperty().equals(EntityEnum.GENETIC_DISEASE_KEYWORD.toString())) {
                         family.setGeneticDiseaseKeyword(addGeneticDisease(relationLemma));
+                    } else if (relationLemma.getProperty().equals(EntityEnum.HEALTH.toString())) {
+                        family.setHealthCondition(addHealthCondition(relationLemma));
                     } else if (relationLemma.getProperty().equals(EntityEnum.DIEASE.toString())) {
                         family.addDiag(addDiags(relationLemma));
                     }
@@ -39,8 +47,7 @@ public class EntityProcessFamily extends EntityProcess {
             }
             families.add(family);
         }
-        familyLabel.setFamilies(families);
-        return familyLabel;
+        return families;
     }
 
     /**
@@ -84,6 +91,18 @@ public class EntityProcessFamily extends EntityProcess {
         }
         return geneticDiseaseKeyword;
     }
+
+    /**
+     * 家属健康情况
+     * @param healthConditionLemma
+     * @return
+     */
+    private HealthCondition addHealthCondition(Lemma healthConditionLemma) {
+        HealthCondition healthCondition = new HealthCondition();
+        healthCondition.setName(healthConditionLemma.getText());
+        return healthCondition;
+    }
+
     /**
      * 家属疾病史
      * @param diagLemma
@@ -97,15 +116,4 @@ public class EntityProcessFamily extends EntityProcess {
         }
         return diag;
     }
-
-    private Negative findNegative(Lemma detailLemma) {
-        for (Lemma lemma : detailLemma.getRelationLemmas()) {
-            if (lemma.getProperty().equals(EntityEnum.NEGATIVE.toString())) {
-                Negative negative = new Negative();
-                negative.setName(lemma.getText());
-                return negative;
-            }
-        }
-        return null;
-    }
 }

+ 38 - 7
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessMarital.java

@@ -3,25 +3,56 @@ package com.lantone.qc.kernel.structure.ai.process;
 import com.alibaba.fastjson.JSONObject;
 import com.lantone.qc.kernel.structure.ai.model.EntityEnum;
 import com.lantone.qc.kernel.structure.ai.model.Lemma;
-import com.lantone.qc.pub.model.entity.Diag;
-import com.lantone.qc.pub.model.entity.Family;
+import com.lantone.qc.pub.model.entity.Consanguineous;
+import com.lantone.qc.pub.model.entity.Fertility;
+import com.lantone.qc.pub.model.entity.MaritalStatus;
+import com.lantone.qc.pub.model.entity.Marryiage;
 import com.lantone.qc.pub.model.label.MaritalLabel;
 
 import java.util.List;
 
 /**
  * @ClassName : EntityProcessMarital
- * @Description : 家族
+ * @Description : 婚育
  * @Author : 楼辉荣
  * @Date: 2020-03-10 10:20
  */
 public class EntityProcessMarital extends EntityProcess {
     public MaritalLabel extractEntity(JSONObject aiOut) {
         MaritalLabel maritalLabel = new MaritalLabel();
-        try {
-            List<Lemma> familiesLemma = createEntityTree(aiOut, EntityEnum.RELATIVES.toString());
-        } catch (Exception e) {
-
+        //家属情况
+        EntityProcessFamily entityProcessFamily = new EntityProcessFamily();
+        maritalLabel.setFamily(entityProcessFamily.extractEntity(aiOut).getFamilies());
+        //读取近亲史所有本体及关联信息
+        List<Lemma> consanguineousLemmas = createEntityTree(aiOut, EntityEnum.NEAR_RELATION.toString());
+        for (Lemma lemma :consanguineousLemmas) {
+            Consanguineous consanguineous = new Consanguineous();
+            consanguineous.setName(lemma.getText());
+            if (lemma.isHaveChildren()) {
+                consanguineous.setNegative(findNegative(lemma));
+            }
+            maritalLabel.setConsanguineous(consanguineous);
+        }
+        //读取结婚年龄所有本体及关联信息
+        List<Lemma> marryiageLemmas = createEntityTree(aiOut, EntityEnum.MARRYIAGE.toString());
+        for (Lemma lemma :marryiageLemmas) {
+            Marryiage marryiage = new Marryiage();
+            marryiage.setName(lemma.getText());
+            maritalLabel.setMarryiage(marryiage);
+        }
+        //婚姻情况描述
+        List<Lemma> maritalStatusLemmas = createEntityTree(aiOut, EntityEnum.MARITAL_STATUS.toString());
+        for (Lemma lemma :maritalStatusLemmas) {
+            MaritalStatus maritalStatus = new MaritalStatus();
+            maritalStatus.setName(lemma.getText());
+            maritalLabel.setMaritalStatus(maritalStatus);
+        }
+        //生育情况描述
+        List<Lemma> fertilityLemmas = createEntityTree(aiOut, EntityEnum.BIRTH_HIS.toString());
+        for (Lemma lemma :fertilityLemmas) {
+            Fertility fertility = new Fertility();
+            fertility.setName(lemma.getText());
+            maritalLabel.setFertility(fertility);
         }
         return maritalLabel;
     }

+ 1 - 0
public/src/main/java/com/lantone/qc/pub/model/entity/Family.java

@@ -18,6 +18,7 @@ public class Family extends General{
     private GeneticDiseaseKeyword geneticDiseaseKeyword;//家族遗传病
     private DiagInfectious diagInfectious;//传染病史
     private List<Diag> diags;//疾病名称
+    private HealthCondition healthCondition;//健康状况
 
     public void addDiag(Diag diag) {
         this.diags.add(diag);

+ 5 - 0
public/src/main/java/com/lantone/qc/pub/model/entity/Fertility.java

@@ -1,10 +1,15 @@
 package com.lantone.qc.pub.model.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 /**
  * @ClassName : Fertility
  * @Description : 生育情况
  * @Author : 楼辉荣
  * @Date: 2020-03-05 19:24
  */
+@Setter
+@Getter
 public class Fertility extends General {
 }

+ 5 - 0
public/src/main/java/com/lantone/qc/pub/model/entity/HealthCondition.java

@@ -1,10 +1,15 @@
 package com.lantone.qc.pub.model.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 /**
  * @ClassName : HealthCondition
  * @Description : 健康状况
  * @Author : 楼辉荣
  * @Date: 2020-03-05 19:14
  */
+@Getter
+@Setter
 public class HealthCondition extends General {
 }

+ 15 - 0
public/src/main/java/com/lantone/qc/pub/model/entity/MaritalStatus.java

@@ -0,0 +1,15 @@
+package com.lantone.qc.pub.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : MaritalStatus
+ * @Description :
+ * @Author : 楼辉荣
+ * @Date: 2020-03-10 19:22
+ */
+@Setter
+@Getter
+public class MaritalStatus extends General{
+}

+ 5 - 0
public/src/main/java/com/lantone/qc/pub/model/entity/Marryiage.java

@@ -1,10 +1,15 @@
 package com.lantone.qc.pub.model.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 /**
  * @ClassName : Marryiage
  * @Description : 结婚年龄
  * @Author : 楼辉荣
  * @Date: 2020-03-10 10:25
  */
+@Getter
+@Setter
 public class Marryiage extends General {
 }

+ 6 - 7
public/src/main/java/com/lantone/qc/pub/model/label/MaritalLabel.java

@@ -1,9 +1,6 @@
 package com.lantone.qc.pub.model.label;
 
-import com.lantone.qc.pub.model.entity.Consanguineous;
-import com.lantone.qc.pub.model.entity.Diag;
-import com.lantone.qc.pub.model.entity.Family;
-import com.lantone.qc.pub.model.entity.Marryiage;
+import com.lantone.qc.pub.model.entity.*;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -18,7 +15,9 @@ import java.util.List;
 @Getter
 @Setter
 public class MaritalLabel extends GeneralLabel{
-    private List<Consanguineous> consanguineous;//近亲史
-    private List<Marryiage> marryiages;//结婚年龄
-    private List<Family> family;//结婚年龄
+    private Consanguineous consanguineous;//近亲史
+    private Marryiage marryiage;//结婚年龄
+    private MaritalStatus maritalStatus;//婚姻情况
+    private Fertility fertility;//生育情况
+    private List<Family> family;//家属
 }