Jelajahi Sumber

1、按照预处理9月2日讨论结果进行修改

louhr 5 tahun lalu
induk
melakukan
9942f66505

+ 1 - 1
common-service/src/main/java/org/diagbot/common/work/CrisisDetail.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.work;
+package org.diagbot.common.push.bean;
 
 /**
  * Created by louhr on 2019/8/31.

+ 1 - 1
common-service/src/main/java/org/diagbot/common/work/FeatureRate.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.work;
+package org.diagbot.common.push.bean;
 
 /**
  * Created by fyeman on 2018/1/17.

+ 1 - 1
common-service/src/main/java/org/diagbot/common/work/LisDetail.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.work;
+package org.diagbot.common.push.bean;
 
 public class LisDetail {
     private String detailName;

+ 9 - 9
common-push/src/main/java/org/diagbot/common/push/filter/PreResult.java

@@ -1,17 +1,17 @@
-package org.diagbot.common.push.filter;
+package org.diagbot.common.push.bean;
 
 /**
  * Created by louhr on 2019/8/31.
  */
 public class PreResult {
-    private String detailName;
-    private String uniqueName;
-    private String maxValue;
-    private String minValue;
-    private String name;
-    private String otherValue;
-    private String units;
-    private String value;
+    private String detailName = "";
+    private String uniqueName = "";
+    private String maxValue = "";
+    private String minValue = "";
+    private String name = "";
+    private String otherValue = "";
+    private String units = "";
+    private String value = "";
 
     public String getDetailName() {
         return detailName;

+ 1 - 2
common-service/src/main/java/org/diagbot/common/work/ResponseData.java

@@ -1,5 +1,4 @@
-package org.diagbot.common.work;
-import com.alibaba.fastjson.JSONObject;
+package org.diagbot.common.push.bean;
 import org.diagbot.common.javabean.Filnlly;
 import org.diagbot.common.javabean.MedicalIndication;
 

+ 68 - 0
common-push/src/main/java/org/diagbot/common/push/bean/ResultMappingFilter.java

@@ -0,0 +1,68 @@
+package org.diagbot.common.push.bean;
+
+
+public class ResultMappingFilter {
+    private Long id;
+    private String featureName;
+    private String featureType;
+    private String sex;
+    private int ageStart;
+    private int ageEnd;
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getFeatureName() {
+        return featureName;
+    }
+
+    public void setFeatureName(String featureName) {
+        this.featureName = featureName;
+    }
+
+    public String getFeatureType() {
+        return featureType;
+    }
+
+    public void setFeatureType(String featureType) {
+        this.featureType = featureType;
+    }
+
+    public String getSex() {
+        return sex;
+    }
+
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
+
+    public int getAgeStart() {
+        return ageStart;
+    }
+
+    public void setAgeStart(int ageStart) {
+        this.ageStart = ageStart;
+    }
+
+    public int getAgeEnd() {
+        return ageEnd;
+    }
+
+    public void setAgeEnd(int ageEnd) {
+        this.ageEnd = ageEnd;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/Rule.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean;
 
 import lombok.Getter;
 import lombok.Setter;

+ 14 - 4
common-service/src/main/java/org/diagbot/common/work/SearchData.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.work;
+package org.diagbot.common.push.bean;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -23,7 +23,7 @@ public class SearchData {
     protected String resourceType;
     //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
     protected String sysCode;
-    private List<LisDetail> lisArr = new ArrayList<>();
+    private List<PreResult> lisArr = new ArrayList<>();
     protected String chief  = "";
     protected String symptom = "";
     protected String vital = "";
@@ -54,6 +54,8 @@ public class SearchData {
     private Map<String, Map<String, String>> graphInputs = new HashMap<>(10, 0.8f);
     //阴性 页面录入数据需要对结果过滤的集合
     private Map<String, Map<String, String>> filters = new HashMap<>(10, 0.8f);
+    //满足规则的ID集合
+    private Map<String, List<Long>> ruleIds = new HashMap<>();
 
     public Integer getDisType() {
         return disType;
@@ -63,11 +65,11 @@ public class SearchData {
         this.disType = disType;
     }
 
-    public List<LisDetail> getLisArr() {
+    public List<PreResult> getLisArr() {
         return lisArr;
     }
 
-    public void setLisArr(List<LisDetail> lisArr) {
+    public void setLisArr(List<PreResult> lisArr) {
         this.lisArr = lisArr;
     }
 
@@ -292,4 +294,12 @@ public class SearchData {
     public void setOtherOrder(String otherOrder) {
         this.otherOrder = otherOrder;
     }
+
+    public List<Long> getRuleIds() {
+        return ruleIds;
+    }
+
+    public void setRuleIds(List<Long> ruleIds) {
+        this.ruleIds = ruleIds;
+    }
 }

+ 130 - 0
common-push/src/main/java/org/diagbot/common/push/cache/ApplicationCacheUtil.java

@@ -0,0 +1,130 @@
+package org.diagbot.common.push.cache;
+
+import org.diagbot.common.push.bean.ResultMappingFilter;
+import org.diagbot.common.push.bean.Rule;
+import org.diagbot.nlp.participle.cfg.Configuration;
+import org.diagbot.nlp.participle.cfg.DefaultConfig;
+import org.diagbot.nlp.util.NlpCache;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ApplicationCacheUtil {
+
+    //词库同义词定义
+    public static Map<String, Map<String, String>> standard_info_synonym_map = null;
+    //诊断科室衍射
+    public static Map<String, String> doc_result_mapping_diag_map = null;
+    //特征性别 年龄过滤等
+    public static Map<String, Map<String, ResultMappingFilter>> doc_result_mapping_filter_map = null;
+    // 规则
+    public static Map<String, List<Rule>> kl_rule_filter_map = null;
+
+    public static Map<String, Map<String, String>> getStandard_info_synonym_map() {
+        if (standard_info_synonym_map == null) {
+            standard_info_synonym_map = NlpCache.getStandard_info_synonym_map();
+        }
+        return standard_info_synonym_map;
+    }
+
+    public static Map<String, String> getDoc_result_mapping_diag_map() {
+        if (doc_result_mapping_diag_map == null) {
+            createDoc_result_mapping_diag_map();
+        }
+        return doc_result_mapping_diag_map;
+    }
+
+    public static Map<String, String> createDoc_result_mapping_diag_map() {
+        Configuration configuration = new DefaultConfig();
+        doc_result_mapping_diag_map = configuration.loadMapDict("bigdata_diag_2_dept.dict");
+        return doc_result_mapping_diag_map;
+    }
+
+    public static Map<String, Map<String, ResultMappingFilter>> getDoc_result_mapping_filter_map() {
+        if (doc_result_mapping_filter_map == null) {
+            createDoc_result_mapping_filter_map();
+        }
+        return doc_result_mapping_filter_map;
+    }
+
+    public static Map<String, Map<String, ResultMappingFilter>> createDoc_result_mapping_filter_map() {
+        Configuration configuration = new DefaultConfig();
+        List<String> fileContents = configuration.readFileContents("bigdata_sex_age_filter.dict");
+        String[] line_string;
+        List<ResultMappingFilter> resultMappingFilters = new ArrayList<>();
+        try {
+            for (int i = 0; i < fileContents.size(); i++) {
+                line_string = org.apache.commons.lang3.StringUtils.split(fileContents.get(i), "\\|");
+                if (line_string.length == 5) {
+                    ResultMappingFilter resultMappingFilter = new ResultMappingFilter();
+                    resultMappingFilter.setFeatureName(line_string[0]);
+                    resultMappingFilter.setFeatureType(line_string[1]);
+                    resultMappingFilter.setSex(line_string[2]);
+                    resultMappingFilter.setAgeStart(Integer.parseInt(line_string[3]));
+                    resultMappingFilter.setAgeEnd(Integer.parseInt(line_string[4]));
+                    resultMappingFilters.add(resultMappingFilter);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        doc_result_mapping_filter_map = new HashMap<>();
+        Map<String, ResultMappingFilter> filterMap = null;
+        for (ResultMappingFilter resultMappingFilter : resultMappingFilters) {
+            filterMap = doc_result_mapping_filter_map.get(resultMappingFilter.getFeatureType());
+            if (filterMap == null) {
+                filterMap = new HashMap<>();
+            }
+            filterMap.put(resultMappingFilter.getFeatureName(), resultMappingFilter);
+            doc_result_mapping_filter_map.put(resultMappingFilter.getFeatureType(), filterMap);
+        }
+        return doc_result_mapping_filter_map;
+    }
+
+
+    public static Map<String, List<Rule>> getKl_rule_filter_map() {
+        if (kl_rule_filter_map == null) {
+            create_kl_rule_filter_map();
+        }
+        return kl_rule_filter_map;
+    }
+
+    public static void create_kl_rule_filter_map() {
+        kl_rule_filter_map = new HashMap<>();
+
+        Configuration configuration = new DefaultConfig();
+        List<String> fileContents = configuration.readFileContents("bigdata_rule_filter.dict");
+
+        List<Rule> rules = null;
+        for (String line:fileContents) {
+            String[] content = line.split("\\|");
+            Rule rule = new Rule();
+            if (content.length == 14) {
+                rule.setIdx_name(content[0]==null?"":content[0]);
+                rule.setSet_name(content[1]==null?"":content[1]);
+                rule.setSet_status(content[2]==null?"":content[2]);
+                rule.setMin_value(content[3]==null?"":content[3]);
+                rule.setMin_concept_text(content[4]==null?"":content[4]);
+                rule.setMax_value(content[5]==null?"":content[5]);
+                rule.setMax_concept_text(content[6]==null?"":content[6]);
+                rule.setSet_value(content[7]==null?"":content[7]);
+                rule.setSet_concept_text(content[8]==null?"":content[8]);
+                rule.setUnit(content[9]==null?"":content[9]);
+                rule.setType_value(content[10]==null?"":content[10]);
+                rule.setMinRemind(content[11]==null?"":content[11]);
+                rule.setMaxRemind(content[12]==null?"":content[12]);
+                rule.setSetRemind(content[13]==null?"":content[13]);
+                if (kl_rule_filter_map.get(rule.getIdx_name()) == null) {
+                    rules = new ArrayList<>();
+                } else {
+                    rules = kl_rule_filter_map.get(rule.getIdx_name());
+                }
+                rules.add(rule);
+                kl_rule_filter_map.put(rule.getIdx_name(), rules);
+            }
+        }
+    }
+}

+ 4 - 6
common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java

@@ -331,12 +331,12 @@ public class CacheFileManager {
             fw.close();
 
             //规则过滤信息
-            sql = "SELECT idx_name, set_name, set_status, min_value, min_concept_text, max_value, max_concept_text, set_value, " +
-                    "set_concept_text, unit, type_value, min_remind, max_remind, set_remind FROM kl_rule_new ";
+            sql = "SELECT idx_name, set_name, set_name_check, min_operator, min_value, min_unit, max_operator, max_value, " +
+                    "max_unit, eq_operator, eq_value, eq_unit, remind FROM kl_rule";
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             fw = new FileWriter(path + "bigdata_rule_filter.dict");
-            String r6, r7, r8, r9, r10, r11, r12, r13, r14;
+            String r6, r7, r8, r9, r10, r11, r12, r13;
             while (rs.next()) {
                 r1 = rs.getString(1);
                 r2 = rs.getString(2);
@@ -351,7 +351,6 @@ public class CacheFileManager {
                 r11 = rs.getString(11);
                 r12 = rs.getString(12);
                 r13 = rs.getString(13);
-                r14 = rs.getString(14);
                 r1 = StringUtils.isEmpty(r1)?"":r1;
                 r2 = StringUtils.isEmpty(r2)?"":r2;
                 r3 = StringUtils.isEmpty(r3)?"":r3;
@@ -365,9 +364,8 @@ public class CacheFileManager {
                 r11 = StringUtils.isEmpty(r11)?"":r11;
                 r12 = StringUtils.isEmpty(r12)?"":r12;
                 r13 = StringUtils.isEmpty(r13)?"":r13;
-                r14 = StringUtils.isEmpty(r14)?"":r14;
                 fw.write(encrypDES.encrytor(r1+ "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5
-                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9 + "|" + r10 + "|" + r11 + "|" + r12 + "|" + r13 + "|" + r14));
+                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9 + "|" + r10 + "|" + r11 + "|" + r12 + "|" + r13));
                 fw.write("\n");
             }
             fw.close();

+ 1 - 1
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/Pretreatment.java

@@ -1,6 +1,6 @@
 package org.diagbot.common.push.filter.pretreat;
 
-import org.diagbot.common.push.filter.PreResult;
+import org.diagbot.common.push.bean.PreResult;
 import org.diagbot.nlp.participle.ParticipleUtil;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;

+ 1 - 2
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentLis.java

@@ -1,11 +1,10 @@
 package org.diagbot.common.push.filter.pretreat;
 
-import org.diagbot.common.push.filter.PreResult;
+import org.diagbot.common.push.bean.PreResult;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.util.NegativeEnum;
 import org.diagbot.nlp.util.NlpUtil;
-import org.springframework.util.StringUtils;
 
 import java.util.List;
 

+ 1 - 2
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentPacs.java

@@ -1,13 +1,12 @@
 package org.diagbot.common.push.filter.pretreat;
 
-import org.diagbot.common.push.filter.PreResult;
+import org.diagbot.common.push.bean.PreResult;
 import org.diagbot.nlp.participle.ParticipleUtil;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.util.NegativeEnum;
 import org.diagbot.nlp.util.NlpUtil;
 
-import java.util.ArrayList;
 import java.util.List;
 
 public class PretreatmentPacs extends Pretreatment {

+ 1 - 1
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentSymptom.java

@@ -1,6 +1,6 @@
 package org.diagbot.common.push.filter.pretreat;
 
-import org.diagbot.common.push.filter.PreResult;
+import org.diagbot.common.push.bean.PreResult;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 

+ 1 - 1
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentVital.java

@@ -1,6 +1,6 @@
 package org.diagbot.common.push.filter.pretreat;
 
-import org.diagbot.common.push.filter.PreResult;
+import org.diagbot.common.push.bean.PreResult;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 

+ 16 - 42
bigdata-web/src/main/java/org/diagbot/bigdata/work/PretreatmentFilter.java

@@ -1,17 +1,10 @@
-package org.diagbot.bigdata.work;
+package org.diagbot.common.push.filter.rule;
 
 
-import org.diagbot.bigdata.common.ApplicationCacheUtil;
-import org.diagbot.common.javabean.Rule;
-import org.diagbot.common.push.filter.PreResult;
-import org.diagbot.common.push.filter.pretreat.Pretreatment;
-import org.diagbot.common.push.filter.pretreat.PretreatmentPacs;
-import org.diagbot.common.push.filter.pretreat.PretreatmentSymptom;
-import org.diagbot.common.push.filter.pretreat.PretreatmentVital;
-import org.diagbot.common.work.CrisisDetail;
-import org.diagbot.common.work.LisDetail;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.filter.pretreat.*;
 import org.diagbot.pub.Constants;
 import org.springframework.util.StringUtils;
 
@@ -19,53 +12,34 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-public class PretreatmentFilter {
-    public void crisisFilter(SearchData searchData, ResponseData responseData) throws java.io.IOException {
-        //将数值类型内容全部转换为标准术语  依据kl_rule提供规则
-
-        List<CrisisDetail> allCrisisDetailList = new ArrayList<>();
+public class PretreatmentRule {
+    public void rule(SearchData searchData) throws java.io.IOException {
         //症状数据
         if (!StringUtils.isEmpty(searchData.getSymptom())) {
-            searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), allCrisisDetailList));
+            searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), "symptom"));
         }
         //体征数据
         if (!StringUtils.isEmpty(searchData.getVital())) {
-            searchData.setVital(add2PreResultList(new PretreatmentVital(), searchData.getVital(), allCrisisDetailList));
-        }
-        //lis文本非结构化数据
-        if (!StringUtils.isEmpty(searchData.getLis())) {
-            searchData.setLis(add2PreResultList(new PretreatmentVital(), searchData.getLis(), allCrisisDetailList));
+            searchData.setVital(add2PreResultList(new PretreatmentVital(), searchData.getVital(), "vital"));
         }
         //lis结构化信息
         if (searchData.getLisArr() != null && searchData.getLisArr().size() > 0) {
-            List<PreResult> preResultList = new ArrayList<>();
-            for (LisDetail detail : searchData.getLisArr()) {
-                PreResult result = new PreResult();
-                result.setName(detail.getName());
-                result.setDetailName(detail.getDetailName());
-                result.setUnits(detail.getUnits());
-                result.setMaxValue(String.valueOf(detail.getMaxValue()));
-                result.setMinValue(String.valueOf(detail.getMinValue()));
-                result.setOtherValue(detail.getOtherValue());
-                result.setUniqueName(detail.getUniqueName());
-                result.setValue(String.valueOf(detail.getValue()));
-                preResultList.add(result);
-            }
-            searchData.setLis(add2PreResultList(preResultList, searchData.getLis(), allCrisisDetailList));
+            searchData.setLis(add2PreResultList(searchData.getLisArr(), searchData.getLis(), "lis"));
+        } else if (!StringUtils.isEmpty(searchData.getLis())) {
+            searchData.setLis(add2PreResultList(new PretreatmentLis(), searchData.getLis(), "lis"));
         }
         //pacs数据
         if (!StringUtils.isEmpty(searchData.getPacs())) {
-            searchData.setPacs(add2PreResultList(new PretreatmentPacs(), searchData.getPacs(), allCrisisDetailList));
+            searchData.setPacs(add2PreResultList(new PretreatmentPacs(), searchData.getPacs(), "pacs"));
         }
-        responseData.setCrisisDetails(allCrisisDetailList);
     }
 
-    private String add2PreResultList(Pretreatment pretreatment, String content, List<CrisisDetail> allCrisisDetailList) throws java.io.IOException {
+    private String add2PreResultList(Pretreatment pretreatment, String content, String ruleType) throws java.io.IOException {
         List<PreResult> preResultList = pretreatment.analyze(content);
-        return add2PreResultList(preResultList, content, allCrisisDetailList);
+        return add2PreResultList(preResultList, content, ruleType);
     }
 
-    private String add2PreResultList(List<PreResult> preResultList, String content, List<CrisisDetail> allCrisisDetailList) throws java.io.IOException {
+    private String add2PreResultList(List<PreResult> preResultList, String content, String ruleType) throws java.io.IOException {
         Map<String, List<Rule>> kl_rule_filter_map = ApplicationCacheUtil.getKl_rule_filter_map();
         if (preResultList != null) {
             for (PreResult result : preResultList) {