Я использую Loomo (продукт Segway) и пытаюсь внедрить в него NLP, чтобы он мог понимать общий английский при предоставлении команд.Я собирал пример кода, предоставленного Segway.Чтобы реализовать NLP, я делаю вызов API для Dialogflow и передаю распознанный текст (строковое представление параметра из метода onRecognitionResult).Тем не менее, я продолжаю получать ошибку «Out of Grammar», поскольку существуют GrammarConstraints для типа речи, который может быть распознан.Я включил изображение метода onRecognitionResult и GrammarConstraints ниже.Кто-нибудь работал над Loomo, который мог бы дать некоторое представление об обходном пути для реализации NLP?
Я пытался возиться с GrammarConstraints (что регулирует синтаксис), но он делает жизнеспособные командыболее структурированный, чем я хочу.Он должен понимать некоторые команды в любой грамматической форме.
mRecognitionListener = new RecognitionListener() {
@Override
public boolean onRecognitionResult(RecognitionResult recognitionResult) {
String url;
URL obj;
try {
url = "https://api.dialogflow.com/v1/query?v=20150910&lang=en&query=" +
URLEncoder.encode(recognitionResult.toString(), "UTF-8") +
"&sessionId=12345";
obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer " + CLIENT_ACCESS_TOKEN);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
Log.d(TAG, response.toString());
} catch (UnsupportedEncodingException e) {
Log.d(TAG, e.getMessage());
} catch (MalformedURLException e) {
Log.d(TAG, "Invalid URL: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, e.getMessage());
}
}
}
//GrammarConstraints
private void initControlGrammar() {
switch (mRecognitionLanguage) {
case Languages.EN_US:
Slot moveSlot = new Slot("move");
Slot toSlot = new Slot("to");
Slot orientationSlot = new Slot("orientation");
List<Slot> controlSlotList = new LinkedList<>();
moveSlot.setOptional(false);
moveSlot.addWord("turn");
moveSlot.addWord("move");
controlSlotList.add(moveSlot);
toSlot.setOptional(true);
toSlot.addWord("to the");
controlSlotList.add(toSlot);
orientationSlot.setOptional(false);
orientationSlot.addWord("right");
orientationSlot.addWord("left");
controlSlotList.add(orientationSlot);
mThreeSlotGrammar = new GrammarConstraint("three slots grammar",
controlSlotList);
break;
}
}