Jelajahi Sumber

新版特征词提取

zhaops 5 tahun lalu
induk
melakukan
804afa42e3

+ 14 - 0
aipt-service/src/main/java/com/diagbot/client/AINeoServiceClient.java

@@ -4,10 +4,15 @@ import com.diagbot.biz.push.entity.ResponseDataV2;
 import com.diagbot.client.bean.Response;
 import com.diagbot.client.bean.SearchData;
 import com.diagbot.client.hystrix.AINeoServiceHystrix;
+import com.diagbot.dto.FeatureDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.NLPVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.List;
+
 /**
  * @Description:
  * @Author:zhaops
@@ -24,4 +29,13 @@ public interface AINeoServiceClient {
      */
     @PostMapping(value = "/api/push")
     Response<ResponseDataV2> push(@RequestBody SearchData searchData);
+
+    /**
+     * 特征词提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    @PostMapping(value = "/api/extract")
+    RespDTO<List<FeatureDTO>> extract(@RequestBody NLPVO nlpvo);
 }

+ 18 - 0
aipt-service/src/main/java/com/diagbot/client/hystrix/AINeoServiceHystrix.java

@@ -4,10 +4,16 @@ import com.diagbot.biz.push.entity.ResponseDataV2;
 import com.diagbot.client.AINeoServiceClient;
 import com.diagbot.client.bean.Response;
 import com.diagbot.client.bean.SearchData;
+import com.diagbot.dto.FeatureDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.NLPVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.List;
+
 /**
  * @Description:
  * @Author:zhaops
@@ -28,4 +34,16 @@ public class AINeoServiceHystrix implements AINeoServiceClient {
         log.error("【hystrix】调用{}异常", "push");
         return null;
     }
+
+    /**
+     * 特征词提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    @Override
+    public RespDTO<List<FeatureDTO>> extract(@RequestBody NLPVO nlpvo) {
+        log.error("【hystrix】调用{}异常", "extract");
+        return null;
+    }
 }

+ 20 - 0
aipt-service/src/main/java/com/diagbot/dto/FeatureDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/26 13:42
+ */
+@Getter
+@Setter
+public class FeatureDTO {
+    private Long conceptId;
+    @CryptField
+    private String standard;
+    private Integer type;
+    private String origin;
+}

+ 75 - 0
aipt-service/src/main/java/com/diagbot/facade/FeatureV2Facade.java

