Explorar el Código

症状英文名、药品剂量规格

SGTY hace 4 meses
padre
commit
b1de39bd87

+ 107 - 5
src/test/java/com/qizhen/healsphere/DrugTest10.java

@@ -27,6 +27,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.io.*;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
@@ -39,7 +40,7 @@ public class DrugTest10 {
     @Autowired
     EntityService entityService;
     private static int maxCount= -1;
-    private static String drugExcelPath = "C:\\Users\\dell\\Desktop\\图谱\\药品说明书.xlsx";
+    private static String drugExcelPath = "C:\\Users\\17664\\Desktop\\药品说明书.xlsx";
     static HSSFWorkbook workbook;
     static String startLabel = "药品";
     @Test
@@ -71,9 +72,6 @@ public class DrugTest10 {
                         if(StringUtils.isEmpty(name)){
                             continue;
                         }
-                        if("商品名称".equals(property)){
-                            property = "商品名";
-                        }
                         BaseEntity endEntity =  createNoExists(startLabel+property, name);
                         Long endId = endEntity.getId();
                         RelationshipVO relationshipVO = new RelationshipVO();
@@ -94,6 +92,109 @@ public class DrugTest10 {
         }
     }
 
+    /**
+     * 剂型、规格
+     * @throws Exception
+     */
+    @Test
+    public void writeNeo4jFromExcel() throws Exception {
+        IOUtils.setByteArrayMaxOverride(369167224);
+        workbook = new HSSFWorkbook();//这里也可以设置sheet的Name
+        InputStream drugFis = new FileInputStream(drugExcelPath);
+        Workbook drugWorkbook = new XSSFWorkbook(drugFis);
+        Sheet drugSheet = drugWorkbook.getSheetAt(0);
+        List<String> propertys = Arrays.asList("剂型", "规格");
+        for(String property:propertys) {
+            List<Knowlege> knowleges = saveExecl(drugSheet, property);
+
+            for (Knowlege temp : knowleges) {
+                String value = temp.getValue();
+                if (StringUtils.isBlank(value)) {
+                    continue;
+                }
+                try {
+                    JSONArray jsonArray = JSONArray.parseArray(value);
+                    BaseEntity startEntity = createNoExists(startLabel, temp.getEntity());
+                    long startId = startEntity.getId();
+                    List<RelationshipVO> relationshipList = new ArrayList<>();
+                    for (int i = 0; i < jsonArray.size(); i++) {
+                        String name = jsonArray.getString(i);
+                        if (StringUtils.isEmpty(name)) {
+                            continue;
+                        }
+                        BaseEntity endEntity = createNoExists(startLabel + property, name);
+                        Long endId = endEntity.getId();
+                        RelationshipVO relationshipVO = new RelationshipVO();
+                        relationshipVO.setStartId(startId);
+                        relationshipVO.setEndId(endId);
+                        relationshipVO.setStartLabel(startLabel);
+                        relationshipVO.setEndLabel(startLabel + property);
+                        relationshipVO.setRelationshipType(startLabel + "相关" + property);
+                        relationshipList.add(relationshipVO);
+                    }
+                    if (!CollectionUtils.isEmpty(relationshipList)) {
+                        System.out.println(relationshipService.createRelationship(relationshipList));
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+    }
+
+    private List<Knowlege> saveExecl(Sheet drugSheet,String property){
+        HSSFSheet sheet = workbook.createSheet(property);
+        int curCount = 0;
+        List<Knowlege> result = new ArrayList<>();
+        for (int rowNum = 1; rowNum <= drugSheet.getLastRowNum(); rowNum++) {
+            try {
+                Row row = drugSheet.getRow(rowNum);
+                String value;
+                if("剂型".equals(property)) {
+                    value = row.getCell(3).getStringCellValue();
+                }else if("规格".equals(property)){
+                    value = row.getCell(4).getStringCellValue();
+                }else {
+                    System.out.println(property+"不对!");
+                    break;
+                }
+                HSSFRow writeRow = sheet.createRow(curCount);
+                String name = row.getCell(2).getStringCellValue();
+                String zhaiyao = row.getCell(7).getStringCellValue();
+                if (StringUtils.isEmpty(value) || value.length()>30 || StringUtils.isEmpty(name) || name.length()>50 || StringUtils.isEmpty(zhaiyao)) {
+                    continue;
+                }
+
+                JSONArray jsonArray = new JSONArray();
+                for (String item : value.split(";")) {
+                    jsonArray.add(item);
+                }
+                value = jsonArray.toJSONString();
+                writeRow.createCell(0).setCellValue(name);
+                writeRow.createCell(1).setCellValue(value);
+
+                Knowlege knowlege = new Knowlege();
+                knowlege.setEntity(name);
+                knowlege.setProperty(property);
+
+                knowlege.setValue(value);
+
+                result.add(knowlege);
+                curCount++;
+                if (maxCount > 0) {
+                    if (curCount >= maxCount) {
+                        break;
+                    }
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+        save(property);
+        return result;
+    }
+
     private BaseEntity createNoExists(String labelName, String name) {
         BaseEntity nodeByName = entityService.findNodeByName(labelName, name);
         if(Objects.nonNull(nodeByName)){//节点不存在
@@ -113,6 +214,7 @@ public class DrugTest10 {
         Workbook drugWorkbook = new XSSFWorkbook(drugFis);
         Sheet drugSheet = drugWorkbook.getSheetAt(2);
         String[] split = propertys.split(",");
+
         for(String property:split) {
             HSSFSheet sheet = workbook.createSheet(property);
             saveExecl(property, drugSheet, accessToken, sheet);
@@ -211,7 +313,7 @@ public class DrugTest10 {
 
     private static synchronized void save(String fileName) {
         try {
-            fileName="D:\\测试文件夹\\"+fileName+System.currentTimeMillis()+".xlsx";
+            fileName="C:\\Users\\17664\\Desktop\\"+fileName+System.currentTimeMillis()+".xlsx";
             //文档输出
             FileOutputStream out = new FileOutputStream(new File(fileName));
             workbook.write(out);

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 62 - 62
src/test/java/com/qizhen/healsphere/EnglishTest.java


+ 83 - 1
src/test/java/com/qizhen/healsphere/JianchaKfTest.java

@@ -12,6 +12,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,7 +39,8 @@ public class JianchaKfTest {
     @Autowired
     EntityService entityService;
     private static int maxCount= 100;
-    private static String directoryPath  = "C:\\Users\\17664\\Desktop\\邵逸夫医院爬取数据\\检查";
+    private static String directoryPath  = "C:\\Users\\17664\\Desktop\\检查";
+    private static String urlExcelPath = "C:\\Users\\17664\\Desktop\\检查列表.xlsx";
     static HSSFWorkbook workbook;
     static String startLabel = "检验";
 
@@ -124,6 +129,83 @@ public class JianchaKfTest {
         return content.toString();
     }
 
+    private static List<Knowlege> saveExeclFromExecl(String label, String orgQuestion, String accessToken, HSSFSheet sheet) throws Exception {
+        int curCount = 0;
+        List<Knowlege> result = new ArrayList<>();
+        InputStream fis = new FileInputStream(urlExcelPath);
+        Workbook urlWorkbook = new XSSFWorkbook(fis);
+        Sheet urlSheet = urlWorkbook.getSheetAt(0);
+
+       /* for (int rowNum = 0; rowNum <= urlSheet.getLastRowNum(); rowNum++) {
+            try {
+                Row row = urlSheet.getRow(rowNum);
+                String name = row.getCell(0).getStringCellValue();
+                if (StringUtils.isEmpty(name)) {
+                    continue;
+                }
+                HSSFRow writeRow = sheet.createRow(curCount);
+                name = (name == null ? "" : name);
+                String answer ="";
+                if("检查类别".equals(property)) {
+                    answer = jianyanMap.get(name);
+                    if (StringUtils.isBlank(answer)) {
+                        if (name.length() < 3) {
+                            answer = "[]";
+                        } else {
+                            for (String temp : jianyanSplit) {
+                                if (temp.contains(name)) {
+                                    answer = temp.split("\t")[0];
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }else if("科室类别".equals(property)){
+                    answer = huayanMap.get(name);
+                    if (StringUtils.isBlank(answer)) {
+                        if (name.length() < 3) {
+                            answer = "[]";
+                        } else {
+                            for (String temp : huayanSplit) {
+                                if (temp.contains(name)) {
+                                    answer = temp.split("\t")[0];
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }else{
+                    System.out.println("property值不正确");
+                    return;
+                }
+
+                if(StringUtils.isBlank(answer)){
+                    answer = "[]";
+                }else{
+                    answer = "[\""+answer+"\"]";
+                }
+                writeRow.createCell(0).setCellValue(name);
+                writeRow.createCell(1).setCellValue(answer);
+                Knowlege knowlege = new Knowlege();
+                knowlege.setEntity(name);
+
+                knowlege.setProperty(property);
+                knowlege.setValue(answer);
+
+                result.add(knowlege);
+                curCount++;
+                if (maxCount > 0) {
+                    if (curCount >= maxCount) {
+                        break;
+                    }
+                }
+            } catch (Exception e) {
+            }
+        }*/
+        save(label);
+        return result;
+    }
+
     private static List<Knowlege> saveExecl(String property, String accessToken, HSSFSheet sheet) throws Exception {
         int curCount = 0;
         List<Knowlege> result = new ArrayList<>();

+ 23 - 7
src/test/java/com/qizhen/healsphere/ZhengzhuangDataWriteTest31.java

@@ -40,9 +40,10 @@ public class ZhengzhuangDataWriteTest31 {
     RelationshipService relationshipService;
     @Autowired
     EntityService entityService;
-    private static int maxCount= 2;
+    private static int maxCount= 30;
     private static boolean selfCheck = false;
-    private static String urlExcelPath = "C:\\Users\\17664\\Desktop\\症状列表.xlsx";
+    private static String urlExcelPath = "C:\\Users\\17664\\Desktop\\检查列表.xlsx";
+    private static String  placeholder= "#检查#";
     @Test
     public void writeNeo4j() {
         String startLabel = "症状";
@@ -66,8 +67,7 @@ public class ZhengzhuangDataWriteTest31 {
             if(endLabelSplit.length==2){
                 endLabel = endLabelSplit[1];
                 relationShip= endLabelSplit[0];
-            }
-            if(!startLabel.equals(endLabel)){
+            }else{
                 endLabel = startLabel+endLabel;
             }
             HSSFSheet sheet = workbook.createSheet(relationShip);
@@ -135,9 +135,19 @@ public class ZhengzhuangDataWriteTest31 {
     public static void main(String[] args) throws Exception {
 
         String accessToken = BaidubceUtil.getAccessToken();
-        String propertyStr = "症状的子类或分类(按性质、特点等细分)\t“#症状#”此处作为一种“症状”,“#症状#”的子类症状或子分类症状有哪些症状?(答案必须包含“#症状#”几个字!)";
 
-        saveExel(propertyStr, accessToken,"检查");
+/*        String propertyStr = "适应症\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”的“适应症”归纳后有哪些“症状”或“疾病”" +
+                ",禁忌症\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”的“禁忌症”归纳后有哪些“疾病”(所有文献资料的语义匹配度不高时,建议回答“无”;所有文献资料语义都不太明确时,建议回答“无”;若该检查项目“没有绝对禁忌”成立时,必须回答“无”;不要“相对禁忌”内容)" +
+                ",正常参考值\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”检查的“参考值”或“正常值”是什么范围或区间,或检查结果“正常”时的描述都有哪些描述" +
+                ",别名\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”的“别称”或“别名”或“英文简称”有哪些(请更加严格的遵照文献原文,不要把子类名称当做“别称”或“别名”给我)" +
+                ",不适用性别\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”检查不适用于哪个性别(你只能回答:“男性”、“女性”、“无”)" +
+                ",并发症\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”检查过程中或检查后常见的并发症有哪些疾病(所有文献资料的语义匹配度不高时,建议回答“无”;所有文献资料语义都不太明确时,建议回答“无”)" +
+                ",是否空腹\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”是否“一定”需要“空腹”时进行检查(只能回答:“是”、“否”、“不清楚”)" +
+                ",患者提醒\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”检查前和检查后,作为“患者”或“被检查者”都需要注意些什么(不要给我医生需要注意的事项,只要患者需要注意的事项)" +
+                ",禁忌人群\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”的“禁忌人群”归纳后有哪些“人群”(只要“人群”,不要“疾病”;所有文献资料的语义匹配度不高时,建议回答“无”;所有文献资料语义都不太明确时,建议回答“无”;若该检查项目“没有绝对禁忌”成立时,必须回答“无”;不要“相对禁忌”内容)" +
+                ",检查目的\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”检查的“主要目的”或“主要目标”归纳后有哪些";*/
+        String propertyStr = "不适用性别\t“"+placeholder+"”此处作为一种“辅助检查项目”,“"+placeholder+"”检查不适用于哪个性别(你只能回答:“男性”、“女性”、“无”)";
+        saveExel(propertyStr, accessToken,"辅助检查");
 
     }
 
@@ -217,7 +227,7 @@ public class ZhengzhuangDataWriteTest31 {
                         continue;
                     }
                     String quetionParty = split[1];
-                    String question = quetionParty.replaceAll("#症状#",disease)+"?";
+                    String question = quetionParty.replaceAll(placeholder,disease)+"?";
 
                     Map<String, String> result = QizhenAssistant.getChatResponse(question, QizhenAssistant.getConversationId(appId),appId);
                     String answer = result.get("answer");
@@ -245,6 +255,12 @@ public class ZhengzhuangDataWriteTest31 {
                                 "**是**^[2][4][6]^。\n" +
                                 "\n" +
                                 "输出:[\"是\"]\n\n"+
+                                "#示例3\n" +
+                                "以抽取“不适用性别”为例\n" +
+                                "文本:\n" +
+                                "**女性(此处指未婚无性生活的女性)**^[3]^。\n" +
+                                "\n" +
+                                "输出:[\"未婚无性生活的女性\"]\n\n"+
                                 "2、没有可抽取的“"+relation+"”,则返回空json数组。\n" +
                                 "\n" +
                                 "本次抽取的文本如下:\n\n";