kwzbigdata hace 5 años
padre
commit
904005d860

+ 6 - 0
common-push/pom.xml

@@ -17,6 +17,12 @@
     <url>http://www.example.com</url>
 
     <dependencies>
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>graph</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 85 - 0
common-push/src/main/java/org/diagbot/common/push/filter/ClassifyDiag.java

@@ -0,0 +1,85 @@
+package org.diagbot.common.push.filter;
+
+import com.alibaba.fastjson.JSONObject;
+import org.diagbot.common.work.FeatureRate;
+import org.diagbot.common.work.ResponseData;
+import org.diagbot.graph.util.CacheUtil;
+
+import java.util.*;
+
+/**
+ * Created by kwz on 2019/8/5.
+ */
+public class ClassifyDiag {
+    public static void main(String[] args) {
+        Map<String, String> diagClassifyCache = CacheUtil.getDiagClassifyCache();
+        for(Map.Entry<String,String>d:diagClassifyCache.entrySet()){
+            System.out.println(d.getKey()+"\t"+d.getValue());
+        }
+    }
+
+    /**
+     * 根据诊断依据规则过滤诊断
+     * @param graphResponseData 把过滤的诊断包装在这个对象里
+     * @param graphFeatures 过滤前的诊断结果
+     * @return 返回过滤后的诊断结果
+     */
+    public List<FeatureRate> filterDiag(ResponseData graphResponseData,List<FeatureRate> graphFeatures){
+        //根据诊断依据规则过滤掉的诊断列表
+        List<String> excludeDiag = graphResponseData.getExcludeDiag();
+        //将需要排除的诊断从列表中删除
+        List<FeatureRate> updateFeatures = new ArrayList<>();
+        for(int j = 0;j<graphFeatures.size();j++){
+            if(excludeDiag.indexOf(graphFeatures.get(j).getFeatureName()) == -1){
+                updateFeatures.add(graphFeatures.get(j));
+            }
+        }
+        return updateFeatures;
+    }
+
+    //get diagClassifyCache
+    Map<String, String> diagClassifyCache = CacheUtil.getDiagClassifyCache();
+
+    /**
+     * 诊断归一
+     * @param updateFeatures 归一前的诊断
+     * @return 归一后的诊断
+     */
+    public List<FeatureRate> diagClassify(List<FeatureRate> updateFeatures){
+        List<FeatureRate> finalDiagList = new LinkedList<>();//最终返回
+        List<String> highDiagList = new LinkedList<>();//警惕集合
+        List<String> queDiagList = new LinkedList<>();//确诊集合
+        List<String> bigDiagList = new LinkedList<>();//可能诊断集合
+        if(updateFeatures != null && updateFeatures.size()>0){
+            for(FeatureRate featureRate:updateFeatures){
+                String featureName = featureRate.getFeatureName();
+                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 {
+                        queDiagList.add(featureName);
+                    }
+                }else {
+                    bigDiagList.add(featureName);
+                }
+            }
+        }
+        //先把警惕的加进去
+        if(highDiagList.size()>0){
+            for(int j =0;j<updateFeatures.size();j++){
+                if(highDiagList.indexOf(updateFeatures.get(j).getFeatureName()) == 1){
+                    finalDiagList.add(updateFeatures.get(j));
+                }
+            }
+        }
+        //归一确诊
+
+
+        return finalDiagList;
+
+    }
+}

+ 34 - 0
graph/src/main/java/org/diagbot/graph/util/CacheUtil.java

@@ -1,7 +1,9 @@
 package org.diagbot.graph.util;
 
+import org.apache.commons.lang3.StringUtils;
 import org.diagbot.nlp.participle.cfg.Configuration;
 import org.diagbot.nlp.participle.cfg.DefaultConfig;
+import org.neo4j.cypher.internal.frontend.v2_3.ast.Foreach;
 
 import java.util.HashMap;
 import java.util.List;
