Merge pull request #2 from lexluo09/master

[improvement](chat) add mapping log and optimize get domainId
This commit is contained in:
lexluo09
2023-06-12 23:59:23 +08:00
committed by GitHub
4 changed files with 18 additions and 12 deletions

View File

@@ -144,7 +144,7 @@ public class SearchServiceImpl implements SearchService {
String nature = natureToNameEntry.getKey(); String nature = natureToNameEntry.getKey();
String wordName = natureToNameEntry.getValue(); String wordName = natureToNameEntry.getValue();
Integer domain = BaseWordNature.getDomain(nature); Integer domain = NatureHelper.getDomain(nature);
SchemaElementType schemaElementType = NatureConverter.convertTo(nature); SchemaElementType schemaElementType = NatureConverter.convertTo(nature);
if (SchemaElementType.ENTITY.equals(schemaElementType)) { if (SchemaElementType.ENTITY.equals(schemaElementType)) {
@@ -219,7 +219,7 @@ public class SearchServiceImpl implements SearchService {
for (MapResult mapResult : mapResults) { for (MapResult mapResult : mapResults) {
List<DomainWithSemanticType> dimensionMetricClassIds = mapResult.getNatures().stream() List<DomainWithSemanticType> dimensionMetricClassIds = mapResult.getNatures().stream()
.map(nature -> new DomainWithSemanticType(BaseWordNature.getDomain(nature), .map(nature -> new DomainWithSemanticType(NatureHelper.getDomain(nature),
NatureConverter.convertTo(nature))) NatureConverter.convertTo(nature)))
.filter(entry -> matchCondition(entry, possibleDomains)).collect(Collectors.toList()); .filter(entry -> matchCondition(entry, possibleDomains)).collect(Collectors.toList());

View File

@@ -2,6 +2,7 @@ package com.tencent.supersonic.chat.application.knowledge;
import com.hankcs.hanlp.corpus.tag.Nature; import com.hankcs.hanlp.corpus.tag.Nature;
import com.hankcs.hanlp.seg.common.Term; import com.hankcs.hanlp.seg.common.Term;
import com.tencent.supersonic.chat.application.mapper.HanlpSchemaMapper;
import com.tencent.supersonic.chat.domain.pojo.search.DomainInfoStat; import com.tencent.supersonic.chat.domain.pojo.search.DomainInfoStat;
import com.tencent.supersonic.common.nlp.NatureType; import com.tencent.supersonic.common.nlp.NatureType;
import com.tencent.supersonic.knowledge.application.online.BaseWordNature; import com.tencent.supersonic.knowledge.application.online.BaseWordNature;
@@ -13,13 +14,15 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* nature parse helper * nature parse helper
*/ */
public class NatureHelper { public class NatureHelper {
private static final Logger LOGGER = LoggerFactory.getLogger(NatureHelper.class);
private static boolean isDomainOrEntity(Term term, Integer domain) { private static boolean isDomainOrEntity(Term term, Integer domain) {
return (NatureType.NATURE_SPILT + domain).equals(term.nature.toString()) || term.nature.toString() return (NatureType.NATURE_SPILT + domain).equals(term.nature.toString()) || term.nature.toString()
.endsWith(NatureType.ENTITY.getType()); .endsWith(NatureType.ENTITY.getType());
@@ -36,8 +39,16 @@ public class NatureHelper {
} }
public static Integer getDomain(String nature) { public static Integer getDomain(String nature) {
String[] split = nature.split(NatureType.NATURE_SPILT); try {
return Integer.valueOf(split[1]); String[] split = nature.split(NatureType.NATURE_SPILT);
if (split.length <= 1) {
return null;
}
return Integer.valueOf(split[1]);
} catch (NumberFormatException e) {
LOGGER.error("", e);
}
return null;
} }
public static boolean isDimensionValueClassId(String nature) { public static boolean isDimensionValueClassId(String nature) {
@@ -96,7 +107,7 @@ public class NatureHelper {
term -> term.nature.startsWith(NatureType.NATURE_SPILT) term -> term.nature.startsWith(NatureType.NATURE_SPILT)
).forEach(term -> { ).forEach(term -> {
NatureType natureType = NatureType.getNatureType(String.valueOf(term.nature)); NatureType natureType = NatureType.getNatureType(String.valueOf(term.nature));
Integer domain = BaseWordNature.getDomain(String.valueOf(term.nature)); Integer domain = getDomain(String.valueOf(term.nature));
Map<NatureType, Integer> natureTypeMap = new HashMap<>(); Map<NatureType, Integer> natureTypeMap = new HashMap<>();
natureTypeMap.put(natureType, 1); natureTypeMap.put(natureType, 1);

View File

@@ -37,6 +37,7 @@ public class HanlpSchemaMapper implements SchemaMapper {
QueryMatchStrategy matchStrategy = ContextUtils.getBean(QueryMatchStrategy.class); QueryMatchStrategy matchStrategy = ContextUtils.getBean(QueryMatchStrategy.class);
List<MapResult> matches = matchStrategy.match(searchCtx.getQueryText(), terms, 0); List<MapResult> matches = matchStrategy.match(searchCtx.getQueryText(), terms, 0);
LOGGER.info("searchCtx:{},matches:{}", searchCtx, matches);
convertTermsToSchemaMapInfo(matches, searchCtx.getMapInfo()); convertTermsToSchemaMapInfo(matches, searchCtx.getMapInfo());
} }

View File

@@ -48,10 +48,4 @@ public abstract class BaseWordNature {
} }
return 0; return 0;
} }
public static Integer getDomain(String nature) {
String[] split = nature.split(NatureType.NATURE_SPILT);
return Integer.valueOf(split[1]);
}
} }