umbot - v2.0.9
    Preparing search index...

    Class Nlu

    Nlu Класс для обработки естественного языка и извлечения сущностей из текста.

    Основные возможности:

    • Извлечение имен, дат, времени и геолокации
    • Распознавание встроенных интентов (согласие, отказ, помощь)
    • Поиск контактной информации (email, телефоны, ссылки)
    • Кэширование результатов для оптимизации производительности

    Платформенные ограничения:

    • Яндекс.Алиса: полная поддержка всех сущностей
    • Маруся: ограниченная поддержка геолокации
    • VK: базовая поддержка через регулярные выражения
    • Telegram: базовая поддержка через регулярные выражения

    Поддерживаемые форматы:

    1. Даты и время:
    • Абсолютные даты: "1 января 2024", "01.01.2024"
    • Относительные даты: "завтра", "через неделю"
    • Время: "14:30", "два часа дня"
    • Интервалы: "с 10 до 18 часов", "в течение недели"
    • Периоды: "каждый понедельник", "по выходным"
    1. Геолокация:
    • Полные адреса: "Москва, ул. Тверская, д. 1"
    • Города и регионы: "в Санкт-Петербурге", "Московская область"
    • Страны: "Россия", "в Германии"
    • Координаты: "55.7558° N, 37.6173° E"
    1. Числа:
    • Целые: "42", "сто"
    • Дробные: "3,14", "половина"
    • Порядковые: "первый", "десятый"
    • Количественные: "пара", "дюжина"
    1. Контактная информация:
    import { Nlu } from './components/nlu/Nlu';

    const nlu = new Nlu();

    // Извлечение имени
    const fio = nlu.getFio();
    if (fio && fio.tokens.length > 0) {
    console.log('Имя:', fio.tokens[0].value.first_name);
    console.log('Фамилия:', fio.tokens[0].value.last_name);
    }

    // Извлечение даты и времени
    const datetime = nlu.getDateTime();
    if (datetime && datetime.tokens.length > 0) {
    const date = datetime.tokens[0].value;
    console.log('Дата:', date.year, date.month, date.day);
    console.log('Время:', date.hour, date.minute);
    }

    // Извлечение геолокации
    const geo = nlu.getGeo();
    if (geo && geo.tokens.length > 0) {
    const location = geo.tokens[0].value;
    console.log('Город:', location.city);
    console.log('Страна:', location.country);
    console.log('Координаты:', location.latitude, location.longitude);
    }

    // Проверка встроенных интентов
    if (nlu.isIntentConfirm()) {
    console.log('Пользователь согласился');
    }
    if (nlu.isIntentReject()) {
    console.log('Пользователь отказался');
    }

    // Поиск контактной информации
    const phones = Nlu.getPhone('Позвоните мне по номеру +7 (999) 123-45-67');
    if (phones.tokens.length > 0) {
    console.log('Телефон:', phones.tokens[0]);
    }

    const emails = Nlu.getEMail('Мой email: user@example.com');
    if (emails.tokens.length > 0) {
    console.log('Email:', emails.tokens[0]);
    }

    const links = Nlu.getLink('Посетите наш сайт https://example.com');
    if (links.tokens.length > 0) {
    console.log('Ссылка:', links.tokens[0]);
    }
    Index

    Constructors

    • Конструктор класса Nlu. Инициализирует пустой объект NLU и кэш данных.

      Returns Nlu

      const nlu = new Nlu();
      // nlu._nlu = {}
      // nlu._cachedData = new Map()

    Properties

    T_FIO: "YANDEX.FIO" = 'YANDEX.FIO'

    Тип сущности: ФИО. Используется для извлечения имен, фамилий и отчеств.

    const fio = nlu.getFio();
    if (fio.status) {
    console.log(fio.result[0].first_name); // "Иван"
    }
    T_GEO: "YANDEX.GEO" = 'YANDEX.GEO'

    Тип сущности: Геолокация. Используется для извлечения адресов, городов и других географических данных.

    Поддерживаемые форматы:

    1. Полные адреса:
      • "Москва, ул. Тверская, д. 1"
      • "Россия, Санкт-Петербург, Невский проспект 2"
    2. Города и регионы:
      • "в Москве", "Московская область"
      • "из Санкт-Петербурга в Москву"
    3. Страны:
      • "Россия", "в Германии"
      • "из России в Китай"
    4. Координаты:
      • "55.7558° N, 37.6173° E"
      • "55°45'20.9"N 37°37'02.2"E"
    const geo = nlu.getGeo();
    if (geo && geo.tokens.length > 0) {
    const location = geo.tokens[0].value;
    console.log('Страна:', location.country);
    console.log('Город:', location.city);
    console.log('Улица:', location.street);
    console.log('Номер дома:', location.house_number);
    console.log('Координаты:', location.latitude, location.longitude);
    }
    T_DATETIME: "YANDEX.DATETIME" = 'YANDEX.DATETIME'

    Тип сущности: Дата и время. Используется для извлечения дат, времени и временных интервалов.

    Поддерживаемые форматы:

    1. Абсолютные даты:
      • "1 января 2024", "01.01.2024"
      • "в следующий вторник", "через неделю"
    2. Время:
      • "14:30", "в два часа дня"
      • "через час", "через 30 минут"
    3. Интервалы:
      • "с 10 до 18 часов"
      • "с понедельника по пятницу"
    4. Периоды:
      • "каждый день в 9 утра"
      • "по выходным с 12 до 18"
    const dateTime = nlu.getDateTime();
    if (dateTime.status) {
    const date = dateTime.result[0];

    // Абсолютная дата
    if (date.year && date.month && date.day) {
    console.log(`Дата: ${date.day}.${date.month}.${date.year}`);
    }

    // Время
    if (date.hour !== undefined) {
    console.log(`Время: ${date.hour}:${date.minute || '00'}`);
    }

    // Относительное время
    if (date.relative) {
    console.log(`Относительно: ${date.relative}`);
    }
    }
    T_NUMBER: "YANDEX.NUMBER" = 'YANDEX.NUMBER'

    Тип сущности: Число. Используется для извлечения числовых значений.

    Поддерживаемые форматы:

    1. Целые числа:
      • "42", "сто", "тысяча"
      • "минус десять", "-10"
    2. Дробные числа:
      • "3,14", "пять целых две десятых"
      • "половина", "четверть"
    3. Порядковые числительные:
      • "первый", "десятый"
      • "сотый", "тысячный"
    4. Количественные числительные:
      • "пара", "дюжина"
      • "несколько", "много"
    const numbers = nlu.getNumber();
    if (numbers.status) {
    numbers.result.forEach(number => {
    // Проверка на целое число
    if (Number.isInteger(number)) {
    console.log(`Целое число: ${number}`);
    }
    // Проверка на дробное число
    else if (number % 1 !== 0) {
    console.log(`Дробное число: ${number}`);
    }
    });
    }
    T_INTENT_CONFIRM: "YANDEX.CONFIRM" = 'YANDEX.CONFIRM'

    Встроенный интент: Согласие. Используется для распознавания положительных ответов.

    Поддерживаемые варианты:

    • Прямое согласие: "да", "конечно", "хорошо"
    • Подтверждение: "верно", "правильно", "точно"
    • Готовность: "готов", "можно", "давай"
    • Одобрение: "отлично", "супер", "класс"
    // Проверка на согласие
    if (nlu.isIntentConfirm()) {
    console.log('Пользователь согласился');
    }

    // Проверка конкретной фразы
    if (nlu.isIntentConfirm('да, конечно')) {
    console.log('Явное согласие');
    }
    T_INTENT_REJECT: "YANDEX.REJECT" = 'YANDEX.REJECT'

    Встроенный интент: Отказ. Используется для распознавания отрицательных ответов.

    Поддерживаемые варианты:

    • Прямой отказ: "нет", "не надо", "отмена"
    • Отрицание: "неверно", "неправильно"
    • Несогласие: "не хочу", "не буду"
    • Отмена: "стоп", "хватит", "прекрати"
    // Проверка на отказ
    if (nlu.isIntentReject()) {
    console.log('Пользователь отказался');
    }

    // Проверка конкретной фразы
    if (nlu.isIntentReject('нет, спасибо')) {
    console.log('Вежливый отказ');
    }
    T_INTENT_HELP: "YANDEX.HELP" = 'YANDEX.HELP'

    Встроенный интент: Запрос помощи. Используется для распознавания запросов о помощи.

    if (nlu.isIntentHelp()) {
    console.log('Пользователь запросил помощь');
    }
    T_INTENT_REPEAT: "YANDEX.REPEAT" = 'YANDEX.REPEAT'

    Встроенный интент: Повторение. Используется для распознавания запросов повторить последний ответ.

    if (nlu.isIntentRepeat()) {
    console.log('Пользователь просит повторить');
    }

    Methods

    • Protected

      Сериализует входные данные NLU в стандартный формат.

      Parameters

      • nlu: any

        Входные данные NLU

      Returns INlu

      Обработанные данные NLU

    • Устанавливает данные NLU и очищает кэш.

      Parameters

      • nlu: any

        Данные NLU для обработки

      Returns void

      nlu.setNlu({
      entities: [
      {
      type: 'YANDEX.FIO',
      value: { first_name: 'Иван', last_name: 'Иванов' }
      }
      ]
      });
    • Получает информацию о текущем пользователе.

      Returns null | INluThisUser

      Информация о пользователе или null

      const user = nlu.getUserName();
      if (user) {
      console.log('ID пользователя:', user.user_id);
      console.log('Имя пользователя:', user.first_name);
      console.log('Фамилия пользователя:', user.last_name);
      }
    • Получает ФИО из текста.

      Returns INluResult<INluFIO[]>

      Результат поиска ФИО

      const fio = nlu.getFio();
      if (fio && fio.tokens.length > 0) {
      const person = fio.tokens[0].value;
      console.log('Имя:', person.first_name);
      console.log('Фамилия:', person.last_name);
      console.log('Отчество:', person.patronymic_name);
      }
    • Получает геолокацию из текста.

      Returns INluResult<INluGeo[]>

      Результат поиска геолокации

      const geo = nlu.getGeo();
      if (geo && geo.tokens.length > 0) {
      const location = geo.tokens[0].value;
      console.log('Страна:', location.country);
      console.log('Город:', location.city);
      console.log('Улица:', location.street);
      console.log('Номер дома:', location.house_number);
      console.log('Координаты:', location.latitude, location.longitude);
      }
    • Получает дату и время из текста.

      Returns INluResult<INluDateTime[]>

      Результат поиска даты и времени

      const dateTime = nlu.getDateTime();
      if (dateTime && dateTime.tokens.length > 0) {
      const dt = dateTime.tokens[0].value;
      if (dt.year) console.log('Год:', dt.year);
      if (dt.month) console.log('Месяц:', dt.month);
      if (dt.day) console.log('День:', dt.day);
      if (dt.hour !== undefined) console.log('Час:', dt.hour);
      if (dt.minute !== undefined) console.log('Минуты:', dt.minute);
      if (dt.relative) console.log('Относительное время:', dt.relative);
      }
    • Получает числа из текста.

      Returns INluResult<number[]>

      Результат поиска чисел

      const number = nlu.getNumber();
      if (number && number.tokens.length > 0) {
      const value = number.tokens[0].value;
      console.log('Число:', value);
      // Проверка типа числа
      if (Number.isInteger(value)) {
      console.log('Целое число');
      } else {
      console.log('Дробное число');
      }
      }
    • Проверяет наличие интента согласия в тексте.

      Parameters

      • OptionaluserCommand: string = ''

        Текст для проверки

      Returns boolean

      true если найден интент согласия

      if (nlu.isIntentConfirm('да, согласен')) {
      console.log('Пользователь согласился');
      }
    • Проверяет наличие интента отказа в тексте.

      Parameters

      • OptionaluserCommand: string = ''

        Текст для проверки

      Returns boolean

      true если найден интент отказа

      if (nlu.isIntentReject('нет, не хочу')) {
      console.log('Пользователь отказался');
      }
    • Проверяет наличие интента помощи в тексте.

      Returns boolean

      true если найден интент помощи

      if (nlu.isIntentHelp()) {
      console.log('Пользователь запросил помощь');
      }
    • Проверяет наличие интента повтора в тексте.

      Returns boolean

      true если найден интент повтора

      if (nlu.isIntentRepeat()) {
      console.log('Пользователь просит повторить');
      }
    • Получает все интенты из текста.

      Returns null | INluIntents

      Объект с интентами или null

      const intents = nlu.getIntents();
      if (intents) {
      // Проверка наличия конкретного интента
      if (intents['YANDEX.CONFIRM']) {
      console.log('Найден интент согласия');
      }
      if (intents['YANDEX.HELP']) {
      console.log('Найден интент помощи');
      }
      // Получение слотов интента
      const helpIntent = intents['YANDEX.HELP'];
      if (helpIntent && helpIntent.slots) {
      console.log('Слоты интента:', helpIntent.slots);
      }
      }
    • Получает конкретный интент по имени.

      Parameters

      • intentName: string

        Имя интента

      Returns null | INluIntent

      Интент или null

      const intent = nlu.getIntent('YANDEX.CONFIRM');
      if (intent) {
      console.log(intent.slots); // { ... }
      }
    • Извлекает ссылки из текста.

      Parameters

      • query: string

        Текст для поиска

      Returns INluResult<string[]>

      Результат поиска ссылок

      const links = Nlu.getLink('Посетите https://example.com и http://test.ru');
      if (links && links.tokens.length > 0) {
      links.tokens.forEach(link => {
      console.log('Найдена ссылка:', link);
      });
      }
    • Извлекает телефонные номера из текста.

      Parameters

      • query: string

        Текст для поиска

      Returns INluResult<string[]>

      Результат поиска телефонов

      const phones = Nlu.getPhone('Позвоните по номеру +7 (999) 123-45-67 или 8-800-555-35-35');
      if (phones && phones.tokens.length > 0) {
      phones.tokens.forEach(phone => {
      console.log('Найден телефон:', phone);
      });
      }
    • Извлекает email адреса из текста.

      Parameters

      • query: string

        Текст для поиска

      Returns INluResult<string[]>

      Результат поиска email

      const emails = Nlu.getEMail('Напишите на email@example.com или support@test.ru');
      if (emails && emails.tokens.length > 0) {
      emails.tokens.forEach(email => {
      console.log('Найден email:', email);
      });
      }