Search in sources :

Example 1 with Intent

use of ai.saiy.android.nlu.microsoft.Intent in project Saiy-PS by brandall76.

the class NLUCoerce method coerce.

/**
 * Coerce the NLP results into a generic {@link CommandRequest} object, validating the minimal
 * requirements for each implementation.
 */
public void coerce() {
    if (nluProvider instanceof NLUMicrosoft) {
        if (DEBUG) {
            MyLog.i(CLS_NAME, "coerce: instanceof NLUMicrosoft");
        }
        if (validateNLUNLUMicrosoft((NLUMicrosoft) nluProvider)) {
            for (final Intent i : ((NLUMicrosoft) nluProvider).getIntents()) {
                if (i.getScore() > NLUMicrosoft.MIN_THRESHOLD) {
                    commandRequest.setCC(NLUConstants.intentToCC(i.getIntent()));
                    if (!commandRequest.getCC().equals(CC.COMMAND_UNKNOWN)) {
                        final NLUMicrosoftHelper microsoftHelper = new NLUMicrosoftHelper();
                        commandRequest = microsoftHelper.prepareCommand(mContext, commandRequest, getSupportedLanguage(), ((NLUMicrosoft) nluProvider).getEntities());
                        if (commandRequest.isResolved()) {
                            break;
                        }
                        break;
                    } else {
                        if (DEBUG) {
                            MyLog.i(CLS_NAME, "coerce: COMMAND_UNKNOWN");
                        }
                        commandRequest.setCC(CC.COMMAND_UNKNOWN);
                        commandRequest.setResolved(false);
                    }
                } else {
                    if (DEBUG) {
                        MyLog.i(CLS_NAME, "coerce: below threshold: " + i.getScore());
                    }
                    commandRequest.setCC(CC.COMMAND_UNKNOWN);
                    commandRequest.setResolved(false);
                }
            }
            if (!commandRequest.isResolved()) {
                commandRequest.setCC(CC.COMMAND_UNKNOWN);
                commandRequest.setResolved(false);
            }
        } else {
            if (DEBUG) {
                MyLog.w(CLS_NAME, "coerce: NLUMicrosoft validation failed");
            }
            commandRequest.setCC(CC.COMMAND_UNKNOWN);
            commandRequest.setResolved(false);
        }
    } else if (nluProvider instanceof NLUNuance) {
        if (DEBUG) {
            MyLog.i(CLS_NAME, "coerce: instanceof NLUNuance");
        }
        if (validateNLUNuance((NLUNuance) nluProvider)) {
            for (final Interpretation interpretation : ((NLUNuance) nluProvider).getInterpretations()) {
                if (interpretation.getAction().getIntent().getConfidence() > NLUNuance.MIN_THRESHOLD) {
                    commandRequest.setCC(NLUConstants.intentToCC(interpretation.getAction().getIntent().getValue()));
                    if (!commandRequest.getCC().equals(CC.COMMAND_UNKNOWN)) {
                        final NLUNuanceHelper nuanceHelper = new NLUNuanceHelper();
                        commandRequest = nuanceHelper.prepareCommand(mContext, commandRequest, getSupportedLanguage(), interpretation.getConcept());
                        if (commandRequest.isResolved()) {
                            break;
                        }
                    } else {
                        if (DEBUG) {
                            MyLog.i(CLS_NAME, "coerce: COMMAND_UNKNOWN");
                        }
                        commandRequest.setCC(CC.COMMAND_UNKNOWN);
                        commandRequest.setResolved(false);
                    }
                } else {
                    if (DEBUG) {
                        MyLog.i(CLS_NAME, "coerce: below threshold: " + interpretation.getAction().getIntent().getConfidence());
                    }
                    commandRequest.setCC(CC.COMMAND_UNKNOWN);
                    commandRequest.setResolved(false);
                }
            }
            if (!commandRequest.isResolved()) {
                commandRequest.setCC(CC.COMMAND_UNKNOWN);
                commandRequest.setResolved(false);
            }
        } else {
            if (DEBUG) {
                MyLog.w(CLS_NAME, "coerce: NLUNuance validation failed");
            }
            commandRequest.setCC(CC.COMMAND_UNKNOWN);
            commandRequest.setResolved(false);
        }
    } else if (nluProvider instanceof NLUAPIAI) {
        if (DEBUG) {
            MyLog.i(CLS_NAME, "coerce: instanceof NLUAPIAI");
        }
        if (validateNLUAPIAI((NLUAPIAI) nluProvider)) {
            commandRequest.setCC(NLUConstants.intentToCC(((NLUAPIAI) nluProvider).getIntent()));
            if (!commandRequest.getCC().equals(CC.COMMAND_UNKNOWN)) {
                final NLUAPIAIHelper apiaiHelper = new NLUAPIAIHelper();
                commandRequest = apiaiHelper.prepareCommand(mContext, commandRequest, getSupportedLanguage(), ((NLUAPIAI) nluProvider).getParameters());
                if (!commandRequest.isResolved()) {
                    commandRequest.setCC(CC.COMMAND_UNKNOWN);
                    commandRequest.setResolved(false);
                }
            } else {
                if (DEBUG) {
                    MyLog.i(CLS_NAME, "coerce: COMMAND_UNKNOWN");
                }
                commandRequest.setCC(CC.COMMAND_UNKNOWN);
                commandRequest.setResolved(false);
            }
        } else {
            if (DEBUG) {
                MyLog.w(CLS_NAME, "coerce: NLUAPIAI validation failed");
            }
            commandRequest.setCC(CC.COMMAND_UNKNOWN);
            commandRequest.setResolved(false);
        }
    } else if (nluProvider instanceof NLUWit) {
        if (DEBUG) {
            MyLog.i(CLS_NAME, "coerce: instanceof NLUWit");
        }
    // TODO
    } else if (nluProvider instanceof NLUBluemix) {
        if (DEBUG) {
            MyLog.i(CLS_NAME, "coerce: instanceof NLUBluemix");
        }
    // TODO
    } else {
        if (DEBUG) {
            MyLog.i(CLS_NAME, "coerce: instanceof NLUSaiy");
        }
        if (validateNLUSaiy((NLUSaiy) nluProvider)) {
            for (final ai.saiy.android.nlu.saiy.Intent intent : ((NLUSaiy) nluProvider).getIntents()) {
                commandRequest.setCC(NLUConstants.intentToCC(intent.getIntent()));
                if (!commandRequest.getCC().equals(CC.COMMAND_UNKNOWN)) {
                    final NLUSaiyHelper saiyHelper = new NLUSaiyHelper();
                    commandRequest = saiyHelper.prepareCommand(mContext, commandRequest, getSupportedLanguage(), intent.getEntities());
                    if (commandRequest.isResolved()) {
                        break;
                    }
                    break;
                } else {
                    if (DEBUG) {
                        MyLog.i(CLS_NAME, "coerce: COMMAND_UNKNOWN");
                    }
                    commandRequest.setCC(CC.COMMAND_UNKNOWN);
                    commandRequest.setResolved(false);
                }
            }
            if (!commandRequest.isResolved()) {
                commandRequest.setCC(CC.COMMAND_UNKNOWN);
                commandRequest.setResolved(false);
            }
        } else {
            if (DEBUG) {
                MyLog.w(CLS_NAME, "coerce: NLUSaiy validation failed");
            }
            commandRequest.setCC(CC.COMMAND_UNKNOWN);
            commandRequest.setResolved(false);
        }
    }
    commandRequest.setResultsArray(getResultsArray());
    new Quantum(mContext).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, commandRequest);
}
Also used : NLUSaiyHelper(ai.saiy.android.nlu.saiy.NLUSaiyHelper) NLUNuanceHelper(ai.saiy.android.nlu.nuance.NLUNuanceHelper) Intent(ai.saiy.android.nlu.microsoft.Intent) NLUMicrosoft(ai.saiy.android.nlu.microsoft.NLUMicrosoft) Interpretation(ai.saiy.android.nlu.nuance.Interpretation) NLUMicrosoftHelper(ai.saiy.android.nlu.microsoft.NLUMicrosoftHelper) NLUNuance(ai.saiy.android.nlu.nuance.NLUNuance) NLUAPIAI(ai.saiy.android.nlu.apiai.NLUAPIAI) Quantum(ai.saiy.android.processing.Quantum) NLUAPIAIHelper(ai.saiy.android.nlu.apiai.NLUAPIAIHelper) NLUBluemix(ai.saiy.android.nlu.bluemix.NLUBluemix) NLUWit(ai.saiy.android.nlu.wit.NLUWit) NLUSaiy(ai.saiy.android.nlu.saiy.NLUSaiy)

