Browse Source

拟诊确诊排序

kongwz 6 years ago
parent
commit
ab691cb1cf

+ 10 - 7
graph/src/main/java/org/diagbot/graph/Diagnose/DiagnoseMain.java

@@ -10,13 +10,16 @@ import java.util.Map;
 public class DiagnoseMain {
     public static void main(String[] args) throws Exception {
         List<String> quezhenDiagno = new ArrayList<>();
-        Map<String, String> diagnose = new DiagnoseProcess().getDiagnose("近端指间关节炎","足关节炎","对称性关节肿胀","晨僵≥30分钟","类风湿因子阳性","抗CCP抗体阳性","侵袭性骨破坏");
-        for (Map.Entry<String,String> disease:diagnose.entrySet()
-             ) {
-            if("确诊".equals(disease.getValue())){
-                quezhenDiagno.add(disease.getKey());
-            }
+//        Map<String, String> diagnose = new DiagnoseProcess().getDiagnose("近端指间关节炎","足关节炎","对称性关节肿胀","晨僵≥30分钟","类风湿因子阳性","抗CCP抗体阳性",
+//                "侵袭性骨破坏","右上腹痛","向右背部放射","墨菲斯征阳性","白细胞增多和核左移","不洁饮食","胆囊内有强回声团");
+//         Map<String, String> diagnose = new DiagnoseProcess().getDiagnose(
+//                "侵袭性骨破坏","右上腹痛","向右背部放射","墨菲斯征阳性","白细胞增多","不洁饮食","胆囊内有强回声团");
+//        Map<String, String> diagnose = new DiagnoseProcess().getDiagnose(
+//                "上腹痛","墨菲斯征阳性","白细胞增多","不洁饮食","胆囊内有强回声团");
+        Map<String, String> diagnose = new DiagnoseProcess().getDiagnose(
+                "咽痛","鼻塞","乏力","淋巴结肿大","扁桃体肿大","上腹痛","墨菲斯征阳性","白细胞增多","不洁饮食","胆囊内有强回声团","近端指间关节炎","足关节炎","对称性关节肿胀","晨僵≥30分钟","类风湿因子阳性","抗CCP抗体阳性");
+        for (Map.Entry<String,String> disease:diagnose.entrySet()) {
+            System.out.println(disease.getKey()+"\t"+disease.getValue());
         }
-        System.out.println(quezhenDiagno);
     }
 }

+ 20 - 9
graph/src/main/java/org/diagbot/graph/Diagnose/DiagnoseProcess.java

@@ -1,18 +1,16 @@
 package org.diagbot.graph.Diagnose;
 
+import javafx.scene.effect.SepiaTone;
 import org.diagbot.graph.jdbc.DriverManager;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.neo4j.driver.v1.*;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public class DiagnoseProcess {
     PropertiesUtil propertiesUtil = new PropertiesUtil("bolt.properties");
     protected Map<String,String> getDiagnose(String ...filds) throws Exception {
-        Map<String,String> quezhenDiagnose = new HashMap<>();
+        Map<String,String> quezhenDiagnose = new LinkedHashMap<>();
         List<String> startList = new ArrayList<>();
         List<String> newList = new ArrayList<>();
         for (String fild:filds) {
@@ -27,7 +25,7 @@ public class DiagnoseProcess {
         String searchJinyici = propertiesUtil.getProperty("searchJinyici");
         String fildList = searchJinyici.replace("fildList", startList.toString());
         query = fildList;
-        System.out.println(query);
+//        System.out.println("查找近义词语句:"+query+"\n");
         run = session.run(query);
         while (run.hasNext()){
             Record next = run.next();
@@ -36,11 +34,13 @@ public class DiagnoseProcess {
             startList.remove(c);
             startList.add(d);
         }
-        System.out.println(startList);
         newList.addAll(startList);
+        int i =0;
         //第二步查找能推诊断
         while (newList.size()>0){
+            i++;
             query = propertiesUtil.getProperty("searchCondition").replace("newList",newList.toString()).replace("fildList",startList.toString());
+//            System.out.println("第"+i+"个:"+query+"\n");
             run = session.run(query);
             newList.clear();
             while (run.hasNext()){
@@ -56,12 +56,23 @@ public class DiagnoseProcess {
         }
         //第三步查找确诊
         query = propertiesUtil.getProperty("searchQuezhen").replace("fildList",startList.toString());
-        System.out.println(query);
+//        System.out.println(query);
         run = session.run(query);
+        Set<String> dis = new LinkedHashSet<>();
         while (run.hasNext()){
             Record next = run.next();
             String quezhenName = next.get("name").toString().replace("\"","");
-            quezhenDiagnose.put(quezhenName,"确诊");
+            String conditionType = next.get("relationType").toString().replace("\"","");
+            if("确诊".equals(conditionType)){
+                dis.add(quezhenName);
+            }else if("拟诊".equals(conditionType)){
+                dis.add(quezhenName);
+            }
+            for (String dise:dis
+                 ) {
+               quezhenDiagnose.put(dise,"疑似诊断");
+            }
+
         }
         session.close();
         driver.close();

+ 10 - 6
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -639,12 +639,12 @@ public class Neo4jAPI {
      * @return
      */
     public Map<String, String> getCondition(String[] keys) {
-        HashMap<String, String> conditionMap = new HashMap<>();
+        Map<String, String> conditionMap = new LinkedHashMap<>();
         Map<String, String> diseaseCondition = new LinkedHashMap<>();
         List<String> newList = new ArrayList<>();
         ArrayList<String> fildList = new ArrayList<>();
         //输出确诊集合
-        Set<String> quezhen = new HashSet<>();
+        Set<String> quezhen = new LinkedHashSet<>();
         for (String fild : keys) {
             fildList.add("\"" + fild.trim() + "\"");
         }
@@ -691,7 +691,7 @@ public class Neo4jAPI {
             }
 
             query = "with " + fildList + " as data unwind data as row\n" +
-                    "match (n)-[r:确诊]->(m)\n" +
+                    "match (n)-[r:确诊|:拟诊]->(m)\n" +
                     "where n.name=row\n" +
                     "with distinct m,r\n" +
                     "return m.name as name, labels(m)[0] as label,type(r) as relationType";
@@ -700,13 +700,17 @@ public class Neo4jAPI {
             while (result.hasNext()) {
                 Record record = result.next();
                 String quezhenName = record.get("name").toString();
-                quezhen.add(quezhenName);
+                String conditionType = record.get("relationType").toString().replace("\"","");
+                if("确诊".equals(conditionType)){
+                    quezhen.add(quezhenName);
+                }else if("拟诊".equals(conditionType)){
+                    quezhen.add(quezhenName);
+                }
             }
             for (String qu : quezhen) {
-                String dis_name = qu.replaceAll("\"", "");
                 Map<String, String> dis_res = new HashMap<>();
                 dis_res.put("确诊", "");
-                diseaseCondition.put(dis_name, JSON.toJSONString(dis_res));
+                diseaseCondition.put(qu, JSON.toJSONString(dis_res));
             }
 
         } catch (Exception e) {

+ 2 - 2
graph/src/main/resources/bolt.properties

@@ -44,9 +44,9 @@ with m,fildList as data unwind data as row\n \
 match (n)-[r:\u8BCA\u65AD\u4F9D\u636E]->(m)\n \
 where n.name= row\n \
 return m.name as condition, count(distinct r)>=m.path as jundgement, labels(m)[0] as label
-#\u67E5\u627E\u786E\u8BCA\u7684\u8BED\u53E5
+#\u67E5\u627E\u786E\u8BCA,\u62DF\u8BCA\u7684\u8BED\u53E5
 searchQuezhen=with fildList  as data unwind data as row\n \
-match (n)-[r:\u786E\u8BCA]->(m)\n \
+match (n)-[r:\u786E\u8BCA|:\u62DF\u8BCA]->(m)\n \
 where n.name=row\n \
 with distinct m,r\n \
 return m.name as name, labels(m)[0] as label,type(r) as relationType