Если вы хотите сопоставить динамические детали в пользовательском вводе, которые было бы трудно поддерживать в языковом объекте, вы можете использовать аннотации.
Аннотации в Teneo можно рассматривать как метки, которые прикрепляются к входам. Некоторые аннотации создаются Teneo автоматически, но вы также можете добавлять их динамически с помощью скриптов.
В качестве примера на этой странице мы будем использовать аннотации для «пометки» промо-кодов в пользовательском вводе. Эти промо-коды хранятся в глобальной переменной, и мы предполагаем, что эта переменная динамически заполняется через API или что-то подобное.
Следующие 2 шага необходимы, чтобы аннотировать пользовательский ввод промо-кодами:
- Создайте глобальную переменную и заполните ее списком промокодов.
- Создайте глобальный прослушиватель, который будет прослушивать все вводимые пользователем данные, и сценарий, проверяющий каждое слово вводимых пользователем данных. Если слово есть в списке промокодов, к нему следует добавить аннотацию VALID_PROMO_CODE
Добавить глобальную переменную
Во-первых, нам нужно создать глобальную переменную, которая, как мы предполагаем, была динамически заполнена промо-кодами для бариста Longberry:
- Перейдите к решениям за кулисами, нажав «Решение» в правом верхнем углу.
- Нажмите «Глобальные» на панели слева.
- Перейдите в «Переменные».
- Добавьте новую переменную и дайте ей имя
validPromoCodes
. - Затем присвойте ему это значение:
["mvkn","vuyo","2ppu","lqgp","ym5b","634q","g2gl"]
- Нажмите «Сохранить».
Добавьте сценарий аннотации в глобальный прослушиватель
Затем нам нужно настроить глобальный предварительный прослушиватель, чтобы мы могли аннотировать пользовательский ввод, прежде чем он будет проверен на соответствие триггерам потока и переходам.
- Нажмите на вкладку «Решение» в левом верхнем углу.
- Нажмите «Глобальные».
- Выберите «Слушатели».
- Перейдите к зеленому значку «Добавить», откройте раскрывающееся меню и выберите «Предварительный слушатель», чтобы добавить нового предварительного слушателя.
- Назовите его
Find valid promotion codes
. Затем нажмите стрелку влево вверху. - Вставьте звездочку Клини
*
в поле условия. Это будет соответствовать всем, поскольку мы хотим проверить каждый ввод на наличие действительных промо-кодов. - Добавьте следующий скрипт в поле Выполнить этот скрипт. (Подробнее о скрипте можно прочитать ниже):
def n = _.sentenceCount // get the number of sentences // iterate through the sentences for (int si = 0; si < n; si++) { // iterate through each word in the sentence _.sentences[si].words.eachWithIndex { word, wordIndex -> if (validPromoCodes.contains(word.getOriginal().toString())) { // if lookup value is true then we annotate the 'range' that matched the list. _.inputAnnotations.add(_.createInputAnnotation("VALID_PROMO_CODE", si, [wordIndex] as HashSet, ["Promo code": word.getOriginal().toString()])) } } }
- Сохраните с помощью кнопки «Сохранить» в левом верхнем углу окна редактирования.
- Вернитесь в главное окно решения и перезагрузите движок в пробной версии.
Попробуйте и проверьте аннотации
Теперь мы аннотируем рекламные коды с помощью глобального предварительного прослушивателя, что означает, что языковые условия теперь могут использовать индивидуальную аннотацию %$VALID_PROMO_CODE
для проверки того, содержит ли пользовательский ввод действительный промо-код.
Мы также можем проверить аннотацию на панели «Информация об ответе»:
- В главном окне решения откройте панель «Информация об ответе» с правой стороны.
- Введите
mvkn
в пробную версию. Это действительный промо-код, и он будет соответствующим образом аннотирован. - На панели «Информация об ответе» в разделе «Сводка ввода» вы можете увидеть, что аннотировал Teneo, включая вашу настроенную аннотацию %$VALID_PROMO_CODE.
Если вы наведете курсор на аннотацию, вы получите дополнительную информацию (если она есть) из переменных аннотации.
Пояснение к скрипту
Давайте подробно рассмотрим скрипт, который мы использовали:
def n = _.sentenceCount // get the number of sentences
// iterate through the sentences
for (int si = 0; si < n; si++) {
// iterate through each word in the sentence _.sentences[si].words.eachWithIndex { word, wordIndex ->
if (validPromoCodes.contains(word.getOriginal().toString())) {
// if lookup value is true then we annotate the 'range' that matched the list. _.inputAnnotations.add(_.createInputAnnotation("VALID_PROMO_CODE", si, [wordIndex] as HashSet, ["Promo code": word.getOriginal().toString()]))
}
}
}
Вот что делает скрипт:
- Во-первых, мы получаем количество предложений на входе и перебираем предложения. Мы делаем это, потому что нам нужно указать номер предложения, когда мы добавляем аннотацию.
- Для каждого предложения мы перебираем его слова. Получаем слово и индекс слов. Это делается с помощью итератора eachWithIndex.
- Затем мы проверяем, существует ли слово в глобальном списке. Если это так, мы аннотируем слово в предложении в wordIndex и создаем переменную аннотации Promo code с найденным промокодом в качестве значения аннотации к Promo code, например:
Первоначально опубликовано на https://www.artificial-solutions.com 19 августа 2020 г.