Parcourir la source

新结构参与诊断推理

kongwz il y a 6 ans
Parent
commit
30f5a22ad0

+ 5 - 8
graph/src/main/java/org/diagbot/graph/Diagnose/DiagnoseMain.java

@@ -10,17 +10,14 @@ 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抗体阳性",
-//                "侵袭性骨破坏","右上腹痛","向右背部放射","墨菲斯征阳性","白细胞增多和核左移","不洁饮食","胆囊内有强回声团");
-//         Map<String, String> diagnose = new DiagnoseProcess().getDiagnose(
-//                "侵袭性骨破坏","右上腹痛","向右背部放射","墨菲斯征阳性","白细胞增多","不洁饮食","胆囊内有强回声团");
 //        Map<String, String> diagnose = new DiagnoseProcess().getDiagnose(
-//                "上腹痛","墨菲斯征阳性","白细胞增多","不洁饮食","胆囊内有强回声团");
+//                "咽痛","鼻塞","乏力","淋巴结肿大","扁桃体肿大","上腹痛","墨菲斯征阳性","白细胞增多","不洁饮食","胆囊内有强回声团","近端指间关节炎","足关节炎","对称性关节肿胀",
+//                "晨僵≥30分钟","类风湿因子阳性","抗CCP抗体阳性","胸腔积液","呼吸音减弱","发热","胸痛","呼吸困难","咳嗽","听力下降","传导性耳聋","白细胞计数(WBC)升高","鼓膜穿孔",
+//                "耳鸣","视力下降","EB病毒早期抗原(EA-IgA)升高","咽部充血");
         Map<String, String> diagnose = new DiagnoseProcess().getDiagnose(
-                "咽痛","鼻塞","乏力","淋巴结肿大","扁桃体肿大","上腹痛","墨菲斯征阳性","白细胞增多","不洁饮食","胆囊内有强回声团","近端指间关节炎","足关节炎","对称性关节肿胀",
-                "晨僵≥30分钟","类风湿因子阳性","抗CCP抗体阳性","胸腔积液","呼吸音减弱","发热","胸痛","呼吸困难","咳嗽");
+                  "耳鸣","视力下降","EB病毒早期抗原(EA-IgA)升高","咽部充血","暴饮暴食","右上腹痛","胸痛", "放射", "左肩", "胸闷", "第二心音","逆分裂","高血压");
 //        Map<String, String> diagnose = new DiagnoseProcess().getDiagnose(
-//              "耳鸣","视力下降","EB病毒早期抗原(EA-IgA)升高","咽部充血");
+//                "听力下降","传导性耳聋","白细胞计数(WBC)升高","鼓膜穿孔");
         for (Map.Entry<String,String> disease:diagnose.entrySet()) {
             System.out.println(disease.getKey()+"\t"+disease.getValue());
         }

+ 13 - 6
graph/src/main/java/org/diagbot/graph/Diagnose/DiagnoseProcess.java

