|
@@ -0,0 +1,161 @@
|
|
|
|
+package com.lantone.structure.facade.tran;
|
|
|
|
+
|
|
|
|
+import com.google.common.collect.Lists;
|
|
|
|
+import com.google.common.collect.Maps;
|
|
|
|
+import com.lantone.common.util.StringUtil;
|
|
|
|
+import com.lantone.structure.facade.tran.util.CommonAnalysisUtil;
|
|
|
|
+import com.lantone.structure.model.doc.DeathRecordDoc;
|
|
|
|
+import com.lantone.structure.util.MapUtil;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.apache.commons.lang3.time.DateUtils;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+import java.util.*;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @Description:死亡记录
|
|
|
|
+ * @author: cy
|
|
|
|
+ * @time: 2021/2/24 09:33
|
|
|
|
+ */
|
|
|
|
+@Slf4j
|
|
|
|
+public class DeathRecordTran extends TargetTran {
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String, String> convert(String text) {
|
|
|
|
+ DeathRecordDoc deathRecordDoc = new DeathRecordDoc();
|
|
|
|
+ deathRecordDoc.setText(text);
|
|
|
|
+ inputInfo.setDeathRecordDoc(deathRecordDoc);
|
|
|
|
+ Map<String, String> structureMap = cutWord(text);
|
|
|
|
+ Map<String, String> retMap = new HashMap<String, String>();
|
|
|
|
+ deathRecordContrast(inputInfo.getDeathRecordDoc(), structureMap);
|
|
|
|
+ mapKeyContrastCommon(structureMap,stagesContrasts,retMap);
|
|
|
|
+ return retMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<String> stagesContrasts = Lists.newArrayList(
|
|
|
|
+ "姓名=患者姓名",
|
|
|
|
+ "入院日期=入院日期时间",
|
|
|
|
+ "诊疗经过=诊疗过程描述",
|
|
|
|
+ "死亡日期=死亡日期时间",
|
|
|
|
+ "死亡诊断=死亡诊断名称"
|
|
|
|
+ );
|
|
|
|
+ private Map<String, String> cutWord(String text) {
|
|
|
|
+ Map<String, String> sourceMap = Maps.newHashMap();
|
|
|
|
+ List<String> titles = CommonAnalysisUtil.sortTitles(
|
|
|
|
+ //
|
|
|
|
+ Lists.newArrayList("姓名","性别","年龄","职业","入院日期","入院诊断", "死亡日期",
|
|
|
|
+ "住院天数","死亡诊断","入院情况","诊疗经过", "抢救措施","死亡诊断","死亡原因(包括死亡讨论结果)"),
|
|
|
|
+ text
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ CommonAnalysisUtil.cutByTitles(text, titles, 0, sourceMap);
|
|
|
|
+ if(sourceMap.containsKey("性别")||sourceMap.containsKey("职业")||sourceMap.containsKey("住院天数")
|
|
|
|
+ ||sourceMap.containsKey("入院诊断") ||sourceMap.containsKey("抢救措施")){
|
|
|
|
+ sourceMap.remove("性别");
|
|
|
|
+ sourceMap.remove("职业");
|
|
|
|
+ sourceMap.remove("住院天数");
|
|
|
|
+ sourceMap.remove("入院诊断");
|
|
|
|
+ sourceMap.remove("抢救措施");
|
|
|
|
+ }
|
|
|
|
+ return sourceMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public static void mapKeyContrastCommon(Map sourceMap, List<String> keyContrasts, Map<String, String> retMap) {
|
|
|
|
+ Map<String, String> sourceMap_ = MapUtil.copyMap(sourceMap);
|
|
|
|
+ String[] arry = null;
|
|
|
|
+ String sourceKey = null, targetKey;
|
|
|
|
+ Set<String> removeKey = new HashSet<>();
|
|
|
|
+ for (String keyContrast : keyContrasts) {
|
|
|
|
+ arry = keyContrast.split("=");
|
|
|
|
+ sourceKey = arry[0];
|
|
|
|
+ if (arry.length == 1) {
|
|
|
|
+ targetKey = arry[0];
|
|
|
|
+ } else {
|
|
|
|
+ targetKey = arry[1];
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isNotBlank(sourceMap_.get(sourceKey))
|
|
|
|
+ && (!retMap.containsKey(targetKey) || StringUtil.isBlank(retMap.get(targetKey)))) {
|
|
|
|
+ retMap.put(targetKey, sourceMap_.get(sourceKey));
|
|
|
|
+ }
|
|
|
|
+ removeKey.add(sourceKey);
|
|
|
|
+ }
|
|
|
|
+ Set<String> keySet = retMap.keySet();
|
|
|
|
+ for (String key : sourceMap_.keySet()) {
|
|
|
|
+ if (!keySet.contains(key) && !removeKey.contains(key)) { // 如果之前已放过key就不用放了
|
|
|
|
+ retMap.put(key, sourceMap_.get(key));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 抽取文本中的最后时间
|
|
|
|
+ *
|
|
|
|
+ * @param top
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static String lastTime(String top) {
|
|
|
|
+ int length = top.trim().length();
|
|
|
|
+ String stringDate = top.trim().substring(length - 12, length);
|
|
|
|
+ Date date = null;
|
|
|
|
+ try {
|
|
|
|
+ date = DateUtils.parseDate(stringDate, StringUtil.dateFormats);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage(),e);
|
|
|
|
+ }
|
|
|
|
+ if(date!= null){
|
|
|
|
+ return stringDate;
|
|
|
|
+ }else{
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public void deathRecordContrast( DeathRecordDoc deathRecordDoc, Map<String, String> retMap) {
|
|
|
|
+ if(deathRecordDoc != null) {
|
|
|
|
+ //年龄
|
|
|
|
+ if (StringUtil.isNotEmpty(retMap.get("年龄"))) {
|
|
|
|
+ String value = retMap.get("年龄");
|
|
|
|
+ if (value.contains("岁")) {
|
|
|
|
+ retMap.put("年龄(岁)", value);
|
|
|
|
+ retMap.remove("年龄");
|
|
|
|
+ }
|
|
|
|
+ if (value.contains("月")) {
|
|
|
|
+ retMap.put("年龄(月)", value);
|
|
|
|
+ retMap.remove("年龄");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //直接死亡原因名称
|
|
|
|
+ if (StringUtil.isNotEmpty(retMap.get("死亡诊断"))) {
|
|
|
|
+ String deathDiagnosislName = retMap.get("死亡诊断");
|
|
|
|
+ String trueRet = "";
|
|
|
|
+ if (deathDiagnosislName.contains("2.")) {
|
|
|
|
+ trueRet = deathDiagnosislName.substring(0, deathDiagnosislName.indexOf("2."));
|
|
|
|
+ if (trueRet.contains("1.")) {
|
|
|
|
+ trueRet = trueRet.substring(2);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ retMap.put("直接死亡原因名称", trueRet);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //签名日期时间
|
|
|
|
+ if(StringUtil.isNotEmpty(retMap.get("死亡原因(包括死亡讨论结果)"))){
|
|
|
|
+ String lastText = retMap.get("死亡原因(包括死亡讨论结果)");
|
|
|
|
+ String sginTime= lastTime(lastText);
|
|
|
|
+ if(StringUtil.isNotEmpty(sginTime)){
|
|
|
|
+ retMap.put("签名日期时间", sginTime);
|
|
|
|
+ }
|
|
|
|
+ retMap.remove("死亡原因(包括死亡讨论结果)");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|