소스 검색

开单合理性验证

louhr 5 년 전
부모
커밋
b21e7faead

+ 128 - 99
bigdata-web/src/test/java/org/diagbot/RuleTest.java

@@ -19,13 +19,13 @@ public class RuleTest {
     public static void main(String[] args) {
         RuleTest test = new RuleTest();
         try {
-            test.validate();
+            test.validatePub();
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
-    private void validate() throws Exception {
+    private void validatePub() throws Exception {
         MysqlJdbc nlpJdbc = new MysqlJdbc("root", "diagbot@20180822", "jdbc:mysql://192.168.2.235:3306/med-s?useUnicode=true&characterEncoding=UTF-8");
         List<Map<String, String>> data = nlpJdbc.query("kl_rule_pub",
                 new String[]{"id", "pub_name", "min_operator", "min_value", "min_unit",
@@ -35,106 +35,10 @@ public class RuleTest {
         List<Map<String, Object>> wheres = new ArrayList<>();
         //数据预处理
         PretreatmentRule pretreatmentRule = new PretreatmentRule();
-        double value = 0.0;
         for (Map<String, String> map : data) {
             SearchData searchData = new SearchData();
             searchData.setSysCode("1");
-            if (!StringUtils.isEmpty(map.get("eq_operator")) && "=".equals(map.get("eq_operator"))) {
-                if ("诊断--".equals(map.get("pub_name"))) {
-                    searchData.setDiag(map.get("eq_value"));
-                }
-                if ("开单--".equals(map.get("pub_name"))) {
-                    searchData.setLisOrder(map.get("eq_value"));
-                    searchData.setPacsOrder(map.get("eq_value"));
-                }
-                if ("症状--".equals(map.get("pub_name"))) {
-                    searchData.setSymptom(map.get("eq_value"));
-                }
-                if ("药品--".equals(map.get("pub_name"))) {
-                    searchData.setPasts(map.get("eq_value"));
-                }
-                if ("既往--".equals(map.get("pub_name"))) {
-                    searchData.setPasts(map.get("eq_value"));
-                }
-                if ("过敏--".equals(map.get("pub_name"))) {
-                    searchData.setPasts(map.get("eq_value"));
-                }
-                if (map.get("pub_name").indexOf("其他--") > -1) {
-                    searchData.setOther(map.get("pub_name") + map.get("eq_value"));
-                }
-                if (map.get("pub_name").indexOf("检查--") > -1) {
-                    searchData.setPacs(map.get("pub_name") + map.get("eq_value"));
-                }
-            } else if (!StringUtils.isEmpty(map.get("min_operator")) && !StringUtils.isEmpty(map.get("max_operator"))) {
-                if (map.get("pub_name").indexOf("体征--") > -1) {
-                    value = Double.valueOf(map.get("min_value")) + 0.1;
-                    searchData.setVital(map.get("pub_name") + value + map.get("min_unit"));
-                }
-                if (map.get("pub_name").indexOf("其他--") > -1) {
-                    value = Double.valueOf(map.get("min_value")) + 0.1;
-                    searchData.setOther(map.get("pub_name") + value + map.get("min_unit"));
-                }
-                if (map.get("pub_name").indexOf("化验--") > -1) {
-                    value = Double.valueOf(map.get("min_value")) + 0.1;
-                    List<PreResult> list = new ArrayList<>();
-                    PreResult preResult = new PreResult();
-                    preResult.setUniqueName(map.get("pub_name").substring(4));
-                    preResult.setValue(String.valueOf(value));
-                    preResult.setUnits(map.get("min_unit"));
-                    list.add(preResult);
-                    searchData.setLisArr(list);
-                }
-                if (map.get("pub_name").indexOf("年龄--") > -1) {
-                    int v = Integer.valueOf(map.get("min_value")) + 1;
-                    searchData.setAge(v);
-                }
-            } else if (!StringUtils.isEmpty(map.get("min_operator"))) {
-                if (map.get("pub_name").indexOf("体征--") > -1) {
-                    value = Double.valueOf(map.get("min_value")) - 0.1;
-                    searchData.setVital(map.get("pub_name") + value + map.get("min_unit"));
-                }
-                if (map.get("pub_name").indexOf("其他--") > -1) {
-                    value = Double.valueOf(map.get("min_value")) - 0.1;
-                    searchData.setOther(map.get("pub_name") + value + map.get("min_unit"));
-                }
-                if (map.get("pub_name").indexOf("化验--") > -1) {
-                    value = Double.valueOf(map.get("min_value")) - 0.1;
-                    List<PreResult> list = new ArrayList<>();
-                    PreResult preResult = new PreResult();
-                    preResult.setUniqueName(map.get("pub_name").substring(4));
-                    preResult.setValue(String.valueOf(value));
-                    preResult.setUnits(map.get("min_unit"));
-                    list.add(preResult);
-                    searchData.setLisArr(list);
-                }
-                if (map.get("pub_name").indexOf("年龄--") > -1) {
-                    int v = Integer.valueOf(map.get("min_value")) - 1;
-                    searchData.setAge(v);
-                }
-            } else if (!StringUtils.isEmpty(map.get("max_operator"))) {
-                if (map.get("pub_name").indexOf("体征--") > -1) {
-                    value = Double.valueOf(map.get("max_value")) + 0.1;
-                    searchData.setVital(map.get("pub_name") + value + map.get("max_unit"));
-                }
-                if (map.get("pub_name").indexOf("其他--") > -1) {
-                    value = Double.valueOf(map.get("max_value")) + 0.1;
-                    searchData.setOther(map.get("pub_name") + value + map.get("max_unit"));
-                }
-                if (map.get("pub_name").indexOf("化验--") > -1) {
-                    value = Double.valueOf(map.get("max_value")) + 0.1;
-                    List<PreResult> list = new ArrayList<>();
-                    PreResult preResult = new PreResult();
-                    preResult.setUniqueName(map.get("pub_name").substring(4));
-                    preResult.setValue(String.valueOf(value));
-                    preResult.setUnits(map.get("max_unit"));
-                    list.add(preResult);
-                    searchData.setLisArr(list);
-                }
-                if (map.get("pub_name").indexOf("年龄--") > -1) {
-                    int v = Integer.valueOf(map.get("max_value")) + 1;
-                    searchData.setAge(v);
-                }
-            }
+            createSearchData(searchData, map);
 
             Map<String, Object> line = new HashMap<>();
             Map<String, Object> where = new HashMap<>();
@@ -155,4 +59,129 @@ public class RuleTest {
 
         nlpJdbc.update("kl_rule_pub", updates, wheres);
     }
+
+    private void validateApp() throws Exception {
+        MysqlJdbc nlpJdbc = new MysqlJdbc("root", "diagbot@20180822", "jdbc:mysql://192.168.2.235:3306/med-s?useUnicode=true&characterEncoding=UTF-8");
+        List<Map<String, String>> data = nlpJdbc.query("kl_rule_pub",
+                new String[]{"id", "pub_name", "min_operator", "min_value", "min_unit",
+                        "max_operator", "max_value", "max_unit", "eq_operator", "eq_value", "eq_unit", "remind", "suffix_info"}, "");
+
+        Map<String, Map<String, String>> rulesMap = new HashMap<>();
+        for (Map<String, String> map : data) {
+            rulesMap.put(map.get("id"), map);
+        }
+
+        data = nlpJdbc.query("kl_rule_app", new String[]{"id", "rule_id"}, "");
+        for (Map<String, String> map : data) {
+
+        }
+
+        List<Map<String, Object>> updates = new ArrayList<>();
+        List<Map<String, Object>> wheres = new ArrayList<>();
+    }
+
+    private SearchData createSearchData(SearchData searchData, Map<String, String> map) {
+        double value = 0.0;
+        if (!StringUtils.isEmpty(map.get("eq_operator")) && "=".equals(map.get("eq_operator"))) {
+            if ("诊断--".equals(map.get("pub_name"))) {
+                searchData.setDiag(map.get("eq_value"));
+            }
+            if ("体征--".equals(map.get("pub_name"))) {
+                searchData.setVital(map.get("eq_value"));
+            }
+            if ("开单--".equals(map.get("pub_name"))) {
+                searchData.setLisOrder(map.get("eq_value"));
+                searchData.setPacsOrder(map.get("eq_value"));
+            }
+            if ("症状--".equals(map.get("pub_name"))) {
+                searchData.setSymptom(map.get("eq_value"));
+            }
+            if ("药品--".equals(map.get("pub_name"))) {
+                searchData.setPasts(map.get("eq_value"));
+            }
+            if ("既往--".equals(map.get("pub_name"))) {
+                searchData.setPasts(map.get("eq_value"));
+            }
+            if ("过敏--".equals(map.get("pub_name"))) {
+                searchData.setPasts(map.get("eq_value"));
+            }
+            if (map.get("pub_name").indexOf("其他--") > -1) {
+                searchData.setOther(map.get("pub_name") + map.get("eq_value"));
+            }
+            if (map.get("pub_name").indexOf("检查--") > -1) {
+                searchData.setPacs(map.get("pub_name") + map.get("eq_value"));
+            }
+        } else if (!StringUtils.isEmpty(map.get("min_operator")) && !StringUtils.isEmpty(map.get("max_operator"))) {
+            if (map.get("pub_name").indexOf("体征--") > -1) {
+                value = Double.valueOf(map.get("min_value")) + 0.1;
+                searchData.setVital(map.get("pub_name") + value + map.get("min_unit"));
+            }
+            if (map.get("pub_name").indexOf("其他--") > -1) {
+                value = Double.valueOf(map.get("min_value")) + 0.1;
+                searchData.setOther(map.get("pub_name") + value + map.get("min_unit"));
+            }
+            if (map.get("pub_name").indexOf("化验--") > -1) {
+                value = Double.valueOf(map.get("min_value")) + 0.1;
+                List<PreResult> list = new ArrayList<>();
+                PreResult preResult = new PreResult();
+                preResult.setUniqueName(map.get("pub_name").substring(4));
+                preResult.setValue(String.valueOf(value));
+                preResult.setUnits(map.get("min_unit"));
+                list.add(preResult);
+                searchData.setLisArr(list);
+            }
+            if (map.get("pub_name").indexOf("年龄--") > -1) {
+                int v = Integer.valueOf(map.get("min_value")) + 1;
+                searchData.setAge(v);
+            }
+        } else if (!StringUtils.isEmpty(map.get("min_operator"))) {
+            if (map.get("pub_name").indexOf("体征--") > -1) {
+                value = Double.valueOf(map.get("min_value")) - 0.1;
+                searchData.setVital(map.get("pub_name") + value + map.get("min_unit"));
+            }
+            if (map.get("pub_name").indexOf("其他--") > -1) {
+                value = Double.valueOf(map.get("min_value")) - 0.1;
+                searchData.setOther(map.get("pub_name") + value + map.get("min_unit"));
+            }
+            if (map.get("pub_name").indexOf("化验--") > -1) {
+                value = Double.valueOf(map.get("min_value")) - 0.1;
+                List<PreResult> list = new ArrayList<>();
+                PreResult preResult = new PreResult();
+                preResult.setUniqueName(map.get("pub_name").substring(4));
+                preResult.setValue(String.valueOf(value));
+                preResult.setUnits(map.get("min_unit"));
+                list.add(preResult);
+                searchData.setLisArr(list);
+            }
+            if (map.get("pub_name").indexOf("年龄--") > -1) {
+                int v = Integer.valueOf(map.get("min_value")) - 1;
+                searchData.setAge(v);
+            }
+        } else if (!StringUtils.isEmpty(map.get("max_operator"))) {
+            if (map.get("pub_name").indexOf("体征--") > -1) {
+                value = Double.valueOf(map.get("max_value")) + 0.1;
+                searchData.setVital(map.get("pub_name") + value + map.get("max_unit"));
+            }
+            if (map.get("pub_name").indexOf("其他--") > -1) {
+                value = Double.valueOf(map.get("max_value")) + 0.1;
+                searchData.setOther(map.get("pub_name") + value + map.get("max_unit"));
+            }
+            if (map.get("pub_name").indexOf("化验--") > -1) {
+                value = Double.valueOf(map.get("max_value")) + 0.1;
+                List<PreResult> list = new ArrayList<>();
+                PreResult preResult = new PreResult();
+                preResult.setUniqueName(map.get("pub_name").substring(4));
+                preResult.setValue(String.valueOf(value));
+                preResult.setUnits(map.get("max_unit"));
+                list.add(preResult);
+                searchData.setLisArr(list);
+            }
+            if (map.get("pub_name").indexOf("年龄--") > -1) {
+                int v = Integer.valueOf(map.get("max_value")) + 1;
+                searchData.setAge(v);
+            }
+        }
+
+        return searchData;
+    }
 }

+ 10 - 0
common-push/src/main/java/org/diagbot/common/push/bean/SearchData.java

@@ -61,6 +61,8 @@ public class SearchData {
     private Map<String, List<Rule>> rules = new HashMap<>();
     //特征推送走的模型 1:机器学习 2:朴素贝叶斯
     private Integer algorithmType;
+    //规则类型
+    private String ruleType;
 
     public Integer getDisType() {
         return disType;
@@ -331,4 +333,12 @@ public class SearchData {
     public void setDiseaseName(String diseaseName) {
         this.diseaseName = diseaseName;
     }
+
+    public String getRuleType() {
+        return ruleType;
+    }
+
+    public void setRuleType(String ruleType) {
+        this.ruleType = ruleType;
+    }
 }

+ 8 - 7
common-push/src/main/java/org/diagbot/common/push/filter/rule/PretreatmentRule.java

@@ -48,6 +48,7 @@ public class PretreatmentRule {
         }
         //其他史
         if (!StringUtils.isEmpty(searchData.getOther())) {
+            add2PreResultList(new PretreatmentOther(), searchData.getSymptom(), "symptom-other", searchData);
             searchData.setOther(add2PreResultList(new PretreatmentOther(), searchData.getOther(), "other", searchData));
         }
         //开具诊断
@@ -63,12 +64,12 @@ public class PretreatmentRule {
             add2PreResultList(new PretreatmentMakeList(), searchData.getPacsOrder(), "pacsOrder", searchData);
         }
 
-        Map<String, List<Rule>> ruleMap = searchData.getRules();
-        for (Map.Entry<String, List<Rule>> entry : ruleMap.entrySet()) {
-            for (Rule rule : entry.getValue()) {
-                System.out.println("id:" + rule.getId() + "; pub_name: " + rule.getPub_name());
-            }
-        }
+//        Map<String, List<Rule>> ruleMap = searchData.getRules();
+//        for (Map.Entry<String, List<Rule>> entry : ruleMap.entrySet()) {
+//            for (Rule rule : entry.getValue()) {
+//                System.out.println("id:" + rule.getId() + "; pub_name: " + rule.getPub_name());
+//            }
+//        }
     }
 
     private String add2PreResultList(Pretreatment pretreatment, String content, String ruleType, SearchData searchData) throws java.io.IOException {
@@ -102,7 +103,7 @@ public class PretreatmentRule {
                             accord_rule_map.put(ruleType, accord_rules);
                             searchData.setRules(accord_rule_map);
 
-                            content = content + (rule.getRemind() == null ? "" : rule.getRemind());
+                            content = content + (rule.getRemind() == null ? "" : rule.getSuffixInfo());
                         }
                     }
                 }

+ 17 - 2
nlp/src/main/java/org/diagbot/nlp/rule/pretreat/PretreatmentOther.java

@@ -14,7 +14,11 @@ public class PretreatmentOther extends Pretreatment {
     protected NegativeEnum[] nees_married = new NegativeEnum[]{NegativeEnum.MARRIED_DESC};
 
     public List<PreResult> analyze(String content) throws java.io.IOException{
-        List<PreResult> preResults = new ArrayList<>();
+        List<PreResult> preResults = super.analyzeDefault(content);
+        for (PreResult result : preResults) {
+            result.setUniqueName("其他--" + result.getUniqueName());
+        }
+
         LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
         for (int i = 0; i < lexemes.size(); i++) {
             Lexeme l = lexemes.get(i);
@@ -30,10 +34,21 @@ public class PretreatmentOther extends Pretreatment {
     }
 
     public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
-        return null;
+        return super.createDefaultPreResult(lexemes, lexeme, index);
     }
 
     public String findBodyValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        if (cursor > 0) cursor--;
+        int search_len = 0;
+        Lexeme leftLexeme = null;
+        while (search_len < max_back_search && cursor > -1) {
+            leftLexeme = lexemes.get(cursor);
+            if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.MARRIED_DESC})) {
+                return NlpUtil.concept(leftLexeme, NegativeEnum.MARRIED_DESC);
+            }
+            search_len++;
+            cursor--;
+        }
         return null;
     }
 }

+ 1 - 1
nlp/src/main/java/org/diagbot/nlp/rule/pretreat/PretreatmentPast.java

@@ -54,7 +54,7 @@ public class PretreatmentPast extends Pretreatment {
                     if (NlpUtil.isFeature(leftLexeme.getProperty(), nees_allergy)) {
                         result.setUniqueName("过敏--");
                         result.setDetailName("过敏--");
-                        result.setValue(NlpUtil.concept(l, NegativeEnum.ALLERGY) + "过敏");
+                        result.setValue(NlpUtil.concept(leftLexeme, NegativeEnum.ALLERGY) + "过敏");
                         preResults.add(result);
                     }
                     position--;

+ 12 - 10
rule/src/main/java/org/diagbot/rule/crisis/CrisisApplication.java

@@ -23,7 +23,7 @@ public class CrisisApplication {
 
     public Map<String, List<CrisisDetail>> crisisContent(SearchData searchData) {
         Map<String, List<Rule>> rules = searchData.getRules();
-        List<String> ruleTypeIdList = null;
+        List<String> ruleTypeIdList = new ArrayList<>();
         if (rules == null) {
             return new HashMap<String, List<CrisisDetail>>();
         }
@@ -31,10 +31,8 @@ public class CrisisApplication {
 
         Map<String, List<CrisisDetail>> crisisMap = new HashMap<>();
         List<CrisisDetail> crisisList = null;
-        if (StringUtils.isEmpty(searchData.getFeatureType())) {
-            ruleTypeIdList = getAllRuleId(ruleApps);
-        } else {
-            ruleTypeIdList = Arrays.asList(searchData.getFeatureType().split(","));
+        if (!StringUtils.isEmpty(searchData.getRuleType())) {
+            ruleTypeIdList = Arrays.asList(searchData.getRuleType().split(","));
         }
         for (Map.Entry<String, RuleApp> app : ruleApps.entrySet()) {
             if (StringUtils.isEmpty(app.getValue().getRuleIds()) || StringUtils.isEmpty(app.getValue().getTypeId())) {
@@ -45,7 +43,8 @@ public class CrisisApplication {
             }
             String appRemindVar = "";
             String appOriginText = "";
-            String[] fieldRuleIds = app.getValue().getRuleIds().split("\\|");
+            boolean hasAppSuit = false;
+            String[] fieldRuleIds = app.getValue().getRuleIds().split("\\^");
             for (String fieldRuleId : fieldRuleIds) {
                 String[] ruleIds = fieldRuleId.split(",");
                 String standardText = "", originText = "", remind = "";;
@@ -59,13 +58,13 @@ public class CrisisApplication {
                                 standardText += suitRule.getPub_name() + ";";
                                 if (StringUtils.isEmpty(remind)) {
                                     remind = suitRule.getRemind();
-                                } else {
+                                } else if (!StringUtils.isEmpty(remind) && !StringUtils.isEmpty(suitRule.getRemind())) {
                                     remind = remind + "," + suitRule.getRemind();
                                 }
 
                                 if (StringUtils.isEmpty(originText)) {
                                     originText = suitRule.getOriginText();
-                                } else {
+                                } else if (!StringUtils.isEmpty(originText) && !StringUtils.isEmpty(suitRule.getOriginText())) {
                                     originText = originText + ";" + suitRule.getOriginText();
                                 }
                                 break;
@@ -88,14 +87,16 @@ public class CrisisApplication {
                     } else {
                         appOriginText = appOriginText + "," + originText;
                     }
+
+                    hasAppSuit = true;
                 }
             }
             //所有规则都满足
-            if (!StringUtils.isEmpty(appRemindVar)) {
+            if (hasAppSuit) {
                 CrisisDetail crisisDetail = new CrisisDetail();
                 crisisDetail.setOriginText(appOriginText);
 //                crisisDetail.setStandardText(standardText);
-                crisisDetail.setRemindText(appRemindVar);
+                crisisDetail.setRemindText(app.getValue().getRemind().replace("${remind}", appRemindVar));
                 crisisDetail.setTypeId(app.getValue().getTypeId());
 
                 crisisList = crisisMap.get(key);
@@ -109,6 +110,7 @@ public class CrisisApplication {
                     }
                 }
                 if (!isHave) {
+                    System.out.println("remind_text:" + crisisDetail.getRemindText());
                     crisisList.add(crisisDetail);
                 }
                 crisisMap.put(key, crisisList);