From 7ef3d92f2c37a6492af9298d37785ed2cb6a20f4 Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Wed, 15 Nov 2023 10:41:59 +0800 Subject: [PATCH] [doc][chat]Add javadoc to rule-based semantic parsers --- .../chat/parser/rule/AggregateTypeParser.java | 6 ++++++ .../chat/parser/rule/ContextInheritParser.java | 5 +++++ .../chat/parser/rule/QueryModeParser.java | 17 +++++------------ .../chat/parser/rule/RuleBasedParser.java | 4 ++++ .../chat/parser/rule/TimeRangeParser.java | 7 +++++++ 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/AggregateTypeParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/AggregateTypeParser.java index e3275cb97..8172be750 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/AggregateTypeParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/AggregateTypeParser.java @@ -27,6 +27,12 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +/** + * AggregateTypeParser extracts aggregation type specified in the user query + * based on keyword matching. + * Currently, it supports 7 types of aggregation: max, min, sum, avg, topN, + * distinct count, count. + */ @Slf4j public class AggregateTypeParser implements SemanticParser { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/ContextInheritParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/ContextInheritParser.java index aa8d13e7d..e4ede5045 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/ContextInheritParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/ContextInheritParser.java @@ -28,6 +28,11 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import lombok.extern.slf4j.Slf4j; +/** + * ContextInheritParser tries to inherit certain schema elements from context + * so that in multi-turn conversations users don't need to mention some keyword + * repeatedly. + */ @Slf4j public class ContextInheritParser implements SemanticParser { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/QueryModeParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/QueryModeParser.java index 09c73ab61..4ff9ec839 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/QueryModeParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/QueryModeParser.java @@ -7,20 +7,21 @@ import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; -import java.util.HashMap; import java.util.List; -import java.util.Map; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; +/** + * QueryModeParser resolves a specific query mode according to co-appearance + * of certain schema element types. + */ @Slf4j public class QueryModeParser implements SemanticParser { @Override public void parse(QueryContext queryContext, ChatContext chatContext) { SchemaMapInfo mapInfo = queryContext.getMapInfo(); - // iterate all schemaElementMatches to resolve semantic query + // iterate all schemaElementMatches to resolve query mode for (Long modelId : mapInfo.getMatchedModels()) { List elementMatches = mapInfo.getMatchedElements(modelId); List queries = RuleSemanticQuery.resolve(elementMatches, queryContext); @@ -29,14 +30,6 @@ public class QueryModeParser implements SemanticParser { queryContext.getCandidateQueries().add(query); } } - // if modelElementMatches id empty,so remove it. - Map> filterModelElementMatches = new HashMap<>(); - for (Long modelId : queryContext.getMapInfo().getModelElementMatches().keySet()) { - if (!CollectionUtils.isEmpty(queryContext.getMapInfo().getModelElementMatches().get(modelId))) { - filterModelElementMatches.put(modelId, queryContext.getMapInfo().getModelElementMatches().get(modelId)); - } - } - queryContext.getMapInfo().setModelElementMatches(filterModelElementMatches); } } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/RuleBasedParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/RuleBasedParser.java index 792425c7e..6df80ed7e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/RuleBasedParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/RuleBasedParser.java @@ -8,6 +8,10 @@ import lombok.extern.slf4j.Slf4j; import java.util.Arrays; import java.util.List; +/** + * RuleBasedParser acts as a container that incorporates a group of + * rule-based semantic parsers. + */ @Slf4j public class RuleBasedParser implements SemanticParser { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/TimeRangeParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/TimeRangeParser.java index b51c12e3a..4024c96ea 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/TimeRangeParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/rule/TimeRangeParser.java @@ -24,6 +24,13 @@ import com.xkzhangsan.time.nlp.TimeNLPUtil; import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.util.Strings; +/** + * TimeRangeParser extracts time range specified in the user query + * based on keyword matching. + * Currently, it supports two kinds of expression: + * 1. Recent unit: 近N天/周/月/年、过去N天/周/月/年 + * 2. Concrete date: 2023年11月15日、20231115 + */ @Slf4j public class TimeRangeParser implements SemanticParser {