Example 2 with Intent

use of ai.saiy.android.nlu.microsoft.Intent in project Saiy-PS by brandall76.

the class NLUCoerce method validateNLUNLUMicrosoft.

/**
 * Validate the parameters prior to use.
 *
 * @param nluMicrosoft the {@link NLUMicrosoft} response object
 * @return true if the minimum parameters are present, false otherwise.
 */
private boolean validateNLUNLUMicrosoft(@NonNull final NLUMicrosoft nluMicrosoft) {
    if (DEBUG) {
        MyLog.i(CLS_NAME, "validateNLUNLUMicrosoft");
    }
    if (UtilsString.notNaked(nluMicrosoft.getQuery())) {
        if (DEBUG) {
            MyLog.i(CLS_NAME, "query: " + nluMicrosoft.getQuery());
        }
        final List<Intent> intents = nluMicrosoft.getIntents();
        if (UtilsList.notNaked(intents)) {
            for (final Intent i : intents) {
                if (UtilsString.notNaked(i.getIntent())) {
                    if (DEBUG) {
                        MyLog.i(CLS_NAME, "getIntent: " + i.getIntent());
                        MyLog.i(CLS_NAME, "getScore: " + i.getScore());
                    }
                } else {
                    if (DEBUG) {
                        MyLog.w(CLS_NAME, "validateNLUNLUMicrosoft: intent naked");
                    }
                    return false;
                }
            }
            final List<Entity> entities = nluMicrosoft.getEntities();
            if (entities != null) {
                final int entitiesSize = entities.size();
                if (entitiesSize > 0) {
                    for (int i = 0; i < entitiesSize; i++) {
                        if (UtilsString.notNaked(entities.get(i).getEntity()) && UtilsString.notNaked(entities.get(i).getType())) {
                            if (DEBUG) {
                                MyLog.i(CLS_NAME, "getEntity: " + entities.get(i).getEntity());
                                MyLog.i(CLS_NAME, "getType: " + entities.get(i).getType());
                                MyLog.i(CLS_NAME, "getStartIndex: " + entities.get(i).getStartIndex());
                                MyLog.i(CLS_NAME, "getEndIndex: " + entities.get(i).getEndIndex());
                                MyLog.i(CLS_NAME, "getScore: " + entities.get(i).getScore());
                            }
                            if (i == (entitiesSize - 1)) {
                                return true;
                            }
                        } else {
                            if (DEBUG) {
                                MyLog.w(CLS_NAME, "validateNLUNLUMicrosoft: entity/type naked");
                            }
                            break;
                        }
                    }
                } else {
                    if (DEBUG) {
                        MyLog.i(CLS_NAME, "validateNLUNLUMicrosoft: no entities to examine");
                    }
                    return true;
                }
            } else {
                if (DEBUG) {
                    MyLog.w(CLS_NAME, "validateNLUNLUMicrosoft: entities null");
                }
            }
        } else {
            if (DEBUG) {
                MyLog.w(CLS_NAME, "validateNLUNLUMicrosoft: intents naked");
            }
        }
    } else {
        if (DEBUG) {
            MyLog.w(CLS_NAME, "validateNLUNLUMicrosoft: query naked");
        }
    }
    return false;
}
Also used : Entity(ai.saiy.android.nlu.microsoft.Entity) Intent(ai.saiy.android.nlu.microsoft.Intent)