@@ -12,6 +14,38 @@ public class CacheUtil {
     public static Map<String,Map<String,String>> sexAgeMap=null;
     public static Map<String,String> vitalMap=null;
     public static Map<String,String> disgSortMap=null;
+    public static Map<String,String> diagClassifyMap = null;
+    //疾病归一解析,获取缓存
+    public static Map<String,String> getDiagClassifyCache(){
+        String path = "diagClassify.dict";
+        Configuration configuration = new DefaultConfig();
+        if(diagClassifyMap == null){
+            diagClassifyMap = new HashMap<>();
+            List<String> contentList = configuration.readFileContents(path);
+            String diagName =null,bigdiagName=null;
+            String[] diagSort =null;
+            for (String s:contentList) {
+                String[] splits = s.split("\\|");
+                if(splits.length >= 2){
+                    diagName = splits[0].trim();//疾病本体
+                    bigdiagName = splits[1].trim();//疾病大类
+                    if(splits.length == 2){
+                        diagClassifyMap.put(bigdiagName,diagName);
+                    }else if(splits.length == 3){
+                        diagSort = splits[2].split("\\、");
+                        for (String dis:diagSort) {
+                            if(StringUtils.isNotEmpty(dis.trim())){
+                                diagClassifyMap.put(dis.trim(),bigdiagName);
+                            }
+                        }
+                    }
+
+                }
+            }
+        }
+        return diagClassifyMap;
+    }
+
     public static Map<String,String> getDiagSortCache(){
         String path = "diagSort.dict";
         Configuration configuration = new DefaultConfig();

+ 20 - 0
graph/src/main/resources/diagClassify.dict

@@ -0,0 +1,20 @@
+de3O9146cmVps3llnokVH/VEHVNVSAf28NI2uzoIb1z+V0UU9rhi8c3bJ7ybsBJaPe8Dwi16GCWsj2KV4MFGvM2XHsPM5/7vsdnMld18khWHuidZqDP+S0Wp2ks4E38XyKOlDzIs7nh+60vzmgZck5I2f4ckLQ9q42uDOadsTHSQBwvCoRnyrEpgEZ36UZf7
+de3O9146cmXZ5vyqQrfGtukh+7ztl8Scn6MXF+Z9t7fx4lhYgvw9OMPL84gmGlXsfs16bsXBopowp2rr+8BdkLp8TLAofH0HdJu/Z+f8mccjaiE1wLfZ+x8Giqn81mC6mdV44oVYWXs9HDN2zZEu56/KAMhd1mfFgjLDcveXrBQ=
+RjlHunEZKP2G6qnHcET7YTx6dEKKWoowYO2o3LGxGdY23pVlp5apnLVBc+kE13yRZTyV0HA939d+2CGuyJ4UnIpLC2SKAD9H8AYG2/+cSQ24Sb7MZ3N6O5RkShZvNXKYmtLrLqmUWy/SL0jCg7w0/lscz3JraR1+3VaP952Z3DTcLM1uKWDR6A==
+RjlHunEZKP02Kkkiv0cRsiGHkf3LOZUbZI/MOgENdU2bEOW86axfL7to9BzcCtKahNoLIiRKQB8VPtQeE0un6in3rGXqQ9cgmDhL+xvjqaO3QuGz77WkKFKzqC2ioHZHcJFNOdGnR2UwvUHjuaLnow==
+RjlHunEZKP1GqRWsmFqF81oMQ9o6jaGMqgbmc8d/drwHpeF8StNMmLqkgcaEPLA2NmRR3v2oqUiIlPb4AjSslFRhE/a8+rwPeiS9ZqV5MvouV2aR/RfOvAK52fy6HUOW
+RjlHunEZKP1f+Xw9ovIrqcMr3qlunGaOWLjpsZqBN36EAj7YjHwO5qdyxmZIFYPUaZnjn25t1FT1SMSdWfQ/gVv+iloFmS1z3Rp/oMp3XHix/kIn2HDUIvHEcMY6pkofs4F4is8JibLcSDgtAdzlN3bdEINoILZYreaFev21BvOHzlGaNyDwBE5apQIQsswN
+E0zofMTBmeiphs0iC7vrYX7YIa7InhScmITlQMM4zbJKYBGd+lGX+w==
+E0zofMTBmehahrKxgKIgQX7YIa7InhScmITlQMM4zbJKYBGd+lGX+w==
+tQqyk3JtpQSNfLuFP5mqIW/uRY6g7LFfAGUEiTffJOyEpbnjoZrXUYLNngz5p3CVTdIEyhnewGKCzZ4M+adwlfqfhjFiqMCHN8t1HUmMTUA=
+tQqyk3JtpQSrwHa0tVAPXG/uRY6g7LFfwzwjLiQhaQ0=
+QY8HRySr7Iwnp75iBJ/VjxOIU+zd8rQ7cYUk/dpHC/JKYBGd+lGX+w==
+QY8HRySr7Iwnp75iBJ/VjxOIU+zd8rQ7tWx+IEiJ7o0H1mThJ7gSoQ==
+QY8HRySr7Iwnp75iBJ/VjxOIU+zd8rQ7Tdp+mfnukBbq1KNjixCbjqzLO3h9qz3/
+QY8HRySr7Iwnp75iBJ/Vj6EartQd+Ruay09JTFOMHIhDrVTSChjG5A==
+QY8HRySr7Iwnp75iBJ/Vj6EartQd+RuaGIuDViimEJ0H1mThJ7gSoQ==
+QY8HRySr7Iwnp75iBJ/Vj1JJXUSpiAOlcH7SKfLT/pRKYBGd+lGX+w==
+QY8HRySr7Iwnp75iBJ/Vj+3XaTjV4VFOlsI/pFsgIb0u2WJVxeidQQ==
+8+/D6NypjddUIm92l3iN1Uuc/0bs8CvPrxAz4u4zi3IpsfANTRsS4dsQ+5pETXBQ
+8+/D6NypjddUIm92l3iN1RMRyZFpCIgsrxAz4u4zi3IpsfANTRsS4dsQ+5pETXBQ
+8+/D6NypjddUIm92l3iN1YWxPHbyuaEKIuydduvnnjTfijPDjIJtLyQOE5CeChrCuipopyTOKsSI5/HVtv3JTB6mtWVDEwMM17fWhB9R3z3h5IIo8JsBGQ==

+ 32 - 1
graph/src/test/java/org/diagbot/graph/CacheFile.java

@@ -11,7 +11,38 @@ import java.sql.Statement;
 public class CacheFile {
     public static void main(String[] args) {
         CacheFile cacheFile = new CacheFile();
-        cacheFile.diagSort();
+        cacheFile.diagClassifyMaping();
+
+    }
+
+    //疾病分类归一
+    public void diagClassifyMaping(){
+        MysqlJdbc nlpJdbc = new MysqlJdbc("root", "diagbot@20180822", "jdbc:mysql://192.168.2.235:3306/bigdata-web?useUnicode=true&characterEncoding=UTF-8");
+        Connection conn = nlpJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            EncrypDES encrypDES = new EncrypDES();//加密对象
+            String path = this.getClass().getClassLoader().getResource("").getPath();
+            path = path.substring(0, path.indexOf("target"));
+            String sql = "SELECT g.diag_name,g.diag_bigName_classify,g.diag_subName_classify FROM `doc_bigsub_classify_diag` g ";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            FileWriter fw = new FileWriter(path + "src/main/resources/diagClassify.dict");
+            String  r1 ,r2,r3;
+            while (rs.next()) {
+                r1 = rs.getString(1);//本类名
+                r2 = rs.getString(2);//大类名
+                r3 = rs.getString(3);//小类名
+                fw.write(encrypDES.encrytor(r1+ "|" + r2+ "|" + r3));
+                fw.write("\n");
+            }
+            fw.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            nlpJdbc.close(rs, st, conn);
+        }
     }
     //诊断大小类对应
     public void diagSort(){

+ 6 - 0
push-web/pom.xml

@@ -49,6 +49,12 @@
 			<version>1.0.0</version>
 		</dependency>
 
+		<dependency>
+			<groupId>org.diagbot</groupId>
+			<artifactId>common-push</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+
 		<dependency>
 			<groupId>org.diagbot</groupId>
 			<artifactId>bigdata-web</artifactId>

+ 4 - 0
push-web/src/main/java/org/diagbot/push/controller/AlgorithmController.java

@@ -6,6 +6,7 @@ import org.diagbot.common.javabean.Drugs;
 import org.diagbot.common.javabean.Filnlly;
 import org.diagbot.common.javabean.MedicalIndication;
 import org.diagbot.common.javabean.Medicition;
+import org.diagbot.common.push.filter.ClassifyDiag;
 import org.diagbot.common.work.FeatureRate;
 import org.diagbot.common.work.ResponseData;
 import org.diagbot.common.work.SearchData;
@@ -144,6 +145,9 @@ public class AlgorithmController extends BaseController {
             List<FeatureRate> graphFeatureRates = graphResponseData.getDis();
             graphFeatureRates.addAll(disFeatureRates);
             //把所有的诊断拿出来经过过滤层过滤
+            ClassifyDiag classifyDiag = new ClassifyDiag();
+            List<FeatureRate> upfes = classifyDiag.filterDiag(graphResponseData, graphFeatureRates);
+            List<FeatureRate> classifyFeature = classifyDiag.diagClassify(upfes);
             FilterSortDiag filterSortDiag = new FilterSortDiag();
             List<FeatureRate> filterDiagList = filterSortDiag.filterDiag(graphResponseData, graphFeatureRates);
             List<FeatureRate> filterSortDiagList = filterSortDiag.sortDiag(filterDiagList);