Search in sources :

Example 1 with Skill

use of org.openhab.ui.habot.nlp.Skill in project habot by ghys.

the class OpenNLPInterpreter method reply.

/**
 * This variant of interpret() returns a more complete interpretation result.
 *
 * @param locale the locale of the query
 * @param text the query text
 * @return the interpretation result as a {@link ChatReply} object
 * @throws InterpretationException
 */
public ChatReply reply(Locale locale, String text) throws InterpretationException {
    if (!locale.equals(currentLocale) || intentTrainer == null) {
        try {
            intentTrainer = new IntentTrainer(locale.getLanguage(), skills.values().stream().sorted(new Comparator<Skill>() {

                @Override
                public int compare(Skill o1, Skill o2) {
                    if (o1.getIntentId().equals("get-status")) {
                        return -1;
                    }
                    if (o2.getIntentId().equals("get-status")) {
                        return 1;
                    }
                    return o1.getIntentId().compareTo(o2.getIntentId());
                }
            }).collect(Collectors.toList()), getNameFinderTrainingDataFromTags(), this.tokenizerId);
            currentLocale = locale;
        } catch (Exception e) {
            InterpretationException fe = new InterpretationException("Error during trainer initialization: " + e.getMessage());
            fe.initCause(e);
            throw fe;
        }
    }
    ChatReply reply = new ChatReply(locale, text);
    Intent intent;
    // categorizer.
    if (!this.itemRegistry.getItemsByTag("object:" + text.toLowerCase()).isEmpty()) {
        intent = new Intent("get-status");
        intent.setEntities(new HashMap<String, String>());
        intent.getEntities().put("object", text.toLowerCase());
    } else if (!this.itemRegistry.getItemsByTag("location:" + text.toLowerCase()).isEmpty()) {
        intent = new Intent("get-status");
        intent.setEntities(new HashMap<String, String>());
        intent.getEntities().put("location", text.toLowerCase());
    } else {
        // Else, run it through the IntentTrainer
        intent = intentTrainer.interpret(text);
    }
    reply.setIntent(intent);
    Skill skill = skills.get(intent.getName());
    if (skill != null) {
        IntentInterpretation intentInterpretation = skill.interpret(intent, locale.getLanguage());
        if (intentInterpretation != null) {
            reply.setAnswer(intentInterpretation.getAnswer());
            if (intentInterpretation.getHint() != null) {
                reply.setHint(intentInterpretation.getHint());
            }
            if (intentInterpretation.getMatchedItems() != null) {
                reply.setMatchedItems(intentInterpretation.getMatchedItems().stream().map(i -> i.getName()).collect(Collectors.toList()).toArray(new String[0]));
            }
            if (intentInterpretation.getCard() != null) {
                reply.setCard(intentInterpretation.getCard());
            }
        }
    }
    return reply;
}
Also used : Arrays(java.util.Arrays) HashMap(java.util.HashMap) InterpretationException(org.eclipse.smarthome.core.voice.text.InterpretationException) RegistryChangeListener(org.eclipse.smarthome.core.common.registry.RegistryChangeListener) HashSet(java.util.HashSet) Component(org.osgi.service.component.annotations.Component) Locale(java.util.Locale) Skill(org.openhab.ui.habot.nlp.Skill) Map(java.util.Map) ChatReply(org.openhab.ui.habot.nlp.ChatReply) Activate(org.osgi.service.component.annotations.Activate) Intent(org.openhab.ui.habot.nlp.Intent) IntentInterpretation(org.openhab.ui.habot.nlp.IntentInterpretation) Deactivate(org.osgi.service.component.annotations.Deactivate) Collection(java.util.Collection) Set(java.util.Set) EventPublisher(org.eclipse.smarthome.core.events.EventPublisher) ReferencePolicy(org.osgi.service.component.annotations.ReferencePolicy) Collectors(java.util.stream.Collectors) Item(org.eclipse.smarthome.core.items.Item) BundleContext(org.osgi.framework.BundleContext) ItemRegistry(org.eclipse.smarthome.core.items.ItemRegistry) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) IOUtils(org.apache.commons.io.IOUtils) Modified(org.osgi.service.component.annotations.Modified) Comparator(java.util.Comparator) HumanLanguageInterpreter(org.eclipse.smarthome.core.voice.text.HumanLanguageInterpreter) Reference(org.osgi.service.component.annotations.Reference) Collections(java.util.Collections) NonNull(org.eclipse.jdt.annotation.NonNull) InputStream(java.io.InputStream) Skill(org.openhab.ui.habot.nlp.Skill) InterpretationException(org.eclipse.smarthome.core.voice.text.InterpretationException) HashMap(java.util.HashMap) ChatReply(org.openhab.ui.habot.nlp.ChatReply) Intent(org.openhab.ui.habot.nlp.Intent) IntentInterpretation(org.openhab.ui.habot.nlp.IntentInterpretation) InterpretationException(org.eclipse.smarthome.core.voice.text.InterpretationException) Comparator(java.util.Comparator)

Aggregations

InputStream (java.io.InputStream)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 Comparator (java.util.Comparator)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Locale (java.util.Locale)1 Map (java.util.Map)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1 IOUtils (org.apache.commons.io.IOUtils)1 NonNull (org.eclipse.jdt.annotation.NonNull)1 RegistryChangeListener (org.eclipse.smarthome.core.common.registry.RegistryChangeListener)1 EventPublisher (org.eclipse.smarthome.core.events.EventPublisher)1 Item (org.eclipse.smarthome.core.items.Item)1 ItemRegistry (org.eclipse.smarthome.core.items.ItemRegistry)1 HumanLanguageInterpreter (org.eclipse.smarthome.core.voice.text.HumanLanguageInterpreter)1 InterpretationException (org.eclipse.smarthome.core.voice.text.InterpretationException)1 ChatReply (org.openhab.ui.habot.nlp.ChatReply)1