# Распознавание сущностей | Слот Synonym

## Назначение и общая информация

Слот Synonym позволяет совершать семантический поиск Сущность по таблице определенного формата с данными — Словарь — и сохранять найденную информацию в Контекстная переменная. Семантический поиск — распознавание различных словоформ синонимов, а не только полных совпадений с ними — доступен для языков, перечисленных в таблице <https://coda.io/d/\\_d\\_pM7PjYCmj#\\_tu9qV>. Для остальных языков работает поиск по полному совпадению.При выражении намерения естественным языком, Собеседник  может использовать в Реплика Сущность. К примеру, в Реплика“Как добраться в Питер на поезде” присутствует Сущность “город” (Питер) и “транспорт” (поезд). В некоторых случаях требуется выделять значения Сущность и записывать их в Контекстная переменная для последующего использования в Сценарий агента. Сущность могут быть выражены разными словами-синонимами. К примеру, “Питер” можно назвать “Санкт-Петербургом”, или “северной столицей”, а “поезд” — “электричкой” или “жд”.В некоторых сценариях требуется выделять значения Сущность и записывать их в Контекстная переменная для последующего использования в Сценарий агента. Для выделения Сущность  используется Слот Synonym в сочетании с функционалом Словарь.

![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-dUhrTqBNqW/4bc4d2e3939edd47b78df2924b0d63d60c33f2ba31b99c8141e7cb83cf8c44223ab1a677b33cc0f58621378e9353b5be086d61d0af937617fc43a5f600a6554af7fa6def50ca78a921836b1f9a19f6d71e72658affaa6f59e77eeebffb7065119e237429)

Примеры:

1. Необходимо определить полное официальное название города для передачи его во внешнюю систему. Для этого создается Словарь, состоящий из ряда  Сущность, каждая из которых соответствует определенному городу и содержит различные вариации его названия, например: название  Сущность — “Санкт-Петербург”, содержание — синонимы “Спб, Питер, Петербург, Ленинград”. Сообщение собеседника прогоняется Слотом Synonym через данный Словарь и найденное в нем название  Сущность используется далее в Сценарий агента.
2. Необходимо разделить Сценарий агента после определения Интента в зависимости от содержащейся в Реплика Сущность.
3. Интент: “Как найти < Сущность>?”.Набор  Сущность: “кабинет начальника”, “гардеробная”, “переговорная”, “кафетерий”, “кабинет врача”, “кухня”, “туалет”С помощью слота Synonym производится поиск  Сущность в Реплика, затем с помощью Слота Synonym производится деление Сценарий агента на несколько Ветка сценария в зависимости от  Сущность.

## Создание и настройки слота

### Атрибуты слота

![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-ohBgLhIvr1/bf6c921abeafe42599cb697992e89f979c6d8411f886df76c5bf65facc262ea2c903aa265d3539e9eb662d6b4137ab09f66a5d5e12511a4d28fd698c08acb56bfebc7d86cdd9e74c8d5d8402899b82624b97f510e832c7c550ba43dfbee3c259028da071)

1. NAME\* — название Слота, которое будет отображено в Дерево сценария. Максимальная длина значения поля — 40 символов.
2. Source\* — Выражение, дающее результат — строку (Проверяемая строка), в которой будет совершаться поиск Синонимов из Словарь. Может быть указано как полноценное Выражение с операторами, так и Выражение из одной Контекстная переменная, например {{ variable }} или {{ places\[0].name }}
3. RESULT VARIABLE\* — имя Контекстная переменная, в которую запишется найденная слотом информация. Формат: строка без скобок, например var1.
4. VOCABULARY\* —  Словарь из Ресурсы Компании.
5. Пар RESULT VARIABLE + VOCABULARY может быть несколько. Для добавления новой пары необходимо кликнуть по кнопке Add search.

![add search.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-Kd1ufv2W7w/31ddcb35d75b900d428723c65a1ff9de8c0c6a56c7c6927e6f38cc88b3ac3472dcc4d6596512737b81a6b442ba4f700649143441b4359dea655030b0a0bcc7c77707adf496c28bbfbbb8a8896b6e7fb0d0f2dff8dcd6e8f138f020544409de99a0e1d819)

При добавлении каждой дополнительной пары RESULT VARIABLE + VOCABULARY в поле VOCABULARY в выпадающем списке отображаются те Словарь Компания, которые не использованы в других полях VOCABULARY этого Слота. Таким образом, пар RESULT VARIABLE + VOCABULARY в одном Слот Synonym может быть максимум 20 (20- максимальное количество Словарь в Компания).

### Использование синтаксиса в Слоте

В Слоте Synonym допустимо использование Выражение и Выражение с управляющей конструкцией в поле Source.

## Словари

Словарь представляет собой объект Ресурсы Компании, то есть доступен из всех Агентов данной компании.О создании Словарь: Вкладка словарей — Vocabularies.

## Работа слота

При прохождении Слота Synonym выполняются следующие операции в указанном порядке:

