浏览代码

症状从下走

zhoutg 4 年之前
父节点
当前提交
2e60d813c6

+ 28 - 28
doc/001.00000000初始化脚本/cdss-core_init.sql

@@ -1,28 +1,28 @@
-DROP TABLE IF EXISTS `demo_testword_info`;
-CREATE TABLE `demo_testword_info` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
-  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
-  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
-  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
-  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
-  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
-  `text` LONGTEXT COMMENT '文本',
-  `type` varchar(100) NOT NULL default '' COMMENT '文本类型',
-  `is_deal` smallint(4) NOT NULL default '0' COMMENT '是否处理,0:未使用,1:已处理',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='词提取用例';
-
-DROP TABLE IF EXISTS `demo_testword_res`;
-CREATE TABLE `demo_testword_res` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
-  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
-  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
-  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
-  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
-  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
-  `word` varchar(200) NOT NULL default '' COMMENT '词名称',
-  `type` varchar(100) NOT NULL default '' COMMENT '词类型',
-  `convert_word` varchar(500) NOT NULL default '' COMMENT '词转换',
-  `is_deal` smallint(4) NOT NULL default '0' COMMENT '是否处理,0:未使用,1:已处理',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='词提取结果';
+-- DROP TABLE IF EXISTS `demo_testword_info`;
+-- CREATE TABLE `demo_testword_info` (
+--   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+--   `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+--   `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+--   `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+--   `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+--   `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+--   `text` LONGTEXT COMMENT '文本',
+--   `type` varchar(100) NOT NULL default '' COMMENT '文本类型',
+--   `is_deal` smallint(4) NOT NULL default '0' COMMENT '是否处理,0:未使用,1:已处理',
+--   PRIMARY KEY (`id`)
+-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='词提取用例';
+--
+-- DROP TABLE IF EXISTS `demo_testword_res`;
+-- CREATE TABLE `demo_testword_res` (
+--   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+--   `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+--   `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+--   `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+--   `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+--   `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+--   `word` varchar(200) NOT NULL default '' COMMENT '词名称',
+--   `type` varchar(100) NOT NULL default '' COMMENT '词类型',
+--   `convert_word` varchar(500) NOT NULL default '' COMMENT '词转换',
+--   `is_deal` smallint(4) NOT NULL default '0' COMMENT '是否处理,0:未使用,1:已处理',
+--   PRIMARY KEY (`id`)
+-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='词提取结果';

+ 59 - 42
src/main/java/com/diagbot/facade/TestwordInfoFacade.java

@@ -464,18 +464,21 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                 String line = "";
 
                 // 3、将文件结构化
-                while (StringUtil.isNotBlank(line = br.readLine())) {
-                    String[] arr = line.split(" |\\t");
-                    Ann ann = new Ann();
-                    ann.setId(arr[0]);
-                    ann.setType(arr[1]);
-                    ann.setStart(arr[2]);
-                    ann.setEnd(arr[3]);
-                    ann.setName(arr[4]);
-                    annList.add(ann);
+                while ((line = br.readLine()) != null) {
+                    if (StringUtil.isNotBlank(line)) {
+                        String[] arr = line.split(" |\\t");
+                        Ann ann = new Ann();
+                        ann.setId(arr[0]);
+                        ann.setType(arr[1]);
+                        ann.setStart(arr[2]);
+                        ann.setEnd(arr[3]);
+                        ann.setName(arr[4]);
+                        annList.add(ann);
+                    }
                 }
                 Map<String, List<Ann>> typeEntity = EntityUtil.makeEntityListMap(annList, "type");
                 Map<String, List<Ann>> endMap = EntityUtil.makeEntityListMap(annList, "end");
+                Map<String, List<Ann>> startMap = EntityUtil.makeEntityListMap(annList, "start");
 
                 // 4、以最小单元为准,读取相关属性
                 List<Ann> symptomList = typeEntity.get("min_combination_unit");
@@ -486,37 +489,22 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                         symptomFeatureList = new SymptomFeatureList();
                         symptomFeatureList.setMinCombineElement(name);
                     }
-                    String start = ann.getStart();
-                    List<Ann> endList = new ArrayList<>();
-                    while (ListUtil.isNotEmpty(endList = endMap.get(start))) {
-                        Ann annBean = endList.get(0);
-                        start = annBean.getStart();
-                        switch (annBean.getType()) {
-                            case "location": // 部位
-                                setSymptomFeature(symptomFeatureList.getBodyPartList(), annBean.getName());
-                                break;
-                            case "direction": // 方位
-                                setSymptomFeature(symptomFeatureList.getPositionList(), annBean.getName());
-                                break;
-                            case "property": // 形状性质
-                                setSymptomFeature(symptomFeatureList.getShapePropetyList(), annBean.getName());
-                                break;
-                            case "extent": // 程度
-                                setSymptomFeature(symptomFeatureList.getDegreeList(), annBean.getName());
-                                break;
-                            case "color": // 颜色
-                                setSymptomFeature(symptomFeatureList.getColorList(), annBean.getName());
-                                break;
-                            case "change": // 变化
-                                setSymptomFeature(symptomFeatureList.getVarietyList(), annBean.getName());
-                                break;
-                            case "rediate": // 放射情况
-                                setSymptomFeature(symptomFeatureList.getRadiationSituationList(), annBean.getName());
-                                break;
-                            case "frequency": // 频率
-                                setSymptomFeature(symptomFeatureList.getFrequencyList(), annBean.getName());
-                                break;
-                        }
+
+                    List<Ann> currentAnnList = new ArrayList<>();
+                    String value = "";
+                    // 从最小组合单元往上找end
+                    value = ann.getStart();
+                    while (ListUtil.isNotEmpty(currentAnnList = endMap.get(value))) {
+                        Ann annBean = currentAnnList.get(0);
+                        value = annBean.getStart();
+                        setSymptomFeature(annBean, symptomFeatureList);
+                    }
+                    // 从最小组合单元往下找start
+                    value = ann.getEnd();
+                    while (ListUtil.isNotEmpty(currentAnnList = startMap.get(value))) {
+                        Ann annBean = currentAnnList.get(0);
+                        value = annBean.getEnd();
+                        setSymptomFeature(annBean, symptomFeatureList);
                     }
                     listMap.put(name, symptomFeatureList);
                 }
@@ -531,11 +519,11 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                 symptomFeature.setMinCombineElement(key);
                 symptomFeature.setBodyPart(StringUtils.join(sf.getBodyPartList(), "、"));
                 symptomFeature.setPosition(StringUtils.join(sf.getPositionList(), "、"));
-                symptomFeature.setBodyPart(StringUtils.join(sf.getBodyPartList(), "、"));
                 symptomFeature.setShapePropety(StringUtils.join(sf.getShapePropetyList(), "、"));
                 symptomFeature.setDegree(StringUtils.join(sf.getDegreeList(), "、"));
                 symptomFeature.setColor(StringUtils.join(sf.getColorList(), "、"));
                 symptomFeature.setVariety(StringUtils.join(sf.getVarietyList(), "、"));
+                symptomFeature.setRadiationSituation(StringUtils.join(sf.getRadiationSituationList(), "、"));
                 symptomFeature.setFrequency(StringUtils.join(sf.getFrequencyList(), "、"));
                 symptomFeatureList.add(symptomFeature);
             }
