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

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

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

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

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

Объявление

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

1;Санкт-Петербург, Питер, СПб;{"name": "Санкт-Петербург", "lat": 59.93863, "lon": 30.31413}
  1. Подключите к файлу сценария .sc справочник именованных сущностей при помощи тега require:

    require: dicts/cities.csv
    name = Cities
    var = Cities
  2. Задайте конвертер для сущности в одном из файлов с расширением .js либо в одном из блоков init:

    $global.cityConverter = function($parseTree) {
    var id = $parseTree.Cities[0].value;
    return Cities[id].value;
    };
    подсказка
    Использование конвертеров опционально, однако оно упрощает последующий доступ к данным, указанным в значении сущности.
  3. Объявите именованный паттерн при помощи специального элемента $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 отличается в зависимости от того, задан ли для сущности конвертер:

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