1.定义识别类入口
@Slf4j
@Component
@Order(2)
public class Abc{
@Autowired
private ProcessFilter processFilter;
public void a(){
processFilter.doFilter(session);
}
}
填充Filter
@Slf4j
@Component
public class ProcessFilter {
@Autowired
private List<ServiceManagement> serviceManagementList;
public void doFilter(SessionContent session){
for(ServiceManagement management : serviceManagementList){
management.recognize(session);
}
}
}
2.创建接口
public interface ServiceManagement {
/**
* 识别处理 任何一个流程出问题,都要结束,不能继续往下
*/
void recognize(SessionContent session);
}
3.创建多个实现类
/**
* 自然语言识别
*/
@Slf4j
@Component
@Order(1)
public class NlpManagement extends UnifiedHandlingService implements ServiceManagement {
@Autowired
private Map<String, INatureLanguageProcessor> nlpProcessorMap ;
/**
* 识别处理 任何一个流程出问题,都要结束,不能继续往下
*
*/
@Override
public void recognize(SessionContent session) {
...
}
//多个识别方,可以多线程同时调用,等待返回,超时的另行处理记录,不超时的,比对结果,取最优的继续下一步
}
@Slf4j
@Component
@Order(2)
public class DialogManagement extends UnifiedHandlingService implements ServiceManagement {
/**
* 识别处理 任何一个流程出问题,都要结束,不能继续往下
*
*/
@Override
public void recognize(SessionContent session) {
...
}
}
/**
* 对话内容识别
*/
@Slf4j
@Component
@Order(3)
public class ContentManagement extends UnifiedHandlingService implements ServiceManagement {
/**
* 识别处理 任何一个流程出问题,都要结束,不能继续往下
*
*/
@Override
public void recognize(SessionContent session) {
...
}
/**
* 获取匹配内容
*/
public AbstractContentDialog getContentDialog(ContentEnum contentEnum){
return dialogFactory.createDialog(contentEnum);
}
}
//下面是对话工厂,获取对话匹配内容
@Component
public class DialogFactory {
@Autowired
private IQueryWordService queryWordService;
/**
* 根据领域 创建对话
* @param contentEnum
* @return
*/
public AbstractContentDialog createDialog(ContentEnum contentEnum){
switch (contentEnum){
case MATCH_DB:
return new MatchDbDialog(queryWordService);
case SINCE_NLP:
return new MatchSinceDialog(queryWordService);
default:
return null;
}
}
}
//定义对话内容接口
public abstract class AbstractContentDialog {
/**
* 查询对话内容
* @param session
* @return
*/
public abstract Object requestContent(SessionContent session);
}
//定义本地内容查询实现类
@Slf4j
public class MatchDbDialog extends AbstractContentDialog {
private IQueryWordService queryWordService;
public MatchDbDialog(IQueryWordService queryWordService){
this.queryWordService = queryWordService;
}
/**
* 查询对话内容
*
* @return
*/
@Override
public Object requestContent(SessionContent session) {
...
}
}
//定义第三方内容查询实现类
@Slf4j
public class MatchSinceDialog extends AbstractContentDialog {
private IQueryWordService queryWordService;
public MatchSinceDialog(IQueryWordService queryWordService){
this.queryWordService = queryWordService;
}
/**
* 查询对话内容
*
* @return
*/
@Override
public Object requestContent(SessionContent session) {
...
}
}