1. Удаление из Контекст Чата все Контекстная переменная указанные в поле RESULT VARIABLE данного Слота;
2. Вычисление Выражение, указанное в поле Source, получение Проверяемая строка.
3. Если Выражение не удалось вычислить и получить строку (не существует Контекстная переменная, указанной в Выражение или некорректно описано Выражение), то в Контекст Чата будет создана Контекстная переменная error со значением Template rendering (source of synonym extraction) error occurred.
4. Приведение содержимого Проверяемая строка к нижнему регистру;
5. Разделение содержимого Проверяемая строка по словам с помощью специальной модели (например, по пробелу, по запятой и тп)  — получение массива слов;
6. Для каждой заполненной пары RESULT VARIABLE - VOCABULARY:\
   Поиск каждого слова из Проверяемая строка в Словарь , указанном в поле VOCABULARY, и запись результата в Контекстная переменная, указанную в соответствующем поле RESULT VARIABLE:
7. 1. В случае, если одно или несколько слов из Проверяемая строка совпадут
   2. 1. со словоформами Синонимов для языков, перечисленных в таблице Доступные для распознавания языки словарей
      2. или с точным значением Синонима для любых языков
      3. > Важно: регистр Синонимов в Словарь и Проверяемая строка не влияет на результат распознавания.
      4. Значением Контекстная переменная, указанной в поле RESULT VARIABLE является массив объектов, где каждый элемент массива — объект, содержащий положительный результат распознавания слова (положительный результат = слово было найдено в  Словарь).
      5. 1. Формат результата — JSON с информацией, в примере расписан только первый элемент, массива объектов-результатов:\
            \[\
            {'synonym': 'найденный в переменной синоним',\
            'reference': 'первый синоним в строке',\
            'entity': 'название сущности',\
            'start': порядковый номер первого символа найденного в переменной синонима,\
            'end': порядковый номер последнего символа найденного в переменной синонима },\
            ...\
            { \<N-й элемент - результат поиска> },\
            ]
         2. > Пример:\
            > \[\
            > {'synonym': 'honda',\
            > 'reference': 'HONDA',\
            > 'entity': 'car\_brand',\
            > 'start': 0,\
            > 'end': 5}\
            > ]
      6. В массиве может быть несколько элементов, их количество равно количеству найденных при проверке в Словарь совпадений, это возможно в следующих случаях (в т.ч. одновременно):
      7. 1. одно слово из Проверяемая строка соответствует нескольким  в данном Словарь (найдено в нескольких строках)
         2. > Пример: Проверяемая строка — мне нужно два билета до Краса\
            > Результат распознавания:\
            > \[\
            > {'synonym': 'Краса',\
            > 'reference': 'Красноярск',\
            > 'entity': 'Красноярск',\
            > 'start': 24, 'end': 29},\
            > {'synonym': 'Краса',\
            > 'reference': 'Краснодар',\
            > 'entity': 'Краснодар',\
            > 'start': 24,\
            > 'end': 29}]\
            > Слово Краса было найдено в 2 Сущность в одном Словарь.
         3. несколько слов из Проверяемая строка соответствует разным Сущность в данном Словарь
         4. > Пример: Проверяемая строка — хочу купить билеты из Москвы до Питера\
            > Результат распознавания:\
            > \[\
            > {'synonym': 'Москвы',\
            > 'reference': 'Москва',\
            > 'entity': 'Москва',\
            > 'start': 22,\
            > 'end': 28},\
            > {'synonym': 'Питера',\
            > 'reference':\
            > 'Санкт-Петербург',\
            > 'entity': 'Санкт-Петербург',\
            > 'start': 32,\
            > 'end': 38}\
            > ]\
            > Слово Москвы было найдено в 1 Сущность в Словарь, слово Питера было найдено в 1 Сущность в Словарь.
         5. несколько слов из Проверяемая строка соответствует одной Сущность в данном Словарь. Например, во фразе один город упоминается два раза, каждое упоминание — отдельное слово, которое даст свой объект-результат в переменной  RESULT VARIABLE
         6. > Пример: Проверяемая строка — купить билеты Москва Питер Москва\
            > \[\
            > {'synonym': 'Москва',\
            > 'reference': 'Москва',\
            > 'entity': 'Москва',\
            > 'start': 14,\
            > 'end': 20},\
            > {'synonym': 'Питер',\
            > 'reference': 'Санкт-Петербург',\
            > 'entity': 'Санкт-Петербург',\
            > 'start': 21,\
            > 'end': 26},\
            > {'synonym': 'Москва',\
            > 'reference': 'Москва',\
            > 'entity': 'Москва',\
            > 'start': 27,\
            > 'end': 33}]\
            > Слово Москва соответствует Сущность 'Москва' в Словарь  и присутствует в Проверяемая строка дважды.
   3. В случае, если ничего не будет найдено, Контекстная переменная, указанная в поле RESULT VARIABLE не будет создана в Контекст Чата.

<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://chatme-ai-4.gitbook.io/docs/proekty-na-platforme/proekt-i-ego-soderzhimoe/agenty-na-platforme/kak-postroit-scenarii-agenta/kak-sozdavat-i-nastraivat-sloty/raspoznavanie-sushnostei-or-slot-synonym.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
