【语音识别逻辑修改】
This commit is contained in:
parent
53fd77af5c
commit
621cd8befa
@ -89,10 +89,10 @@ public class VoiceParseServiceImpl implements VoiceParseService {
|
||||
}
|
||||
// 匹配指令
|
||||
for (VoiceDiscriminateRule rule : ruleList) {
|
||||
List<String> matchGroupList = keyWordsMatch(rule.getKeyWordRules(), result.getMatchOriginContent());
|
||||
if (!CollectionUtils.isEmpty(matchGroupList)) {
|
||||
Matcher matcher = keyWordsMatch(rule.getKeyWordRules(), result.getMatchOriginContent());
|
||||
if (matcher != null) {
|
||||
result.setRule(rule);
|
||||
result.setMatchGroupList(matchGroupList);
|
||||
result.setMatcher(matcher);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -107,16 +107,13 @@ public class VoiceParseServiceImpl implements VoiceParseService {
|
||||
* @param content 语音内容
|
||||
* @return groupList
|
||||
*/
|
||||
private List<String> keyWordsMatch(String patternStr, String content) {
|
||||
List<String> groupList = new ArrayList<>();
|
||||
private Matcher keyWordsMatch(String patternStr, String content) {
|
||||
Pattern pattern = Pattern.compile(translateToPinYin(patternStr));// 匹配的模式
|
||||
Matcher matcher = pattern.matcher(content);
|
||||
if (matcher.find()) {
|
||||
for (int index = 1, size = matcher.groupCount(); index <= size; index++) {
|
||||
groupList.add(matcher.group(index));
|
||||
return matcher;
|
||||
}
|
||||
}
|
||||
return groupList;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -126,12 +123,11 @@ public class VoiceParseServiceImpl implements VoiceParseService {
|
||||
* @param result 结果信息
|
||||
*/
|
||||
private void paramExtract(Simulation simulation, VoiceDiscriminateResult result) {
|
||||
List<String> groupList = result.getMatchGroupList();
|
||||
List<ParamExtractRule> paramsRules = result.getRule().getParamsRules();
|
||||
List<ParamExtractResult> paramExtractResults = new ArrayList<>(paramsRules.size());
|
||||
ParamExtractResult extractResult = null;
|
||||
String[] groupStrArr = null;
|
||||
int groupSize = groupList.size();
|
||||
int groupSize = result.getGroupCount();
|
||||
for (ParamExtractRule rule : paramsRules) {
|
||||
if (rule.getIndexArr() != null) { // 如果定位信息不为空
|
||||
groupStrArr = new String[rule.getIndexArr().length];
|
||||
@ -141,7 +137,7 @@ public class VoiceParseServiceImpl implements VoiceParseService {
|
||||
result.setMsg("提取参数出错");
|
||||
return;
|
||||
}
|
||||
groupStrArr[index] = groupList.get(rule.getIndexArr()[index]);
|
||||
groupStrArr[index] = result.getGroup(rule.getIndexArr()[index]);
|
||||
}
|
||||
}
|
||||
extractResult = new ParamExtractResult();
|
||||
|
@ -28,7 +28,7 @@ public enum ExtractRule {
|
||||
|
||||
STATION_NAME_EXTRACT("根据车站名称匹配车站") {
|
||||
@Override
|
||||
public Object matchParam(Simulation simulation, String... sourceStr) {
|
||||
public Object matchParam(Simulation simulation, String[] sourceStr) {
|
||||
if (sourceStr == null || sourceStr.length == 0) {
|
||||
throw new IllegalArgumentException("定位参数不缺失");
|
||||
}
|
||||
@ -36,37 +36,22 @@ public enum ExtractRule {
|
||||
// 这里可能需要做对入参做一些处理
|
||||
String stationName = sourceStr[0];
|
||||
return findDevice(simulation, MapElement.DeviceType.STATION,Station.class,stationName);
|
||||
|
||||
/* Optional<Station> stationOptional = simulation.getRepository().getStationList().stream()
|
||||
.filter(station -> Objects.equals(stationName, PinYinUtil.toPinYin(station.getName())))
|
||||
.findFirst();
|
||||
if (stationOptional.isPresent()) {
|
||||
return stationOptional.get();
|
||||
}
|
||||
throw new IllegalArgumentException("未找到【" + stationName + "】车站");*/
|
||||
}
|
||||
},
|
||||
ROUTE_NAME_EXTRACT("根据进路名称匹配进路") {
|
||||
@Override
|
||||
public Object matchParam(Simulation simulation, String... sourceStr) {
|
||||
public Object matchParam(Simulation simulation, String[] sourceStr) {
|
||||
if (sourceStr == null || sourceStr.length == 0) {
|
||||
throw new IllegalArgumentException("定位参数不缺失");
|
||||
}
|
||||
// 这里可能对X、S做处理
|
||||
String routeName = sourceStr[0];
|
||||
return findDevice(simulation, MapElement.DeviceType.ROUTE,Route.class,routeName);
|
||||
/* Optional<Route> routeOptional = simulation.getRepository().getRouteList().stream()
|
||||
.filter(route -> Objects.equals(route.getName(), routeName))
|
||||
.findFirst();
|
||||
if (routeOptional.isPresent()) {
|
||||
return routeOptional.get();
|
||||
}
|
||||
throw new IllegalArgumentException("未找到【" + routeName + "】进路");*/
|
||||
}
|
||||
},
|
||||
ROUTE_SIGNAL_EXTRACT("根据起始、终点信号机匹配进路") {
|
||||
@Override
|
||||
public Object matchParam(Simulation simulation, String... sourceStr) {
|
||||
public Object matchParam(Simulation simulation, String[] sourceStr) {
|
||||
if (sourceStr == null || sourceStr.length < 2) {
|
||||
throw new IllegalArgumentException("定位参数缺失");
|
||||
}
|
||||
@ -85,19 +70,18 @@ public enum ExtractRule {
|
||||
if (routeOptional.isPresent()) {
|
||||
return routeOptional.get();
|
||||
}
|
||||
// throw new IllegalArgumentException("未找到【" + startSignalName + "-" + endSignalName + "】进路");
|
||||
throw new IllegalArgumentException(String.format("未找到信号机始端[%s-%s],终端[%s-%s]",startSignalName,startSignal.getName(),endSignalName,endSinal.getName()));
|
||||
throw new IllegalArgumentException(String.format("未找到信号机始端[%s-%s],终端[%s-%s]",startSignalName, startSignal.getName(), endSignalName, endSinal.getName()));
|
||||
}
|
||||
},
|
||||
STAND_STATION_UP_DOWN_EXTRACT("根据车站、上下行匹配站台") {
|
||||
@Override
|
||||
public Object matchParam(Simulation simulation, String... sourceStr) {
|
||||
public Object matchParam(Simulation simulation, String[] sourceStr) {
|
||||
if (sourceStr == null || sourceStr.length < 2) {
|
||||
throw new IllegalArgumentException("定位参数缺失");
|
||||
}
|
||||
String stationName = sourceStr[0], upDown = sourceStr[1];
|
||||
Station station = (Station) STATION_NAME_EXTRACT.matchParam(simulation, stationName);
|
||||
Boolean right = (Boolean) UP_DOWN_WAY.matchParam(simulation,upDown);
|
||||
Station station = (Station) STATION_NAME_EXTRACT.matchParam(simulation, new String[] {stationName});
|
||||
Boolean right = (Boolean) UP_DOWN_WAY.matchParam(simulation,new String[]{upDown});
|
||||
List<Stand> stands = station.getStandOf(right);
|
||||
if(CollectionUtils.isEmpty(stands)){
|
||||
throw new IllegalArgumentException(String.format("不能获取对应的站台 车站[%s-%s],上下行[%s-%s]",stationName,station.getCode(),upDown,right));
|
||||
@ -107,7 +91,7 @@ public enum ExtractRule {
|
||||
}
|
||||
},UP_DOWN_WAY("车辆上下行"){
|
||||
@Override
|
||||
public Object matchParam(Simulation simulation, String... sourceStr) {
|
||||
public Object matchParam(Simulation simulation, String[] sourceStr) {
|
||||
String way = sourceStr[0];
|
||||
if(StringUtils.containsIgnoreCase(way,"shang")){
|
||||
return true;
|
||||
@ -118,7 +102,7 @@ public enum ExtractRule {
|
||||
}
|
||||
},SWITCH_NAME("道岔名称"){
|
||||
@Override
|
||||
public Object matchParam(Simulation simulation, String... sourceStr) {
|
||||
public Object matchParam(Simulation simulation, String[] sourceStr) {
|
||||
String swtichName = sourceStr[0];
|
||||
return ExtractRule.findDevice(simulation, MapElement.DeviceType.SWITCH,Switch.class,swtichName);
|
||||
}
|
||||
@ -134,7 +118,7 @@ public enum ExtractRule {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public abstract Object matchParam(Simulation simulation, String... sourceStr);
|
||||
public abstract Object matchParam(Simulation simulation, String[] sourceStr);
|
||||
|
||||
private static MapNamedElement findDevice(Simulation simulation, MapElement.DeviceType dt, Class<? extends MapNamedElement> eleClass,String matchVal){
|
||||
List<? extends MapNamedElement> eleList = simulation.getRepository().getListByType(dt,eleClass);
|
||||
|
@ -4,6 +4,8 @@ import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
/**
|
||||
* 语音解析结果
|
||||
@ -33,9 +35,14 @@ public class VoiceDiscriminateResult {
|
||||
private VoiceDiscriminateRule rule;
|
||||
|
||||
/**
|
||||
* 匹配指令结果
|
||||
* 原始匹配指令结果
|
||||
*/
|
||||
private List<String> matchGroupList;
|
||||
private Matcher matcher;
|
||||
|
||||
/**
|
||||
* 纠正过的group map
|
||||
*/
|
||||
private Map<Integer, String> correctGroupStr;
|
||||
|
||||
/**
|
||||
* 参数提取集合
|
||||
@ -53,4 +60,25 @@ public class VoiceDiscriminateResult {
|
||||
public String getMatchOriginContent() {
|
||||
return this.originPinYin;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取匹配到group数量
|
||||
* @return 数量
|
||||
*/
|
||||
public int getGroupCount() {
|
||||
return matcher == null ? 0 : matcher.groupCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据索引获取group 原始
|
||||
*
|
||||
* @param index 位置
|
||||
* @return group
|
||||
*/
|
||||
public String getGroup(int index) {
|
||||
if (index > getGroupCount()) {
|
||||
throw new IllegalArgumentException("out of index");
|
||||
}
|
||||
return matcher.group(index);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user