package com.smtaiserver.smtaiserver.javaai.metrics.base;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import org.apache.commons.text.similarity.JaccardSimilarity;
|
import org.dom4j.Document;
|
import org.dom4j.Element;
|
import org.dom4j.Node;
|
|
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
|
import com.smtaiserver.smtaiserver.core.SMTAIServerRequest;
|
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
|
import com.smtaiserver.smtaiserver.javaai.ast.ASTDBMap;
|
import com.smtservlet.util.Json;
|
import com.smtservlet.util.SMTStatic;
|
|
public abstract class SMTMetricsDefXml extends SMTMetricsDef
|
{
|
protected SMTMetricsSampleXml _sampleQuestionXml;
|
|
public void initInstance(DBRecord rec) throws Exception
|
{
|
super.initInstance(rec);
|
|
String sJsonMacro = rec.getString("metrics_macro");
|
Json jsonMacro = SMTStatic.isNullOrEmpty(sJsonMacro) ? null : Json.read(sJsonMacro);
|
|
String sXml = SMTAIServerApp.getApp().convGlobalMacroString(rec.getString("metrics_config"), jsonMacro);
|
Document doc = SMTStatic.convStrToXmlDoc("<ROOT>" + sXml + "</ROOT>");
|
|
Node nodeSampleQuestion = doc.selectSingleNode("ROOT/SAMPLE_QUESTIONS");
|
if(nodeSampleQuestion != null)
|
{
|
_sampleQuestionXml = new SMTMetricsSampleXml((Element)nodeSampleQuestion);
|
}
|
|
initInstanceByDoc(rec, doc);
|
}
|
|
protected void appendSampleQuestionToResponse(Json jsonAST, SMTAIServerRequest tranReq) throws Exception
|
{
|
List<String> listSampleQuestion = new ArrayList<>();
|
querySampleQuestionToList(jsonAST, tranReq, listSampleQuestion);
|
|
for(String sample : listSampleQuestion)
|
{
|
tranReq.addContentSampleQuestion(sample);
|
}
|
}
|
|
protected void querySampleQuestionToList(Json jsonAST, SMTAIServerRequest tranReq, List<String> r_list) throws Exception
|
{
|
if(_sampleQuestionXml == null)
|
return;
|
|
ASTDBMap dbMap = new ASTDBMap();
|
|
try
|
{
|
_sampleQuestionXml.createSampleQuestion(this, dbMap, jsonAST, tranReq, r_list);
|
}
|
finally
|
{
|
dbMap.close();
|
}
|
}
|
|
public void queryUnknowQuestionList(JaccardSimilarity jaccardSimilarity, String keyword, SMTAIServerRequest tranReq) throws Exception
|
{
|
for(String matchName : this._setMatch)
|
{
|
double curSim = jaccardSimilarity.apply(matchName, keyword);
|
if(curSim > 0.3 || keyword.indexOf(matchName) >= 0 || matchName.indexOf(keyword) >= 0)
|
{
|
List<String> listQuestion = new ArrayList<>();
|
querySampleQuestionToList(Json.object(), tranReq, listQuestion);
|
for(String question : listQuestion)
|
{
|
tranReq.addContentSampleQuestion(question);
|
}
|
break;
|
}
|
}
|
}
|
|
protected abstract void initInstanceByDoc(DBRecord rec, Document doc) throws Exception;
|
}
|