Перейти к основному содержимому

Именованные сущности

Именованная сущность — слово или словосочетание, выделяющее определенный предмет или явление из ряда однотипных предметов или явлений. Например, это названия городов, стран, валют.

подсказка
С точки зрения сценария именованная сущность представляет собой именованный паттерн, заданный при помощи справочника именованных сущностей.

Именованные сущности можно указывать в правилах NLU, как и любые другие именованные паттерны, и таким образом распознавать элементы справочников в запросах.

Объявление

Чтобы задать паттерн как именованную сущность, необходимо проделать следующие шаги. Для примера воспользуемся фрагментом справочника городов, который разместим в файле dicts/cities.csv:

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

  • Если конвертер задан, берется значение, которое возвращает конвертер.
  • Если конвертер не задан, записывается только идентификатор сущности.