@@ -545,9 +533,38 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
         }
     }
 
-    public void setSymptomFeature(List<String> list, String name) {
+    public void addFeature(List<String> list, String name) {
         if (!list.contains(name)) {
             list.add(name);
         }
     }
+
+    public void setSymptomFeature(Ann annBean, SymptomFeatureList symptomFeatureList) {
+        switch (annBean.getType()) {
+            case "location": // 部位
+                addFeature(symptomFeatureList.getBodyPartList(), annBean.getName());
+                break;
+            case "direction": // 方位
+                addFeature(symptomFeatureList.getPositionList(), annBean.getName());
+                break;
+            case "property": // 形状性质
+                addFeature(symptomFeatureList.getShapePropetyList(), annBean.getName());
+                break;
+            case "extent": // 程度
+                addFeature(symptomFeatureList.getDegreeList(), annBean.getName());
+                break;
+            case "color": // 颜色
+                addFeature(symptomFeatureList.getColorList(), annBean.getName());
+                break;
+            case "change": // 变化
+                addFeature(symptomFeatureList.getVarietyList(), annBean.getName());
+                break;
+            case "rediate": // 放射情况
+                addFeature(symptomFeatureList.getRadiationSituationList(), annBean.getName());
+                break;
+            case "frequency": // 频率
+                addFeature(symptomFeatureList.getFrequencyList(), annBean.getName());
+                break;
+        }
+    }
 }