Example 3 with Intent

use of ai.saiy.android.nlu.microsoft.Intent in project Saiy-PS by brandall76.

the class NLUCoerce method validateNLUSaiy.

/**
 * Validate the parameters prior to use.
 *
 * @param nluSaiy the {@link NLUSaiy} response object
 * @return true if the minimum parameters are present, false otherwise.
 */
private boolean validateNLUSaiy(@NonNull final NLUSaiy nluSaiy) {
    if (DEBUG) {
        MyLog.i(CLS_NAME, "validateNLUSaiy");
    }
    final List<String> results = nluSaiy.getResults();
    if (UtilsList.notNaked(results)) {
        final float[] confidence = nluSaiy.getConfidence();
        if (UtilsList.notNaked(confidence)) {
            final List<ai.saiy.android.nlu.saiy.Intent> intents = nluSaiy.getIntents();
            if (UtilsList.notNaked(intents)) {
                for (final ai.saiy.android.nlu.saiy.Intent intent : intents) {
                    if (DEBUG) {
                        MyLog.i(CLS_NAME, "getIntent: " + intent.getIntent());
                        MyLog.i(CLS_NAME, "getType: " + intent.getConfidence());
                    }
                    final List<ai.saiy.android.nlu.saiy.Entity> entities = intent.getEntities();
                    if (UtilsList.notNaked(entities)) {
                        final int entitiesSize = entities.size();
                        for (int i = 0; i < entitiesSize; i++) {
                            if (DEBUG) {
                                MyLog.i(CLS_NAME, "getVoiceName: " + entities.get(i).getName());
                                MyLog.i(CLS_NAME, "getVoiceName: " + entities.get(i).getValue());
                                MyLog.i(CLS_NAME, "getVoiceName: " + entities.get(i).getConfidence());
                                MyLog.i(CLS_NAME, "getContextual: " + entities.get(i).getContextual());
                                MyLog.i(CLS_NAME, "getVoiceName: " + Arrays.toString(entities.get(i).getIndex()));
                            }
                            final List<ai.saiy.android.nlu.saiy.Context> contexts = entities.get(i).getContextual();
                            for (final ai.saiy.android.nlu.saiy.Context context : contexts) {
                                if (DEBUG) {
                                    MyLog.i(CLS_NAME, "getContext: " + context.getContext());
                                    MyLog.i(CLS_NAME, "getConfidence: " + context.getConfidence());
                                }
                                final List<ContextValue> contextValues = context.getContextValues();
                                for (final ContextValue contextValue : contextValues) {
                                    if (DEBUG) {
                                        MyLog.i(CLS_NAME, "getIdentifier: " + contextValue.getIdentifier());
                                    }
                                }
                            }
                            if (i == (entitiesSize - 1)) {
                                return true;
                            }
                        }
                    } else {
                        if (DEBUG) {
                            MyLog.w(CLS_NAME, "validateNLUSaiy: entities naked");
                        }
                    }
                }
            } else {
                if (DEBUG) {
                    MyLog.w(CLS_NAME, "validateNLUSaiy: intents naked");
                }
            }
        } else {
            if (DEBUG) {
                MyLog.w(CLS_NAME, "validateNLUSaiy: confidence naked");
            }
        }
    } else {
        if (DEBUG) {
            MyLog.w(CLS_NAME, "validateNLUSaiy: results naked");
        }
    }
    return false;
}
Also used : Context(android.content.Context) Entity(ai.saiy.android.nlu.microsoft.Entity) Intent(ai.saiy.android.nlu.microsoft.Intent) UtilsString(ai.saiy.android.utils.UtilsString) ContextValue(ai.saiy.android.nlu.saiy.ContextValue)

