|
@@ -10,7 +10,6 @@ import com.diagbot.dto.WordCrfDTO;
|
|
|
import com.diagbot.entity.TestwordInfo;
|
|
|
import com.diagbot.entity.TestwordRes;
|
|
|
import com.diagbot.enums.IsDeleteEnum;
|
|
|
-import com.diagbot.model.ai.AIAnalyze;
|
|
|
import com.diagbot.service.TestwordInfoService;
|
|
|
import com.diagbot.service.TestwordResService;
|
|
|
import com.diagbot.service.impl.TestwordInfoServiceImpl;
|
|
@@ -55,38 +54,39 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
TestFacade testFacade;
|
|
|
@Autowired
|
|
|
RetrievalFacade retrievalFacade;
|
|
|
- int getWordSize = 100;
|
|
|
+ @Autowired
|
|
|
+ CommonFacade commonFacade;
|
|
|
+ int getWordBatch = 100; // 每批次读取的数据行数
|
|
|
+ int standConverSize = 100000; // 标准词返回的数量
|
|
|
|
|
|
public Map getWord() {
|
|
|
Map<String, String> res = new LinkedHashMap<>();
|
|
|
Long start = System.currentTimeMillis();
|
|
|
|
|
|
- AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient);
|
|
|
-
|
|
|
// 症状标准词
|
|
|
- List<String> symptomStand = getStandWord(9, 100000).getSymptomNames();
|
|
|
+ List<String> symptomStand = getStandWord(9, standConverSize).getSymptomNames();
|
|
|
// 诊断标准词
|
|
|
- List<String> diseaseStand = getStandWord(4, 100000).getDiseaseNames().stream().map(r -> r.getName()).collect(Collectors.toList());
|
|
|
+ List<String> diseaseStand = getStandWord(4, standConverSize).getDiseaseNames().stream().map(r -> r.getName()).collect(Collectors.toList());
|
|
|
// 药品标准词
|
|
|
- List<String> drugStand = getStandWord(5, 100000).getDrugNames().stream().map(r -> r.getName()).collect(Collectors.toList());
|
|
|
+ List<String> drugStand = getStandWord(5, standConverSize).getDrugNames().stream().map(r -> r.getName()).collect(Collectors.toList());
|
|
|
// 手术标准词
|
|
|
- List<String> operateStand = getStandWord(6, 100000).getOperationNames().stream().map(r -> r.getName()).collect(Collectors.toList());
|
|
|
+ List<String> operateStand = getStandWord(6, standConverSize).getOperationNames().stream().map(r -> r.getName()).collect(Collectors.toList());
|
|
|
// 化验套餐标准词
|
|
|
- List<String> lisItem = getStandWord(1, 100000).getLisNames();
|
|
|
+ List<String> lisItem = getStandWord(1, standConverSize).getLisNames();
|
|
|
// 化验明细标准词
|
|
|
- List<String> lisDetail = getStandWord(2, 100000).getLisDetailNames().stream().map(r -> r.getUniqueName()).collect(Collectors.toList());
|
|
|
+ List<String> lisDetail = getStandWord(2, standConverSize).getLisDetailNames().stream().map(r -> r.getUniqueName()).collect(Collectors.toList());
|
|
|
// 化验标准词
|
|
|
List<String> lisStand = new ArrayList<>();
|
|
|
lisStand.addAll(lisItem);
|
|
|
lisStand.addAll(lisDetail);
|
|
|
// 查体标准词
|
|
|
- List<String> vitalStand = getStandWord(10, 100000).getOperationNames().stream().map(r -> r.getName()).collect(Collectors.toList());
|
|
|
+ List<String> vitalStand = getStandWord(10, standConverSize).getVitalNames();
|
|
|
// 辅检结果标准词
|
|
|
List<String> pacsResStand = new ArrayList<>();
|
|
|
|
|
|
// 模型处理数据
|
|
|
WordCrfDTO wordCrfDTO = new WordCrfDTO();
|
|
|
- List<TestwordInfo> testwordInfoList = this.page(new Page<>(1, getWordSize), new QueryWrapper<TestwordInfo>()
|
|
|
+ List<TestwordInfo> testwordInfoList = this.page(new Page<>(1, getWordBatch), new QueryWrapper<TestwordInfo>()
|
|
|
.eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
.eq("is_deal", 0)
|
|
|
.orderByAsc("id")).getRecords();
|
|
@@ -109,7 +109,7 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
case "主诉":
|
|
|
case "现病史":
|
|
|
searchData.setSymptom(text);
|
|
|
- aiAnalyze.aiProcess(searchData, wordCrfDTO);
|
|
|
+ wordCrfDTO = commonFacade.crf_process(searchData);
|
|
|
// 临床表现
|
|
|
CoreUtil.addSet(symptomList, CoreUtil.getName(wordCrfDTO.getPresentLabel().getClinicals()));
|
|
|
// 诊断
|
|
@@ -126,7 +126,7 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
break;
|
|
|
case "既往史":
|
|
|
searchData.setPasts(text);
|
|
|
- aiAnalyze.aiProcess(searchData, wordCrfDTO);
|
|
|
+ wordCrfDTO = commonFacade.crf_process(searchData);
|
|
|
// 诊断
|
|
|
CoreUtil.addSet(diseaseList, CoreUtil.getName(wordCrfDTO.getPastLabel().getDiags()));
|
|
|
// 药品
|
|
@@ -136,14 +136,14 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
break;
|
|
|
case "专科体格检查":
|
|
|
searchData.setVital(text);
|
|
|
- aiAnalyze.aiProcess(searchData, wordCrfDTO);
|
|
|
+ wordCrfDTO = commonFacade.crf_process(searchData);
|
|
|
// 查体
|
|
|
CoreUtil.addSet(vitalList, CoreUtil.getName(wordCrfDTO.getVitalLabel().getVitals()));
|
|
|
CoreUtil.addSet(vitalList, CoreUtil.getName(wordCrfDTO.getVitalLabel().getClinicals()));
|
|
|
break;
|
|
|
case "辅助检查":
|
|
|
searchData.setSymptom(text);
|
|
|
- aiAnalyze.aiProcess(searchData, wordCrfDTO);
|
|
|
+ wordCrfDTO = commonFacade.crf_process(searchData);
|
|
|
// 化验
|
|
|
CoreUtil.addSet(lisList, CoreUtil.getName(wordCrfDTO.getLis()));
|
|
|
CoreUtil.addSet(lisList, getDetail(wordCrfDTO.getLis()));
|
|
@@ -153,7 +153,7 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
case "初步诊断":
|
|
|
case "修正诊断":
|
|
|
searchData.setDiagString(text);
|
|
|
- aiAnalyze.aiProcess(searchData, wordCrfDTO);
|
|
|
+ wordCrfDTO = commonFacade.crf_process(searchData);
|
|
|
// 诊断
|
|
|
CoreUtil.addSet(diseaseList, CoreUtil.getName(wordCrfDTO.getDiag()));
|
|
|
break;
|
|
@@ -186,15 +186,18 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
testwordInfoService.saveOrUpdateBatch(testwordInfoList);
|
|
|
|
|
|
// 获取下一批数据
|
|
|
- testwordInfoList = this.page(new Page<>(1, getWordSize), new QueryWrapper<TestwordInfo>()
|
|
|
+ testwordInfoList = this.page(new Page<>(1, getWordBatch), new QueryWrapper<TestwordInfo>()
|
|
|
.eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
.eq("is_deal", 0)
|
|
|
.orderByAsc("id")).getRecords();
|
|
|
- break;
|
|
|
}
|
|
|
|
|
|
+ long mid = System.currentTimeMillis();
|
|
|
+ res.put("提词耗时", (mid - start) / 1000.0 + "秒");
|
|
|
+
|
|
|
+ wordConvert();
|
|
|
long end = System.currentTimeMillis();
|
|
|
- res.put("执行时间", (end - start) / 1000.0 + "秒");
|
|
|
+ res.put("同义词转换耗时", (end - mid) / 1000.0 + "秒");
|
|
|
return res;
|
|
|
}
|
|
|
|
|
@@ -263,6 +266,9 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
stringList.removeAll(setList);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 同义词转换
|
|
|
+ */
|
|
|
public void wordConvert() {
|
|
|
List<TestwordRes> testwordInfoList = testwordResService.page(new Page<>(1, 20), new QueryWrapper<TestwordRes>()
|
|
|
.eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
@@ -274,10 +280,34 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
for (TestwordRes testwordRes : testwordInfoList) {
|
|
|
StandConvertCrfVO standConvertCrfVO = new StandConvertCrfVO();
|
|
|
standConvertCrfVO.setWord(testwordRes.getWord());
|
|
|
+ standConvertCrfVO.setNumber(3);
|
|
|
switch (testwordRes.getType()) {
|
|
|
case "症状":
|
|
|
standConvertCrfVO.setWord_type("symptom");
|
|
|
- standConvertCrfVO.setNumber(3);
|
|
|
+ convertCrfVOList.add(standConvertCrfVO);
|
|
|
+ break;
|
|
|
+ case "诊断":
|
|
|
+ standConvertCrfVO.setWord_type("disease");
|
|
|
+ convertCrfVOList.add(standConvertCrfVO);
|
|
|
+ break;
|
|
|
+ case "药品":
|
|
|
+ standConvertCrfVO.setWord_type("drug");
|
|
|
+ convertCrfVOList.add(standConvertCrfVO);
|
|
|
+ break;
|
|
|
+ case "手术":
|
|
|
+ standConvertCrfVO.setWord_type("operation");
|
|
|
+ convertCrfVOList.add(standConvertCrfVO);
|
|
|
+ break;
|
|
|
+ case "查体":
|
|
|
+ standConvertCrfVO.setWord_type("vital");
|
|
|
+ convertCrfVOList.add(standConvertCrfVO);
|
|
|
+ break;
|
|
|
+ // case "辅检结果":
|
|
|
+ // standConvertCrfVO.setWord_type("pacs");
|
|
|
+ // convertCrfVOList.add(standConvertCrfVO);
|
|
|
+ // break;
|
|
|
+ case "化验":
|
|
|
+ standConvertCrfVO.setWord_type("lis");
|
|
|
convertCrfVOList.add(standConvertCrfVO);
|
|
|
break;
|
|
|
default:
|
|
@@ -286,21 +316,27 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
}
|
|
|
StandConvertCrfBatchDTO standConvertCrfBatchDTO = testFacade.testStandConvertBatch(convertCrfVOList);
|
|
|
for (TestwordRes testwordRes : testwordInfoList) {
|
|
|
- Set<String> symptomType = new LinkedHashSet<>();
|
|
|
switch (testwordRes.getType()) {
|
|
|
case "症状":
|
|
|
- Map<String, StandConvertCrfDTO> convertCrfDTOMap = standConvertCrfBatchDTO.getData().get("symptom");
|
|
|
- if (convertCrfDTOMap != null && convertCrfDTOMap.get(testwordRes.getWord()) != null) {
|
|
|
- List<Map<String,String>> listMap = convertCrfDTOMap.get(testwordRes.getWord()).getStandard_words();
|
|
|
- int size = 0;
|
|
|
- for (Map<String,String> map : listMap) {
|
|
|
- if (size < 3 && StringUtil.isNotBlank(map.get("standard_word"))) {
|
|
|
- symptomType.add(map.get("standard_word"));
|
|
|
- }
|
|
|
- size++;
|
|
|
- }
|
|
|
- testwordRes.setConvertWord(StringUtils.join(symptomType, ";"));
|
|
|
- }
|
|
|
+ wordStandConvert(standConvertCrfBatchDTO, testwordRes, "symptom");
|
|
|
+ break;
|
|
|
+ case "诊断":
|
|
|
+ wordStandConvert(standConvertCrfBatchDTO, testwordRes, "disease");
|
|
|
+ break;
|
|
|
+ case "药品":
|
|
|
+ wordStandConvert(standConvertCrfBatchDTO, testwordRes, "drug");
|
|
|
+ break;
|
|
|
+ case "手术":
|
|
|
+ wordStandConvert(standConvertCrfBatchDTO, testwordRes, "operation");
|
|
|
+ break;
|
|
|
+ case "查体":
|
|
|
+ wordStandConvert(standConvertCrfBatchDTO, testwordRes, "vital");
|
|
|
+ break;
|
|
|
+ // case "辅检结果":
|
|
|
+ // wordStandConvert(standConvertCrfBatchDTO, testwordRes, "pacs");
|
|
|
+ // break;
|
|
|
+ case "化验":
|
|
|
+ wordStandConvert(standConvertCrfBatchDTO, testwordRes, "lis");
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
@@ -316,6 +352,21 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void wordStandConvert(StandConvertCrfBatchDTO standConvertCrfBatchDTO, TestwordRes testwordRes, String type) {
|
|
|
+ Set<String> typeList = new LinkedHashSet<>();
|
|
|
+ Map<String, StandConvertCrfDTO> convertCrfDTOMap = standConvertCrfBatchDTO.getData().get(type);
|
|
|
+ if (convertCrfDTOMap != null && convertCrfDTOMap.get(testwordRes.getWord()) != null) {
|
|
|
+ List<Map<String,String>> listMap = convertCrfDTOMap.get(testwordRes.getWord()).getStandard_words();
|
|
|
+ int size = 0;
|
|
|
+ for (Map<String,String> map : listMap) {
|
|
|
+ if (size < 3 && StringUtil.isNotBlank(map.get("standard_word"))) {
|
|
|
+ typeList.add(map.get("standard_word"));
|
|
|
+ }
|
|
|
+ size++;
|
|
|
+ }
|
|
|
+ testwordRes.setConvertWord(StringUtils.join(typeList, ";"));
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 筛选对象列表中“uniqueName”字段为空的数据,返回targetProperty字段列表
|