Как извлечь токен свободного текста из пользовательского ввода

Как показано во многих примерах, вы можете легко извлечь значения сущностей из ответа, как в следующем диалоговом окне:

  • Ватсон: Хорошо! Какую музыку вы хотели бы услышать?

  • Пользователь: Симфонический

  • Ватсон: Хорошо, играю симфоническую.

Вы можете получить такой же ответ от Watson, когда пользователь говорит «Я хочу послушать симфонический», а не просто «Симфонический», при условии, что:

  • У намерения #i_want_to_hear есть примеры: «Симфонический», «Я хочу послушать рок», «Я хотел бы послушать джаз».

  • Сущность @genre имеет значение @genre:symphonic

  • Условие узла: @genre

  • Выходной текст узла: «ОК! Играет @genre».

Могу ли я добиться такой же надежности, если вопрос касается свободного текста (имени) вместо объекта? Например:

  • Ватсон: Как тебя зовут?

  • Пользователь: Анна

  • Ватсон: Приятно познакомиться, Анна.

Если условие узла истинно, а выходной текст — «Приятно познакомиться, input_text», это не сработает с таким ответом, как «Меня зовут Анна».

Я не могу следовать подходу @genre, описанному выше, потому что я не могу создать сущность "имя" с другим значением для каждого возможного имени.

Если нет простого решения, может быть, я могу взять последнее слово в ответе пользователя, так как оно всегда одно из:

  • Анна

  • я Анна

  • Меня зовут Анна

  • это Анна

Итак, мой второй вопрос: как извлечь последнее слово из ответа, чтобы использовать его в выходном тексте и в контексте?

Спасибо


person Francis Friedlander    schedule 13.09.2016    source источник
comment
Получить имя человека на самом деле довольно сложно. Даже если вы решите выше, у него будет больше проблем. Недавно я писал об этом в блоге. sodoherty.com/2016/09/11/what-is-your -имя   -  person Simon O'Doherty    schedule 13.09.2016


Ответы (1)


Вы можете извлечь части ввода из input.text с помощью регулярных выражений, используя метод .extract, определенный в типе String:

Из нашего документа:

String.extract(String regexp, Integer groupIndex)

Пользовательский метод. Этот метод возвращает строку, извлеченную по указанному групповому индексу входного регулярного выражения. В следующей серии показан пример работы метода .extract:

Ввод.текст "Привет 123456".

ДиалогУзел:

"context" : {
    "number_extract" : "<? input.text.extract('[\\d]+',0) ?>"
}

Обратите внимание, что для обработки \d как регулярного выражения вы должны вставить перед ним еще один \, чтобы избежать второго .

Результат:

"context" : {
    "number_extract" : "123456"
}
person Michal Bida    schedule 08.11.2016