|
@@ -20,6 +20,7 @@ import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
/**
|
|
|
* @ClassName org.diagbot.bigdata.work.ParamsDataProxy
|
|
@@ -240,8 +241,11 @@ public class ParamsDataProxy {
|
|
|
List<Lexeme> feature = new ArrayList<>();
|
|
|
//收集分词结果中体征指标或体征指标值(数字)
|
|
|
for (Lexeme lexeme : lexemes) {
|
|
|
+ if (lexeme.getProperty().contains(",")) {
|
|
|
+ ApplicationCacheUtil.setProterty(lexeme); //如果分词后词性有多个,只选一个(暂时只处理症状,体征)
|
|
|
+ }
|
|
|
NegativeEnum lexemeNegativeEnum = NegativeEnum.parseOfValue(lexeme.getProperty());
|
|
|
- if (lexemeNegativeEnum == NegativeEnum.VITAL_INDEX || lexemeNegativeEnum == NegativeEnum.DIGITS
|
|
|
+ if (lexemeNegativeEnum == NegativeEnum.VITAL_INDEX || lexemeNegativeEnum == NegativeEnum.SYMPTOM || lexemeNegativeEnum == NegativeEnum.DIGITS
|
|
|
|| lexemeNegativeEnum == NegativeEnum.EVENT_TIME || lexemeNegativeEnum == NegativeEnum.UNIT
|
|
|
) {
|
|
|
feature.add(lexeme);
|
|
@@ -254,19 +258,30 @@ public class ParamsDataProxy {
|
|
|
if (i < feature.size() - 2) {
|
|
|
if ((NegativeEnum.parseOfValue(feature.get(i).getProperty()) == NegativeEnum.VITAL_INDEX
|
|
|
&& NegativeEnum.parseOfValue(feature.get(i + 1).getProperty()) == NegativeEnum.DIGITS
|
|
|
- && NegativeEnum.parseOfValue(feature.get(i + 2).getProperty()) == NegativeEnum.EVENT_TIME)
|
|
|
+ && NegativeEnum.parseOfValue(feature.get(i + 2).getProperty()) == NegativeEnum.UNIT)
|
|
|
||
|
|
|
(NegativeEnum.parseOfValue(feature.get(i).getProperty()) == NegativeEnum.VITAL_INDEX
|
|
|
&& NegativeEnum.parseOfValue(feature.get(i + 1).getProperty()) == NegativeEnum.DIGITS
|
|
|
- && NegativeEnum.parseOfValue(feature.get(i + 2).getProperty()) == NegativeEnum.UNIT)) {
|
|
|
+ && NegativeEnum.parseOfValue(feature.get(i + 2).getProperty()) == NegativeEnum.EVENT_TIME)
|
|
|
+ ||
|
|
|
+ (NegativeEnum.parseOfValue(feature.get(i).getProperty()) == NegativeEnum.SYMPTOM
|
|
|
+ && NegativeEnum.parseOfValue(feature.get(i + 1).getProperty()) == NegativeEnum.DIGITS
|
|
|
+ && NegativeEnum.parseOfValue(feature.get(i + 2).getProperty()) == NegativeEnum.UNIT)
|
|
|
+ ||
|
|
|
+ (NegativeEnum.parseOfValue(feature.get(i).getProperty()) == NegativeEnum.SYMPTOM
|
|
|
+ && NegativeEnum.parseOfValue(feature.get(i + 1).getProperty()) == NegativeEnum.DIGITS
|
|
|
+ && NegativeEnum.parseOfValue(feature.get(i + 2).getProperty()) == NegativeEnum.EVENT_TIME)) {
|
|
|
featureType.add(feature.get(i).getText() + "\t" + feature.get(i + 1).getText() + "\t"
|
|
|
+ feature.get(i + 2).getText());
|
|
|
featureTypeState = false;
|
|
|
}
|
|
|
}
|
|
|
- if (i < feature.size() - 1 && featureTypeState) {
|
|
|
- if (NegativeEnum.parseOfValue(feature.get(i).getProperty()) == NegativeEnum.VITAL_INDEX
|
|
|
- && NegativeEnum.parseOfValue(feature.get(i + 1).getProperty()) == NegativeEnum.DIGITS) {
|
|
|
+ if (featureTypeState && i < feature.size() - 1) {
|
|
|
+ if ((NegativeEnum.parseOfValue(feature.get(i).getProperty()) == NegativeEnum.VITAL_INDEX
|
|
|
+ && NegativeEnum.parseOfValue(feature.get(i + 1).getProperty()) == NegativeEnum.DIGITS)
|
|
|
+ ||
|
|
|
+ (NegativeEnum.parseOfValue(feature.get(i).getProperty()) == NegativeEnum.SYMPTOM
|
|
|
+ && NegativeEnum.parseOfValue(feature.get(i + 1).getProperty()) == NegativeEnum.DIGITS)) {
|
|
|
featureType.add(feature.get(i).getText() + "\t" + feature.get(i + 1).getText());
|
|
|
}
|
|
|
}
|
|
@@ -298,56 +313,66 @@ public class ParamsDataProxy {
|
|
|
|
|
|
//将标准词中体征指标值(数字)与分词结果中体征指标值(数字)比较
|
|
|
private void judgment(SearchData sData, String[] features, Map<String, String> standWordMap) {
|
|
|
- if (">".equals(standWordMap.get("op"))) {
|
|
|
- //单独处理 血压≥140/90mmHg 类似情况
|
|
|
- if (features[1].contains("/")) {
|
|
|
- if (standWordMap.get("value").contains("/")) {
|
|
|
- String[] feature = features[1].split("/");
|
|
|
- Integer featuresSBP = Integer.valueOf(feature[0]); //分词特征收缩压
|
|
|
- Integer featuresDBP = Integer.valueOf(feature[1]); //分词特征舒张压
|
|
|
+ if (hasDigit(features[1])) {
|
|
|
+ if (">".equals(standWordMap.get("op"))) {
|
|
|
+ //单独处理 血压≥140/90mmHg 类似情况
|
|
|
+ if (features[1].contains("/")) {
|
|
|
+ if (standWordMap.get("value").contains("/")) {
|
|
|
+ String[] feature = features[1].split("/");
|
|
|
+ Integer featuresSBP = Integer.valueOf(feature[0]); //分词特征收缩压
|
|
|
+ Integer featuresDBP = Integer.valueOf(feature[1]); //分词特征舒张压
|
|
|
|
|
|
- String[] values = standWordMap.get("value").split("/");
|
|
|
- Integer standWordSBP = Integer.valueOf(values[0]); //标准词收缩压
|
|
|
- Integer standWordDBP = Integer.valueOf(values[1]); //标准词舒张压
|
|
|
- if (featuresSBP > standWordSBP && featuresDBP > standWordDBP) {
|
|
|
+ String[] values = standWordMap.get("value").split("/");
|
|
|
+ Integer standWordSBP = Integer.valueOf(values[0]); //标准词收缩压
|
|
|
+ Integer standWordDBP = Integer.valueOf(values[1]); //标准词舒张压
|
|
|
+ if (featuresSBP > standWordSBP && featuresDBP > standWordDBP) {
|
|
|
+ sData.setSymptom(sData.getSymptom() + "," + standWordMap.get("standword"));
|
|
|
+ System.out.println(sData.getSymptom());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ String num = getNum(standWordMap.get("value"));
|
|
|
+ if (Double.valueOf(getNum(features[1])) > Double.valueOf(num)) {
|
|
|
sData.setSymptom(sData.getSymptom() + "," + standWordMap.get("standword"));
|
|
|
System.out.println(sData.getSymptom());
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- String num = getNum(standWordMap.get("value"));
|
|
|
- if (Double.valueOf(getNum(features[1])) > Double.valueOf(num)) {
|
|
|
- sData.setSymptom(sData.getSymptom() + "," + standWordMap.get("standword"));
|
|
|
- System.out.println(sData.getSymptom());
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- } else if ("<".equals(standWordMap.get("op"))) {
|
|
|
- //单独处理 血压小于90/60mmHg 类似情况
|
|
|
- if (standWordMap.get("value").contains("/")) {
|
|
|
- if (features[1].contains("/")) {
|
|
|
- String[] feature = features[1].split("/");
|
|
|
- Integer featuresSBP = Integer.valueOf(feature[0]); //收缩压
|
|
|
- Integer featuresDBP = Integer.valueOf(feature[1]); //舒张压
|
|
|
+ } else if ("<".equals(standWordMap.get("op"))) {
|
|
|
+ //单独处理 血压小于90/60mmHg 类似情况
|
|
|
+ if (standWordMap.get("value").contains("/")) {
|
|
|
+ if (features[1].contains("/")) {
|
|
|
+ String[] feature = features[1].split("/");
|
|
|
+ Integer featuresSBP = Integer.valueOf(feature[0]); //收缩压
|
|
|
+ Integer featuresDBP = Integer.valueOf(feature[1]); //舒张压
|
|
|
|
|
|
- String[] values = standWordMap.get("value").split("/");
|
|
|
- Integer standWordSBP = Integer.valueOf(values[0]); //收缩压
|
|
|
- Integer standWordDBP = Integer.valueOf(values[1]); //舒张压
|
|
|
- if (featuresSBP < standWordSBP && featuresDBP < standWordDBP) {
|
|
|
+ String[] values = standWordMap.get("value").split("/");
|
|
|
+ Integer standWordSBP = Integer.valueOf(values[0]); //收缩压
|
|
|
+ Integer standWordDBP = Integer.valueOf(values[1]); //舒张压
|
|
|
+ if (featuresSBP < standWordSBP && featuresDBP < standWordDBP) {
|
|
|
+ sData.setSymptom(sData.getSymptom() + "," + standWordMap.get("standword"));
|
|
|
+ System.out.println(sData.getSymptom());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ String num = getNum(standWordMap.get("value"));
|
|
|
+ if (Double.valueOf(getNum(features[1])) < Double.valueOf(num)) {
|
|
|
sData.setSymptom(sData.getSymptom() + "," + standWordMap.get("standword"));
|
|
|
System.out.println(sData.getSymptom());
|
|
|
}
|
|
|
}
|
|
|
- } else {
|
|
|
- String num = getNum(standWordMap.get("value"));
|
|
|
- if (Double.valueOf(getNum(features[1])) < Double.valueOf(num)) {
|
|
|
- sData.setSymptom(sData.getSymptom() + "," + standWordMap.get("standword"));
|
|
|
- System.out.println(sData.getSymptom());
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private boolean hasDigit(String content) {
|
|
|
+ boolean flag = false;
|
|
|
+ if (Pattern.compile(".*\\d+.*").matcher(content).matches()) {
|
|
|
+ flag = true;
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
private String getNum(String standWord) {
|
|
|
StringBuffer sb = new StringBuffer();
|
|
|
for (String num : standWord.replaceAll("[^0-9]", ",").split(",")) {
|