@@ -21,11 +21,20 @@ public class DiagnoseProcess {
         //获取driver和session
         Driver driver = DriverManager.newDrive("192.168.2.232","neo4j","root");
         Session session = driver.session(AccessMode.READ);
+        //第一步查询是否有组合的词
+        query = propertiesUtil.getProperty("searchCollection").replace("fildList",startList.toString());
+        run = session.run(query);
+        while (run.hasNext()){
+            Record next = run.next();
+            String jundgement = next.get("jundgement").toString();
+            String standName = next.get("standName").toString();
+            if ("TRUE".equals(jundgement)){
+                startList.add(standName);
+            }
+        }
+
         //第一步查找近义词
-//        String searchJinyici = propertiesUtil.getProperty("searchJinyici");
-//        String fildList = searchJinyici.replace("fildList", startList.toString());
-        query = propertiesUtil.getProperty("serchCollect").replace("fildList",startList.toString());;
-//        System.out.println("查找近义词语句:"+query+"\n");
+        query = propertiesUtil.getProperty("serchCollect").replace("fildList",startList.toString());
         run = session.run(query);
         while (run.hasNext()){
             Record record = run.next();
@@ -59,7 +68,6 @@ public class DiagnoseProcess {
         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()){
@@ -75,7 +83,6 @@ public class DiagnoseProcess {
         }
         //第三步查找确诊
         query = propertiesUtil.getProperty("searchQuezhen").replace("fildList",startList.toString());
-//        System.out.println(query);
         run = session.run(query);
         Set<String> dis = new LinkedHashSet<>();
         while (run.hasNext()){

+ 23 - 31
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -653,6 +653,17 @@ public class Neo4jAPI {
         String query = "";
         try {
             session = driver.session(AccessMode.WRITE);
+            //第一步查询是否有组合的词
+            query = propertiesUtil.getProperty("searchCollection").replace("fildList",fildList.toString());
+            result = session.run(query);
+            while (result.hasNext()){
+                Record next = result.next();
+                String jundgement = next.get("jundgement").toString();
+                String standName = next.get("standName").toString();
+                if ("TRUE".equals(jundgement)){
+                    fildList.add(standName);
+                }
+            }
             query = propertiesUtil.getProperty("serchCollect").replace("fildList", fildList.toString());
             result = session.run(query);
             while (result.hasNext()) {
@@ -669,35 +680,22 @@ public class Neo4jAPI {
                         fildList.remove(fild);
                         fildList.add(js);
                     }
-
+                }else {
+                    fildList.add(fild);
+                    query = "match(l)-[r:近义词]->(h) where l.name="+fild+" return h.name as js";
+                    StatementResult run1 = session.run(query);
+                    while (run1.hasNext()){
+                        Record next = run1.next();
+                        String js = next.get("js").toString();
+                        fildList.add(js);
+                    }
                 }
             }
-/*            //判断是否有近义词
-            query = "match (l)-[r:近义词]->(m)\n" +
-                    "where l.name in  " + fildList + "\n" +
-                    "return l.name as zi,type(r),m.name as fu";
-            result = session.run(query);
-            while (result.hasNext()) {
-                Record record = result.next();
-                String c = record.get("zi").toString();
-                String d = record.get("fu").toString();
-                fildList.remove(c);
-                fildList.add(d);
-            }*/
-            //            System.out.println("参与计算的词:"+fildList);
             newList.addAll(fildList);
             int i = 0;
             while (newList.size() > 0) {
                 i++;
-                query = "with " + newList + " as data unwind data as row\n" +
-                        "match (l)-[r:诊断依据]->(m)\n" +
-                        "where l.name= row\n" +
-                        "with m," + fildList + " as data unwind data as row\n" +
-                        "match (n)-[r:诊断依据]->(m)\n" +
-                        "where n.name= row\n" +
-                        "return m.name as condition, count(distinct r)>=m.path as jundgement, labels(m)[0] as label";
-                //                System.out.println("第"+i+"次查询:");
-                //                System.out.println(query);
+                query = propertiesUtil.getProperty("searchCondition").replace("newList",newList.toString()).replace("fildList",fildList.toString());
                 result = session.run(query);
                 newList.clear();
                 while (result.hasNext()) {
@@ -711,12 +709,8 @@ public class Neo4jAPI {
                     }
                 }
             }
-
-            query = "with " + fildList + " as data unwind data as row\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";
+            //第三步查找确诊
+            query = propertiesUtil.getProperty("searchQuezhen").replace("fildList",fildList.toString());
             result = session.run(query);
             while (result.hasNext()) {
                 Record record = result.next();
@@ -733,10 +727,8 @@ public class Neo4jAPI {
                 dis_res.put("确诊", "");
                 diseaseCondition.put(qu, JSON.toJSONString(dis_res));
             }
-
         } catch (Exception e) {
             e.printStackTrace();
-
         } finally {
             CloseSession(session);
             return diseaseCondition;

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

@@ -20,11 +20,11 @@ bolt112.user=neo4j
 bolt112.passwd=123456
 
 #\u63A8\u786E\u8BCA\u5904\u7406sql
-#\u67E5\u627E\u8FD1\u4E49\u8BCD
-searchJinyici=with fildList as data  unwind data as  fild  \n \
-match(l)-[r:\u8FD1\u4E49\u8BCD]->(h) \n \
-where l.name=fild \n \
-return l.name as zi,labels(l)[0] as jin,h.name as fu,labels(h)[0] as da
+#\u67E5\u627E\u662F\u5426\u6709\u7EC4\u5408\u7684\u8BCD
+searchCollection=with fildList as data unwind data as row \n \
+match (n)-[r:\u5C5E\u4E8E]->(m)-[r1:\u7EC4\u5408]->(k) \n \
+where n.name= row \n \
+return m.name as condition, count(distinct r)>=m.path as jundgement, labels(m)[0] as label,k.name as standName
 #\u67E5\u627E\u8FD1\u4E49\u8BCD\u7CBE\u534E\u7248
 serchCollect=match (n)-[r:\u8BCA\u65AD\u4F9D\u636E|:\u8FD1\u4E49\u8BCD]->(e) where n.name in fildList return n.name as fild,collect(distinct type(r)) as typeCollect
 #\u67E5\u627E\u80FD\u63A8\u51FA\u8BCA\u65AD\u4F9D\u636E\u7684\u8BCD

+ 7 - 0
push-web/src/main/java/org/diagbot/push/controller/GraphController.java

@@ -21,6 +21,13 @@ import java.util.Map;
 @Controller
 @RequestMapping("/graph")
 public class GraphController extends BaseController {
+    {
+        listView = "/pages/graph/list.html";
+    }
+    @RequestMapping({"/index"})
+    public String index() {
+        return listView;
+    }
     /**
      * 推送诊断,治疗
      * @param request