|
@@ -4,13 +4,18 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.lantone.qc.kernel.client.CRFServiceClient;
|
|
|
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
|
|
|
import com.lantone.qc.kernel.client.SimilarityServiceClient;
|
|
|
import com.lantone.qc.kernel.util.CatalogueUtil;
|
|
|
import com.lantone.qc.pub.model.entity.Annotation;
|
|
|
+import com.lantone.qc.pub.model.entity.ChiefPresentAnnotation;
|
|
|
import com.lantone.qc.pub.model.vo.CRFVo;
|
|
|
+import com.lantone.qc.pub.model.vo.ChiefPresentSimilarityVo;
|
|
|
import com.lantone.qc.pub.model.vo.SimilarityVo;
|
|
|
import com.lantone.qc.pub.util.StringUtil;
|
|
|
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
/**
|
|
|
* @ClassName : ModelAI
|
|
|
* @Description : 算法基类
|
|
@@ -35,22 +40,6 @@ public class ModelAI {
|
|
|
return midData;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取文本相似度返回数据
|
|
|
- *
|
|
|
- * @param similarContent
|
|
|
- * @param similarityServiceClient
|
|
|
- * @return
|
|
|
- */
|
|
|
- public double loadSimilarAI(JSONArray similarContent, SimilarityServiceClient similarityServiceClient) {
|
|
|
- //存储CRF完整所需结构数据
|
|
|
- SimilarityVo similarityVo = new SimilarityVo();
|
|
|
- similarityVo.setData(similarContent);
|
|
|
- //获取CRF模型返回数据
|
|
|
- JSONArray data = getAnnotation(similarityServiceClient, similarityVo).getData();
|
|
|
- return getSimilarOutputs(data);
|
|
|
- }
|
|
|
-
|
|
|
protected JSONObject loadEntity(JSONObject jsonObject, String entityRelationObject, String outputs, String content) {
|
|
|
if (jsonObject == null) {
|
|
|
return new JSONObject();
|
|
@@ -72,18 +61,6 @@ public class ModelAI {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private Annotation getAnnotation(SimilarityServiceClient similarityServiceClient, SimilarityVo similarityVo) {
|
|
|
- Annotation annotation = new Annotation();
|
|
|
- try {
|
|
|
- String annotation_str = similarityServiceClient.getAnnotation(similarityVo);
|
|
|
- annotation = JSON.parseObject(annotation_str, Annotation.class);
|
|
|
- } catch (Exception ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- } finally {
|
|
|
- return annotation;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
protected void putContent(JSONArray crfContent, String medicalTextType, String text, String sign) {
|
|
|
String move_text = CatalogueUtil.removeSpecialChar(text);
|
|
|
if (StringUtil.isEmpty(move_text)) {
|
|
@@ -109,6 +86,26 @@ public class ModelAI {
|
|
|
crfContent.add(detailContent);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取CRF模型输出并处理
|
|
|
+ *
|
|
|
+ * @param data
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public JSONObject getOutputs(JSONArray data) {
|
|
|
+ JSONObject midData = new JSONObject();
|
|
|
+ for (int i = 0; i < data.size(); i++) {
|
|
|
+ JSONObject detailContent = data.getJSONObject(i);
|
|
|
+ String detail_title = detailContent.getString("detail_title");
|
|
|
+ if (StringUtil.isNotEmpty(detail_title) && midData.get(detail_title) == null) {
|
|
|
+ midData.put(detail_title, detailContent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return midData;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*****************************文本相似度算法************************************/
|
|
|
+
|
|
|
/**
|
|
|
* 存放文本相似度入参内容
|
|
|
*
|
|
@@ -128,22 +125,32 @@ public class ModelAI {
|
|
|
similarContent.add(detailContent);
|
|
|
}
|
|
|
|
|
|
+ private Annotation getAnnotation(SimilarityServiceClient similarityServiceClient, SimilarityVo similarityVo) {
|
|
|
+ Annotation annotation = new Annotation();
|
|
|
+ try {
|
|
|
+ String annotation_str = similarityServiceClient.getAnnotation(similarityVo);
|
|
|
+ annotation = JSON.parseObject(annotation_str, Annotation.class);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ return annotation;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
- * 获取CRF模型输出并处理
|
|
|
+ * 获取文本相似度返回数据
|
|
|
*
|
|
|
- * @param data
|
|
|
+ * @param similarContent
|
|
|
+ * @param similarityServiceClient
|
|
|
* @return
|
|
|
*/
|
|
|
- public JSONObject getOutputs(JSONArray data) {
|
|
|
- JSONObject midData = new JSONObject();
|
|
|
- for (int i = 0; i < data.size(); i++) {
|
|
|
- JSONObject detailContent = data.getJSONObject(i);
|
|
|
- String detail_title = detailContent.getString("detail_title");
|
|
|
- if (StringUtil.isNotEmpty(detail_title) && midData.get(detail_title) == null) {
|
|
|
- midData.put(detail_title, detailContent);
|
|
|
- }
|
|
|
- }
|
|
|
- return midData;
|
|
|
+ public double loadSimilarAI(JSONArray similarContent, SimilarityServiceClient similarityServiceClient) {
|
|
|
+ //存储CRF完整所需结构数据
|
|
|
+ SimilarityVo similarityVo = new SimilarityVo();
|
|
|
+ similarityVo.setData(similarContent);
|
|
|
+ //获取CRF模型返回数据
|
|
|
+ JSONArray data = getAnnotation(similarityServiceClient, similarityVo).getData();
|
|
|
+ return getSimilarOutputs(data);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -160,4 +167,71 @@ public class ModelAI {
|
|
|
}
|
|
|
return likeRate;
|
|
|
}
|
|
|
+ /*****************************主诉现病史症状文本相似度算法************************************/
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 存放主诉现病史症状文本相似度入参内容
|
|
|
+ */
|
|
|
+ public void putContent(JSONObject similarContent, String firstText, List<String> clinicArr) {
|
|
|
+ if (StringUtil.isEmpty(firstText) || clinicArr.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ similarContent.put("string1", firstText);
|
|
|
+ similarContent.put("string2", clinicArr);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取主诉现病史症状相似度返回数据
|
|
|
+ *
|
|
|
+ * @param string1
|
|
|
+ * @param string2
|
|
|
+ * @param chiefPresentSimilarityServiceClient
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public JSONArray loadChiefPresentSimilarAI(String string1, List<String> string2, boolean directionCheck
|
|
|
+ , ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient) {
|
|
|
+ //存储CRF完整所需结构数据
|
|
|
+ ChiefPresentSimilarityVo similarityVo = new ChiefPresentSimilarityVo();
|
|
|
+ JSONObject data = new JSONObject();
|
|
|
+ putContent(data, string1, string2);
|
|
|
+ similarityVo.setData(data);
|
|
|
+ similarityVo.setDirection_check(directionCheck);
|
|
|
+ //获取CRF模型返回数据
|
|
|
+ JSONArray predY = getAnnotation(chiefPresentSimilarityServiceClient, similarityVo).getPred_y();
|
|
|
+ return getChiefPresentSimilarOutputs(predY);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 主诉现病史相似度接口返回
|
|
|
+ *
|
|
|
+ * @param chiefPresentSimilarityServiceClient
|
|
|
+ * @param chiefPresentSimilarityVo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private ChiefPresentAnnotation getAnnotation(ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient,
|
|
|
+ ChiefPresentSimilarityVo chiefPresentSimilarityVo) {
|
|
|
+ ChiefPresentAnnotation annotation = new ChiefPresentAnnotation();
|
|
|
+ try {
|
|
|
+ String annotation_str = chiefPresentSimilarityServiceClient.getAnnotation(chiefPresentSimilarityVo);
|
|
|
+ annotation = JSON.parseObject(annotation_str, ChiefPresentAnnotation.class);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ return annotation;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取主诉现病史文本相似度模型输出并处理
|
|
|
+ *
|
|
|
+ * @param predY
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public JSONArray getChiefPresentSimilarOutputs(JSONArray predY) {
|
|
|
+ JSONArray dataArr = new JSONArray();
|
|
|
+ if (predY.size() > 0) {
|
|
|
+ dataArr = predY.getJSONArray(0);
|
|
|
+ }
|
|
|
+ return dataArr;
|
|
|
+ }
|
|
|
}
|