Explorar o código

dev合并入lis

louhr %!s(int64=5) %!d(string=hai) anos
pai
achega
1616f47ef6

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

@@ -166,6 +166,7 @@ public class ApplicationCacheUtil {
         return kl_diagnose_detail_filter_map;
     }
 
+
     public static void create_kl_diagnose_detail_filter_map() {
         kl_diagnose_detail_filter_map = new HashMap<>();
         Map<String, String> diagnoseDetailRelationMap = new HashMap<>();

+ 3 - 2
common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java

@@ -22,8 +22,8 @@ import java.util.*;
 public class CacheFileManager {
     Logger logger = LoggerFactory.getLogger(CacheFileManager.class);
 
-    private String user = "root";
-    private String password = "lantone";
+    private String user = "teamdata";
+    private String password = "jiO2rfnYhg";
     private String url = "jdbc:mysql://192.168.2.121:3306/med?useUnicode=true&characterEncoding=UTF-8";
 
     private String path = "";
@@ -410,6 +410,7 @@ public class CacheFileManager {
                 fw.write("\n");
             }
             fw.close();
+
         } catch (IOException ioe) {
             ioe.printStackTrace();
         } catch (SQLException sqle) {

+ 16 - 42
common-push/src/main/java/org/diagbot/common/push/filter/ClassifyDiag.java

@@ -22,34 +22,6 @@ public class ClassifyDiag {
     //每个诊断所在的级别缓存
     Map<String, Integer> diagClassifyJiCache = CacheUtil.getDiagClassifyJiCache();
 
-   /* public static void main(String[] args) {
-
-        List<String> disList = new LinkedList<>();
-        String[] disArray = {"急性胰腺炎","冠心病","急性冠状动脉综合征","急性非ST段抬高型心肌梗死","急性ST段抬高型心肌梗死"
-        ,"三度房室传导阻滞","心力衰竭","急性心力衰竭"};
-         disList = Arrays.asList(disArray);
-        System.out.println("输入的诊断"+disList);
-        List<FeatureRate> inintFeature = new ArrayList<>();
-        Double inintNumber = 0.95;
-        String rate = "";
-        for (String dis:disList) {
-            FeatureRate featureRate = new FeatureRate();
-            featureRate.setFeatureName(dis);
-            inintNumber = inintNumber - 0.1;
-            rate = String.valueOf(inintNumber);
-            featureRate.setRate(rate);
-            inintFeature.add(featureRate);
-        }
-
-        ClassifyDiag classifyDiag = new ClassifyDiag();
-        List<FeatureRate> classify = classifyDiag.diagClassify(inintFeature);
-        System.out.println("hao hai you");
-        for (FeatureRate d:classify) {
-            System.out.println(d.getFeatureName()+"\t"+d.getRate()+"\t"+d.getExtraProperty());
-        }
-
-    }*/
-
     /**
      * 根据诊断依据规则过滤诊断
      * @param graphResponseData 把过滤的诊断包装在这个对象里
@@ -91,16 +63,6 @@ public class ClassifyDiag {
                 String desc = featureRate.getDesc();
                 Map<String,Object> d = new HashMap<>();
                 if(desc != null){
-                   /* JSONObject jsonObject = JSONObject.parseObject(desc);
-                    d = jsonObject;
-                    if(d.keySet().size() == 1 && "警惕".equals(d.keySet().toArray()[0])){
-                        highDiagList.add(featureName);
-                    }else if(d.keySet().size() == 1 && ("鉴别诊断".equals(d.keySet().toArray()[0])
-                            || "页面急诊".equals(d.keySet().toArray()[0])) || "急诊".equals(d.keySet().toArray()[0])){
-                        diffDiagList.add(featureName);
-                    }else {
-                        queDiagList.add(featureName);
-                    }*/
                    if(desc.contains("确诊") || desc.contains("拟诊")){
                        queDiagList.add(featureName);
                    }else {
@@ -117,7 +79,7 @@ public class ClassifyDiag {
                 FeatureRate featureRate = updateFeatures.get(j);
                 String featureName = featureRate.getFeatureName();
                 int i = highDiagList.indexOf(featureName);
-                if(i >= 0){
+                if(i >= 0 && featureRate.getDesc() != null){
                     finalDiagList.add(featureRate);
                 }
             }
@@ -128,7 +90,7 @@ public class ClassifyDiag {
                 FeatureRate featureRate = updateFeatures.get(j);
                 String featureName = featureRate.getFeatureName();
                 int i = diffDiagList.indexOf(featureName);
-                if(i >= 0){
+                if(i >= 0 && featureRate.getDesc() != null){
                     finalDiagList.add(featureRate);
                 }
             }
@@ -211,6 +173,8 @@ public class ClassifyDiag {
                             bigDataIDiagList.add(featureName);
                         }else if("Ⅱ".equals(s)){
                             bigDataIIDiagList.add(featureName);
+                        }else {
+                            bigDataIDiagList.add(featureName);
                         }
                     }else {
                         bigDataIDiagList.add(featureName);
@@ -218,13 +182,23 @@ public class ClassifyDiag {
                 }
             }
         }
-        finalDiagList.addAll(neoDiagList);
+//        finalDiagList.addAll(neoDiagList);
         finalDiagList.addAll(bigDataIDiagList);
         finalDiagList.addAll(bigDataIIDiagList);
+        if(neoDiagList !=null && neoDiagList.size()>0){
+            for (String diag:neoDiagList) {
+                for (FeatureRate feature:updateFeatureRates) {
+                    if(diag.equals(feature.getFeatureName())&& "neo4j".equals(feature.getSource())){
+                        finalDiagFeature.add(feature);
+                        break;
+                    }
+                }
+            }
+        }
         if(finalDiagList != null && finalDiagList.size()>0){
             for (String diag:finalDiagList){
                 for (FeatureRate f:updateFeatureRates) {
-                    if(diag.equals(f.getFeatureName())){
+                    if(diag.equals(f.getFeatureName())&& f.getSource()==null){
                         finalDiagFeature.add(f);
                         break;
                     }

+ 60 - 51
nlp-web/src/main/java/org/diagbot/nlp/controller/FeatureController.java

@@ -28,13 +28,18 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Controller
 @RequestMapping("/feature")
 public class FeatureController extends BaseController<Feature, FeatureWrapper, Long> {
     private String[] negative_words = Constants.negative_words;
-
+    //体征提取范围
+    private String featureNum;
     private Map<String, String> propelSymptom = null;
     private Map<String, String> propelDiag = null;
     private Map<String, String> propelVital= null;
@@ -146,60 +151,64 @@ public class FeatureController extends BaseController<Feature, FeatureWrapper, L
             Map<String, String> propel = null;
             List<Map<String, Object>> data = new ArrayList<>();
 
+           /* PropertiesUtil propertiesUtil = new PropertiesUtil("nlp.properties");
+            featureNum = propertiesUtil.getProperty("push.feature.num");*/
             FeatureAnalyze sa = new FeatureAnalyze();
             for (String featureType : featureTypes.split(",")) {
-                for (Info info : docInfos) {
-                    switch (FeatureType.parse(featureType)) {
-                        case SYMPTOM:
-                            content = info.getPresent();
-                            propel = propelSymptom;
-                            break;
-                        case TIME:
-                            content = info.getPresent();
-                            propel = propelSymptom;
-                            break;
-                        case FEATURE:
-                            content = info.getPresent();
-                            propel = propelSymptom;
-                            break;
-                        case VITAL:
-                            content = info.getVital();
-                            propel = propelVital;
-                            break;
-                        case PACS:
-                            content = info.getPacs();
-                            propel = propelPacs;
-                            break;
-                        case LIS:
-                            content = info.getLis();
-                            propel = propelLis;
-                            break;
-                        case DIAG:
-                            content = info.getDiag();
-                            propel = propelDiag;
-                            break;
-                    }
-                    featureList = sa.start(content, FeatureType.parse(featureType));
-
-                    if (featureList == null) {
-                        continue;
-                    }
-                    for (int i = 0; i < featureList.size(); i++) {
-                        featureMap = featureList.get(i);
-                        featureMap.put("rdn", info.getRdn());
-                        featureMap.put("age", StringUtils.isEmpty(info.getAge())?"0":info.getAge());
-                        featureMap.put("sex", info.getSex());
-                        featureMap.put("resource_type", info.getResourceType());
-
-                        if (propel.get(featureMap.get("feature_name")) == null) {
-                            featureMap.put("is_push", "0");
-                        } else {
-                            featureMap.put("is_push", "1");
+                for (String feature : featureNum.split(",")) {
+                    /*sa.setFeatureNum(feature);*/
+                    for (Info info : docInfos) {
+                        switch (FeatureType.parse(featureType)) {
+                            case SYMPTOM:
+                                content = info.getPresent();
+                                propel = propelSymptom;
+                                break;
+                            case TIME:
+                                content = info.getPresent();
+                                propel = propelSymptom;
+                                break;
+                            case FEATURE:
+                                content = info.getPresent();
+                                propel = propelSymptom;
+                                break;
+                            case VITAL:
+                                content = info.getVital();
+                                propel = propelVital;
+                                break;
+                            case PACS:
+                                content = info.getPacs();
+                                propel = propelPacs;
+                                break;
+                            case LIS:
+                                content = info.getLis();
+                                propel = propelLis;
+                                break;
+                            case DIAG:
+                                content = info.getDiag();
+                                propel = propelDiag;
+                                break;
+                        }
+                        featureList = sa.start(content, FeatureType.parse(featureType));
+                        if (featureList == null) {
+                            continue;
+                        }
+                        for (int i = 0; i < featureList.size(); i++) {
+                            featureMap = featureList.get(i);
+                            featureMap.put("rdn", info.getRdn() + "_" + feature);
+                            featureMap.put("age", StringUtils.isEmpty(info.getAge()) ? "0" : info.getAge());
+                            featureMap.put("sex", info.getSex());
+                            featureMap.put("resource_type", info.getResourceType());
+                            if (propel.get(featureMap.get("feature_name")) == null) {
+                                featureMap.put("is_push", "0");
+                            } else {
+                                featureMap.put("is_push", "1");
+                            }
+                            data.add(featureMap);
                         }
-                        data.add(featureMap);
-                    }
 
+                    }
                 }
+
             }
 
             MysqlJdbc jdbc = new MysqlJdbc(env.getProperty("spring.datasource.username"),

+ 7 - 0
nlp/src/main/java/org/diagbot/nlp/feature/FeatureAnalyze.java

@@ -18,6 +18,7 @@ import java.util.Map;
 
 public class FeatureAnalyze {
     private LexemePath<Lexeme> lexemePath = null;
+/*    private String featureNum = "";//特征提取范围*/
 
     Logger logger = LoggerFactory.getLogger(FeatureAnalyze.class);
 
@@ -61,6 +62,7 @@ public class FeatureAnalyze {
 //        }
 //        logger.info("分词文本结果:" + lexeme_text);
         lexemePath = replaceLexeme(lexemePath);
+        /*caseToken.getFeatureSize(featureNum);*/
         return caseToken.analyze(lexemePath);
     }
 
@@ -98,4 +100,9 @@ public class FeatureAnalyze {
         }
         return lexemePath;
     }
+
+  /*  public String setFeatureNum(String featureNum){
+        this.featureNum = featureNum;
+        return featureNum;
+    }*/
 }

+ 31 - 2
nlp/src/main/java/org/diagbot/nlp/feature/extract/CaseToken.java

@@ -6,8 +6,10 @@ import org.diagbot.nlp.util.Constants;
 import org.diagbot.nlp.util.NegativeEnum;
 import org.diagbot.nlp.util.NlpUtil;
 
-import java.util.*;
-
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 public abstract class CaseToken {
     protected static String[] ignore_symbol = new String[]{"、", "."};
     protected static String[] stop_symbol = new String[]{"。", ";", "?", ";", "?", "“", "”", "\r", "\n", "[", "]", "{", "}"};
@@ -20,6 +22,7 @@ public abstract class CaseToken {
     protected Lexeme leftFeatureLexeme = null;
     protected Lexeme rightFeatureLexeme = null;
     protected int sn = 0;
+/*    protected String featureSize = "";*/
 
     static {
         Arrays.sort(ignore_symbol);
@@ -100,6 +103,29 @@ public abstract class CaseToken {
             }
         }
         if (!hasFeature) {
+ /*           if (StringUtils.isNotEmpty(featureSize)) {
+                if(featureSize.equals("all")){//featureSize为all时提取所有特征
+                    Map<String, Object> fMap = new HashMap<>(10);
+                    fMap.put("feature_name", lexeme.getText());
+                    fMap.put("feature_type", featureType);
+                    fMap.put("negative", key);
+                    fMap.put("sn", String.valueOf(sn++));
+                    fMap.put("property", lexeme.getProperty());
+                    fMap.put("concept", lexeme.getConcept());
+                    featuresList.add(fMap);
+                }else {
+                    if (sn < Integer.parseInt(featureSize)){
+                        Map<String, Object> fMap = new HashMap<>(10);
+                        fMap.put("feature_name", lexeme.getText());
+                        fMap.put("feature_type", featureType);
+                        fMap.put("negative", key);
+                        fMap.put("sn", String.valueOf(sn++));
+                        fMap.put("property", lexeme.getProperty());
+                        fMap.put("concept", lexeme.getConcept());
+                        featuresList.add(fMap);
+                    }
+                }
+            }*/
             Map<String, Object> fMap = new HashMap<>(10);
             fMap.put("feature_name", lexeme.getText());
             fMap.put("feature_type", featureType);
@@ -110,5 +136,8 @@ public abstract class CaseToken {
             featuresList.add(fMap);
         }
     }
+  /*  public void getFeatureSize(String fetureSize){
+        this.featureSize = fetureSize;
+    }*/
 }
 

+ 4 - 1
nlp/src/main/resources/nlp.properties

@@ -1,3 +1,6 @@
 #数据文件存放路径
 cache.file.dir=/opt/diagbot-push/cache_file/
-#cache.file.dir=d:\\cache_file\\
+#cache.file.dir=e:\\cache_file\\
+
+#特征提取范围(不限制范围时配置:all)
+#push.feature.num=all

+ 14 - 2
push-web/src/main/java/org/diagbot/push/controller/AlgorithmController.java

@@ -152,19 +152,31 @@ public class AlgorithmController extends BaseController {
         ResponseData graphResponseData = graphCalculate.calculate(request, searchData);
         if (graphResponseData.getDis().size() > 0) {
             List<FeatureRate> disFeatureRates = new ArrayList<>();
-            boolean isFind = false;
+            /*boolean isFind = false;
             for (int i = 0; i < bigDataResponseData.getDis().size(); i++) {
                 FeatureRate bigdata_fr = bigDataResponseData.getDis().get(i);
                 isFind = false;
                 for (FeatureRate graph_fr : graphResponseData.getDis()) {
-                    if (bigdata_fr.getFeatureName().equals(graph_fr.getFeatureName())) {
+                    if (graph_fr.getDesc().contains("拟诊")|| graph_fr.getDesc().contains("确诊") && bigdata_fr.getFeatureName().equals(graph_fr.getFeatureName())) {
                         isFind = true;
                     }
                 }
                 if (!isFind) {
                     disFeatureRates.add(bigdata_fr);
                 }
+            }*/
+            List<FeatureRate> bigdis = bigDataResponseData.getDis();
+            List<FeatureRate> graphdis = graphResponseData.getDis();
+            for (FeatureRate bg:graphdis) {
+                Iterator<FeatureRate> iterator = bigdis.iterator();
+                while (iterator.hasNext()){
+                    FeatureRate gd = iterator.next();
+                    if(gd.getFeatureName().equals(bg.getFeatureName()) &&(bg.getDesc().contains("确诊")|| bg.getDesc().contains("拟诊"))){
+                        iterator.remove();
+                    }
+                }
             }
+            disFeatureRates = bigdis;
             List<FeatureRate> graphFeatureRates = graphResponseData.getDis();
             graphFeatureRates.addAll(disFeatureRates);
             bigDataResponseData.setDis(graphFeatureRates);