Именованные сущности
Именованная сущность — слово или словосочетание, выделяющее определенный предмет или явление из ряда однотипных предметов или явлений. Например, это названия городов, стран, валют.
Именованные сущности можно указывать в правилах NLU, как и любые другие именованные паттерны, и таким образом распознавать элементы справочников в запросах.
Объявление
Чтобы задать паттерн как именованную сущность, необходимо проделать следующие шаги. Для примера воспользуемся фрагментом справочника городов, который разместим в файле dicts/cities.csv
:
1;Санкт-Петербург, Питер, СПб;{"name": "Санкт-Петербург", "lat": 59.93863, "lon": 30.31413}
-
Подключите к файлу сценария
.sc
справочник именованных сущностей при помощи тегаrequire
:require: dicts/cities.csv
name = Cities
var = Cities -
Задайте конвертер для сущности в одном из файлов с расширением
.js
либо в одном из блоковinit
:$global.cityConverter = function($parseTree) {
var id = $parseTree.Cities[0].value;
return Cities[id].value;
};подсказкаИспользование конвертеров опционально, однако оно упрощает последующий доступ к данным, указанным в значении сущности. -
Объявите именованный паттерн при помощи специального элемента
$entity
, после которого в угловых скобках записывается название справочника, а как атрибут после||
— имя конвертера:patterns:
$city = $entity<Cities> || converter = cityConverterпредупреждениеЕсли паттерн создан с помощью
$entity<>
иconverter
, его название не должно совпадать с названием сущности NLU-ядра. Например, если в проекте есть паттерн$Example
и сущностьExample
, то это может привести к ошибкам при выполнении сценария.
Использование
Рассмотрим пример стейта, который будет срабатывать на запросы с упоминанием сущности $city
:
state: City
q!: * $city *
При попадании в данный стейт, например, по запросу мой регион Санкт Петербург в $parseTree
будет доступна информация по сущности:
{
"city": [
{
// Служебные поля: tag, pattern и другие
"value": {
"name": "Санкт-Петербург",
"lat": 59.93863,
"lon": 30.31413
}
}
],
"_city": {
"name": "Санкт-Петербург",
"lat": 59.93863,
"lon": 30.31413
}
}
<имя_паттерна>
доступна подробная информация по всем распознанным сущностям, а по ключу _<имя_паттерна>
— значение value
первой распознанной сущности.Значение value
отличается в зависимости от того, задан ли для сущности конвертер:
- Если конвертер задан, берется значение, которое возвращает конвертер.
- Если конвертер не задан, записывается только идентификатор сущности.