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