@@ -0,0 +1,75 @@
+package com.diagbot.facade;
+
+import com.diagbot.client.AINeoServiceClient;
+import com.diagbot.dto.FeatureDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.Concept;
+import com.diagbot.enums.LexiconTypeEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
+import com.diagbot.vo.NLPVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/26 13:46
+ */
+@Component
+public class FeatureV2Facade {
+    @Autowired
+    private AINeoServiceClient aiNeoServiceClient;
+    @Autowired
+    private ConceptFacade conceptFacade;
+
+    /**
+     * 特征词提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    public List<FeatureDTO> extract(NLPVO nlpvo) {
+        RespDTO<List<FeatureDTO>> respDTO = aiNeoServiceClient.extract(nlpvo);
+        RespDTOUtil.respNGDealCover(respDTO, "特征词提取失败");
+        return respDTO.data;
+    }
+
+    /**
+     * 症状特征词提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    public List<FeatureDTO> symptomFeatureV2(NLPVO nlpvo) {
+        List<FeatureDTO> featureList = extract(nlpvo);
+        if (ListUtil.isNotEmpty(featureList)) {
+            List<FeatureDTO> symptoms = featureList
+                    .stream()
+                    .filter(i -> i.getType().equals(1))
+                    .collect(Collectors.toList());
+            List<String> names = symptoms
+                    .stream()
+                    .map(i -> i.getStandard())
+                    .collect(Collectors.toList());
+            List<Concept> concepts = conceptFacade.getListByNamesAndType(names, LexiconTypeEnum.SYMPTOM.getKey());
+            Map<String, Long> conceptMap
+                    = EntityUtil.makeMapWithKeyValue(concepts, "libName", "id");
+            symptoms.forEach(symptom -> {
+                if (conceptMap.containsKey(symptom.getStandard())) {
+                    symptom.setConceptId(conceptMap.get(symptom.getStandard()));
+                }
+            });
+            return symptoms;
+        } else {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "未提取到症状特征");
+        }
+    }
+}

+ 15 - 0
aipt-service/src/main/java/com/diagbot/vo/NLPVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/26 13:41
+ */
+@Getter
+@Setter
+public class NLPVO {
+    private String text;
+}

+ 37 - 0
aipt-service/src/main/java/com/diagbot/web/FeatureV2Controller.java

@@ -0,0 +1,37 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.FeatureDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.FeatureV2Facade;
+import com.diagbot.vo.NLPVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/26 13:49
+ */
+@RestController
+@RequestMapping("/featureV2")
+@Api(value = "文本特征词提取V2相关API", tags = { "文本特征词提取V2相关API" })
+public class FeatureV2Controller {
+    @Autowired
+    private FeatureV2Facade featureV2Facade;
+
+    @ApiOperation(value = "知识库标准化-症状特征词提取", notes = "")
+    @PostMapping("/symptomFeatureV2")
+    @SysLogger("symptomFeatureV2")
+    public RespDTO<List<FeatureDTO>> symptomFeatureV2(@RequestBody NLPVO nlpvo) {
+        List<FeatureDTO> data = featureV2Facade.symptomFeatureV2(nlpvo);
+        return RespDTO.onSuc(data);
+    }
+}

+ 11 - 0
triage-service/src/main/java/com/diagbot/client/AiptServiceClient.java

@@ -9,11 +9,13 @@ import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.FeatureConceptDTO;
+import com.diagbot.dto.FeatureDTO;
 import com.diagbot.dto.PartSymptomDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.UsualDTO;
 import com.diagbot.dto.VersionWrapperDTO;
 import com.diagbot.vo.ConceptUsualVO;
+import com.diagbot.vo.NLPVO;
 import com.diagbot.vo.PartSymptomVO;
 import com.diagbot.vo.RetrievalVO;
 import com.diagbot.vo.VersionVO;
@@ -118,4 +120,13 @@ public interface AiptServiceClient {
      */
     @PostMapping(value = "/feature/symptomFeature")
     RespDTO<List<FeatureConceptDTO>> symptomFeature(@RequestParam("text") String text);
+
+    /**
+     * 症状特征提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    @PostMapping(value = "/featureV2/symptomFeatureV2")
+    RespDTO<List<FeatureDTO>> symptomFeatureV2(@RequestBody NLPVO nlpvo);
 }

+ 14 - 0
triage-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java

@@ -9,11 +9,13 @@ import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.FeatureConceptDTO;
+import com.diagbot.dto.FeatureDTO;
 import com.diagbot.dto.PartSymptomDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.UsualDTO;
 import com.diagbot.dto.VersionWrapperDTO;
 import com.diagbot.vo.ConceptUsualVO;
+import com.diagbot.vo.NLPVO;
 import com.diagbot.vo.PartSymptomVO;
 import com.diagbot.vo.RetrievalVO;
 import com.diagbot.vo.VersionVO;
@@ -127,4 +129,16 @@ public class AiptServiceHystrix implements AiptServiceClient {
         log.error("【hystrix】调用{}异常", "symptomFeature");
         return null;
     }
+
+    /**
+     * 症状特征提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    @Override
+    public RespDTO<List<FeatureDTO>> symptomFeatureV2(@RequestBody NLPVO nlpvo) {
+        log.error("【hystrix】调用{}异常", "symptomFeatureV2");
+        return null;
+    }
 }

+ 18 - 0
triage-service/src/main/java/com/diagbot/dto/FeatureDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/26 13:42
+ */
+@Getter
+@Setter
+public class FeatureDTO {
+    private Long conceptId;
+    private String standard;
+    private Integer type;
+    private String origin;
+}

+ 14 - 0
triage-service/src/main/java/com/diagbot/facade/FeatureFacade.java

@@ -2,9 +2,11 @@ package com.diagbot.facade;
 
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.dto.FeatureConceptDTO;
+import com.diagbot.dto.FeatureDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
+import com.diagbot.vo.NLPVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -40,4 +42,16 @@ public class FeatureFacade {
         }
         return symptomFeatureList;
     }
+
+    /**
+     * 新版知识库症状特征词提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    public List<FeatureDTO> getSymptomFeatureV2(NLPVO nlpvo) {
+        RespDTO<List<FeatureDTO>> respDTO = aiptServiceClient.symptomFeatureV2(nlpvo);
+        RespDTOUtil.respNGDealCover(respDTO, "症状特征词提取失败");
+        return respDTO.data;
+    }
 }

+ 15 - 0
triage-service/src/main/java/com/diagbot/vo/NLPVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/26 13:41
+ */
+@Getter
+@Setter
+public class NLPVO {
+    private String text;
+}

+ 37 - 0
triage-service/src/main/java/com/diagbot/web/FeatureController.java

@@ -0,0 +1,37 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.FeatureDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.FeatureFacade;
+import com.diagbot.vo.NLPVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/26 16:49
+ */
+@RestController
+@RequestMapping("/feature")
+@Api(value = "特征词提取相关API", tags = { "特征词提取相关API" })
+public class FeatureController {
+    @Autowired
+    private FeatureFacade featureFacade;
+
+    @ApiOperation(value = "症状文本解析[by:zhaops]",
+            notes = "text: 症状文本描述(必填)<br>")
+    @PostMapping("/getSymptomFeatureV2")
+    @SysLogger("getSymptomFeatureV2")
+    public RespDTO<List<FeatureDTO>> getSymptomFeatureV2(@RequestBody NLPVO nlpvo) {
+        return RespDTO.onSuc(featureFacade.getSymptomFeatureV2(nlpvo));
+    }
+}