添加测试类

dev_2.1.0
xueqingkun 11 months ago
parent da52d5ced4
commit 3e1a47d947

@ -2,6 +2,7 @@ package com.supervision;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
@ -14,8 +15,10 @@ import cn.hutool.json.JSONUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.supervision.model.AskPatientAnswer;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.CommonDic;
import com.supervision.service.AskPatientAnswerService;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.service.CommonDicService;
import lombok.extern.slf4j.Slf4j;
@ -25,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.security.PublicKey;
import java.util.*;
import java.util.stream.Collectors;
@ -406,6 +410,47 @@ public class VecTest {
saveVec(vecData);
}
@Test
public void initDescVecData(){
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
// load vec data
List<Map<String, Object>> vecData = questionLibraries.stream().map(library -> {
Map<String, Object> map = new HashMap<>();
map.put("questionCode", library.getId());
map.put("questionList", CollUtil.newArrayList(library.getDescription()));
return map;
}).collect(Collectors.toList());
saveVec(vecData);
}
@Test
public void initMedicalVecData(){
String medicalId = "1";
List<AskPatientAnswer> answerList = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalId).list();
Map<String, AskPatientAnswer> answerMap = answerList.stream().collect(Collectors.toMap(AskPatientAnswer::getLibraryQuestionId, v -> v));
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
List<Map<String, Object>> result = new ArrayList<>();
for (AskTemplateQuestionLibrary questionLibrary : questionLibraries) {
if (!questionLibrary.getDescription().contains(questionLibrary.getDescription())){
questionLibrary.getQuestion().add(questionLibrary.getDescription());
}
AskPatientAnswer askPatientAnswer = answerMap.get(questionLibrary.getId());
if (ObjectUtil.isEmpty(askPatientAnswer)){
log.info("问题id:{} desc:{},未设置回复答案,跳过",questionLibrary.getId(),questionLibrary.getDescription());
continue;
}
Map<String, Object> map = new HashMap<>();
map.put("questionCode", questionLibrary.getId());
map.put("questionList", questionLibrary.getQuestion());
result.add(map);
}
saveVec(result);
}
private void saveVec(List<Map<String, Object>> List){
HttpRequest request = HttpRequest.post(BASE_URL + "/updateDatabase")
@ -455,4 +500,107 @@ public class VecTest {
return null;
}
// todo: 找出相似度大于0.5的标准问的数据
@Test
public void standardQuestionMatch(){
// initDescVecData() first step
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
List<CommonDic> commonDics = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list();
Map<Long, CommonDic> dicMap = commonDics.stream().collect(Collectors.toMap(CommonDic::getId, v -> v));
Map<String, AskTemplateQuestionLibrary> libraryMap = questionLibraries.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, library -> library));
List<Map<String, Object>> result = new ArrayList<>();
for (AskTemplateQuestionLibrary questionLibrary : questionLibraries) {
String description = questionLibrary.getDescription();
List<Map<String, Object>> maps = questionMatch(description);
// 只获取前四条数据
if (CollUtil.isEmpty(maps)){
log.warn("questionMatch:问题:{}没有匹配到结果", description);
continue;
}
if (maps.size() > 3){
// 截取前四条数据
maps = maps.subList(0, 4);
}
for (Map<String, Object> matchMap : maps) {
String targetId = MapUtil.getStr(matchMap, "matchQuestionCode");
String matchQuestion = MapUtil.getStr(matchMap, "matchQuestion");
String matchScore = MapUtil.getStr(matchMap, "matchScore");
if (StrUtil.equals(targetId,questionLibrary.getId())){
log.info("匹配到自己跳过该条数据id:{}",targetId);
continue;
}
Map<String, Object> tmp = new HashMap<>();
tmp.put("sourceId",questionLibrary.getId());
tmp.put("sourceDesc",description);
String sourceNamePath = dicMap.get(questionLibrary.getDictId()).getNameZhPath();
tmp.put("sourceDicPath",sourceNamePath);
tmp.put("targetId",targetId);
tmp.put("targetDesc",matchQuestion);
tmp.put("matchScore",matchScore);
AskTemplateQuestionLibrary library = libraryMap.get(targetId);
tmp.put("targetDicPath",dicMap.get(library.getDictId()).getNameZhPath());
result.add(tmp);
}
}
String filePath = "F:\\tmp\\1\\问题库问题对比-标准问.xlsx";
ExcelWriter writer = ExcelUtil.getWriter(filePath, "标准问匹配");
writer.setDefaultRowHeight(18);
writer.addHeaderAlias("sourceId", "源问题id");
writer.addHeaderAlias("sourceDesc", "源问题");
writer.addHeaderAlias("sourceDicPath", "源分类");
writer.addHeaderAlias("targetId", "目标问题");
writer.addHeaderAlias("targetDesc", "目标问题");
writer.addHeaderAlias("targetDicPath", "目标分类");
writer.addHeaderAlias("matchScore", "相似度");
writer.write(result,true);
writer.close();
}
@Autowired
private AskPatientAnswerService askPatientAnswerService;
@Test
public void medicalQA(){
String medicalId = "1";
List<AskPatientAnswer> answerList = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalId).list();
Map<String, AskPatientAnswer> answerMap = answerList.stream().collect(Collectors.toMap(AskPatientAnswer::getLibraryQuestionId, v -> v));
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
List<Map<String, Object>> result = new ArrayList<>();
for (AskTemplateQuestionLibrary questionLibrary : questionLibraries) {
if (!questionLibrary.getDescription().contains(questionLibrary.getDescription())){
questionLibrary.getQuestion().add(questionLibrary.getDescription());
}
AskPatientAnswer askPatientAnswer = answerMap.get(questionLibrary.getId());
if (ObjectUtil.isEmpty(askPatientAnswer)){
log.info("问题id:{} desc:{},未设置回复答案,跳过",questionLibrary.getId(),questionLibrary.getDescription());
continue;
}
for (String question : questionLibrary.getQuestion()) {
HashMap<String, Object> map = new HashMap<>();
map.put("Q",question);
map.put("A",askPatientAnswer.getAnswer());
result.add(map);
}
}
String filePath = "F:\\tmp\\1\\病历问答.xlsx";
ExcelWriter writer = ExcelUtil.getWriter(filePath);
writer.addHeaderAlias("Q", "Q");
writer.addHeaderAlias("A", "A");
writer.write(result,false);
writer.close();
}
}

Loading…
Cancel
Save