Aggregations

Intent (ai.saiy.android.nlu.microsoft.Intent)3 Entity (ai.saiy.android.nlu.microsoft.Entity)2 NLUAPIAI (ai.saiy.android.nlu.apiai.NLUAPIAI)1 NLUAPIAIHelper (ai.saiy.android.nlu.apiai.NLUAPIAIHelper)1 NLUBluemix (ai.saiy.android.nlu.bluemix.NLUBluemix)1 NLUMicrosoft (ai.saiy.android.nlu.microsoft.NLUMicrosoft)1 NLUMicrosoftHelper (ai.saiy.android.nlu.microsoft.NLUMicrosoftHelper)1 Interpretation (ai.saiy.android.nlu.nuance.Interpretation)1 NLUNuance (ai.saiy.android.nlu.nuance.NLUNuance)1 NLUNuanceHelper (ai.saiy.android.nlu.nuance.NLUNuanceHelper)1 ContextValue (ai.saiy.android.nlu.saiy.ContextValue)1 NLUSaiy (ai.saiy.android.nlu.saiy.NLUSaiy)1 NLUSaiyHelper (ai.saiy.android.nlu.saiy.NLUSaiyHelper)1 NLUWit (ai.saiy.android.nlu.wit.NLUWit)1 Quantum (ai.saiy.android.processing.Quantum)1 UtilsString (ai.saiy.android.utils.UtilsString)1 Context (android.content.Context)1