Конвертеры
Конвертеры позволяют преобразовать данные токена, помещаемые в $parseTree.
Объявление
Объявление конвертера:
-
При объявлении паттерна:
patterns:
$four = четыре || converter = function() {return 4} -
В тегах
init:init:
function amountConverter(pt) {
var ret = pt.Number[0].value;
return ret
} -
В файле
.js-библиотек, напримерconverters.js:function amountConverter(pt) {
var ret = pt.Number[0].value;
return ret
}
В функции конвертеров передается $parseTree первым аргументом.
Вы можете использовать внутри конвертера переменную, в которую передается $parseTree. Для этого задайте её имя первым аргументом функции, вторым аргументом передается контекст.
Применение
Формирование значения из текста
Сценарий:
$Digit = $regexp<\d+> || converter = numberConverterDigit
.js-файл:
function numberConverterDigit(parseTree) {
return parseInt(parseTree.text);
}
Преобразование значения из маппинга
Сценарий:
$Numeral = (один:1|...) || converter = valueToNumberConverter
.js-файл:
function valueToNumberConverter(parseTree) {
return parseInt(parseTree.value);
}
Формирование значения из вложенных токенов
Сценарий:
$Numeral = (один:1|...)
$Minutes = $Numeral || converter = minutesConverter
.js-файл:
function minutesConverter(parseTree) {
return parseInt(parseTree.Numeral.value)
};
Формирование значения из справочников
Сценарий:
$City = $entity<Cities> || converter = сityConverter
Если паттерн создан с помощью $entity<> и converter, его название не должно совпадать с названием сущности NLU-ядра.
Например, если в проекте есть паттерн $Example и сущность Example, то это может привести к ошибкам при выполнении сценария.
Правило $entity записывает в value только идентификатор сущности, а список ассоциированных значений содержится в справочнике.
Чтобы записать в value значение из справочника, укажите в .js-файле:
function сityConverter(parseTree) {
var id = parseTree.City[0].value;
return Cities[id].value;
}