Выделение смысла с помощью Yandex SpeechKit Cloud — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
 
(не показано 6 промежуточных версии этого же участника)
Строка 37: Строка 37:
 
*'''Ответ в переменную''' - переменная '''ЯндексОтвет''' (строковая), содержит размеченный текст
 
*'''Ответ в переменную''' - переменная '''ЯндексОтвет''' (строковая), содержит размеченный текст
 
*'''Кодировка ответа''' - UTF-8
 
*'''Кодировка ответа''' - UTF-8
*'''Код ошибки в переменную''' - переменная "'''Код ошибки'''" (строковая), нужна для вывода администратору в случае возникновения проблем.
+
*'''Код ошибки в переменную''' - переменная '''Код ошибки''' (строковая), нужна для вывода администратору в случае возникновения проблем.
 +
 
  
 
[[Файл:Выделение смысла Yandex 001.png|center]]
 
[[Файл:Выделение смысла Yandex 001.png|center]]
  
  
'''Шаг 3.''' После выполнения web-запроса в переменной ЯндексОтвет содержится размеченный текст в виде JSON-структуры. Для получения конкретных значений используйте компонент "'''Парсер'''". Подробнее про работу с компонентом читайте в статье: [[Компонент Парсер]].
+
'''Шаг 3.''' После выполнения web-запроса в переменной '''ЯндексОтвет''' содержится размеченный текст в виде JSON-структуры. Для получения конкретных значений используйте компонент "'''Парсер'''". Подробнее про работу с компонентом читайте в статье: [[Компонент Парсер]].
  
  
Строка 70: Строка 71:
 
*'''Кодировка ответа''' - UTF-8
 
*'''Кодировка ответа''' - UTF-8
 
*'''Код ошибки в переменную''' - переменная "'''Код ошибки'''" (строковая), нужна для вывода администратору в случае возникновения проблем.
 
*'''Код ошибки в переменную''' - переменная "'''Код ошибки'''" (строковая), нужна для вывода администратору в случае возникновения проблем.
 +
 +
 +
[[Файл:Выделение смысла Yandex 003.png|center|1000px]]
  
  
Строка 84: Строка 88:
 
==Результаты работы==
 
==Результаты работы==
  
Здравствуйте меня зовут Александр Сергеев. Я живу на Проспекте Победы, дом 55 квартира 890. Позвоните мне завтра
+
В качестве тестового примера использовался текст:
 +
Здравствуйте меня зовут Александр Сергеев. Я живу на Проспекте Победы, дом 55 квартира 890. Позвоните мне завтра
  
 +
Ниже показан размеченный текст (некоторые части вырезаны для компактности). Как мы видим, сервис определил в тексте объекты, обозначающие время (ключ "'''Date'''"), структуру с именем клиента (ключ "'''Fio'''"), выделил географические объекты (ключ "'''GeoAddr'''"), а также предоставил список всех использованных слов (ключ "'''Morph'''")
  
 
<pre>
 
<pre>
Строка 130: Строка 136:
 
                 }
 
                 }
 
             ],
 
             ],
            "Tokens": {
+
----
                "Begin": 7,
+
----
                "End": 14
+
 
             }
 
             }
 
         }
 
         }
Строка 152: Строка 157:
 
             }
 
             }
 
         },
 
         },
        {
+
----
            "Lemmas": [
+
----
                {
+
                    "Grammems": [
+
                        "SPRO gen sg 1p",
+
                        "SPRO acc sg 1p"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "я"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 1,
+
                "End": 2
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "V inpraes pl indic 3p ipf tran"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "звать"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 2,
+
                "End": 3
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "S persn nom sg m anim"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "александр"
+
                },
+
                {
+
                    "Grammems": [
+
                        "S persn gen pl f anim",
+
                        "S persn acc pl f anim"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "александра"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 3,
+
                "End": 4
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "S persn gen pl m anim",
+
                        "S persn acc pl m anim"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "сергей"
+
                },
+
                {
+
                    "Grammems": [
+
                        "S famn nom sg m anim"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "сергеев"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 4,
+
                "End": 5
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "S abbr nom sg",
+
                        "S abbr nom pl",
+
                        "S abbr gen sg",
+
                        "S abbr gen pl",
+
                        "S abbr dat sg",
+
                        "S abbr dat pl",
+
                        "S abbr acc sg",
+
                        "S abbr acc pl",
+
                        "S abbr ins sg",
+
                        "S abbr ins pl",
+
                        "S abbr abl sg",
+
                        "S abbr abl pl"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "я"
+
                },
+
                {
+
                    "Grammems": [
+
                        "SPRO nom sg 1p"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "я"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 5,
+
                "End": 6
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "V inpraes sg indic 1p ipf intr"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "жить"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 6,
+
                "End": 7
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "PART"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "на"
+
                },
+
                {
+
                    "Grammems": [
+
                        "PR"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "на"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 7,
+
                "End": 8
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "S abl sg m inan"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "проспект"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 8,
+
                "End": 9
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "S nom pl f inan",
+
                        "S gen sg f inan",
+
                        "S acc pl f inan"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "победа"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 9,
+
                "End": 10
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "S nom sg m inan",
+
                        "S acc sg m inan"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "дом"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 10,
+
                "End": 11
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Text": "00000000055"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 11,
+
                "End": 12
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "S nom sg f inan"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "квартира"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 12,
+
                "End": 13
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Text": "00000000890"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 13,
+
                "End": 14
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "V inpraes pl indic 2p pf intr",
+
                        "V pl imper 2p pf intr"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "позвонить"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 14,
+
                "End": 15
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "SPRO dat sg 1p",
+
                        "SPRO abl sg 1p"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "я"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 15,
+
                "End": 16
+
            }
+
        },
+
        {
+
            "Lemmas": [
+
                {
+
                    "Grammems": [
+
                        "ADV"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "завтра"
+
                },
+
                {
+
                    "Grammems": [
+
                        "S nom sg n inan",
+
                        "S nom pl n inan",
+
                        "S gen sg n inan",
+
                        "S gen pl n inan",
+
                        "S dat sg n inan",
+
                        "S dat pl n inan",
+
                        "S acc sg n inan",
+
                        "S acc pl n inan",
+
                        "S ins sg n inan",
+
                        "S ins pl n inan",
+
                        "S abl sg n inan",
+
                        "S abl pl n inan"
+
                    ],
+
                    "Language": "ru",
+
                    "Text": "завтра"
+
                }
+
            ],
+
            "Tokens": {
+
                "Begin": 16,
+
                "End": 17
+
            }
+
        }
+
    ]
+
}
+
 
</pre>
 
</pre>

Текущая версия на 12:38, 26 декабря 2014

Наверх    [Oktell 2.7+]

Введение

Yandex SpeechKit Cloud — это облачный сервис, открывающий разработчикам доступ к речевым технологиям Яндекса. В этой статье мы поговорим про выделение смысловых структур из текста.

Технология выделения смысловых объектов позволяет позволяет найти смысловые объекты в тексте и получить от сервера размеченную распознанную структуру. С помощью сервиса возможно анализировать контекст фразы, к примеру, система понимает, что во фразе "Позвони мне завтра" есть информация про время, а во фразе "Соедините меня со Ивановым Иваном" - фамилия и имя. В системе Oktell этот сервис удобно применять для анализа распознанных голосовых выражений и электронных писем.

На момент написания статьи сервис умеет распознавать следующие структуры:

  • Дата и время.
  • Фамилия, имя и отчество.
  • Адреса
  • Морфемы - существительные преобразуются в именительный падеж, глаголы в инфинитив

Документация по API выделения смысла Yandex SpeechKit доступна на сайте https://tech.yandex.ru/speechkit/cloud/doc/dg/concepts/speechkit-dg-nlu-docpage/


Быстрый старт

Для использования системы выделения смысла Yandex SpeechKit Cloud выполните следующие действия:

Шаг 1. Получите API-ключ на использование сервиса в кабинете разработчика.


Шаг 2. Для использования сервиса используйте компонент "Web-запрос" в сценариях. В свойствах компонента выберите:

  • URL - используется выражение:
'https://vins-markup.voicetech.yandex.net/markup/0.x/?text='+[Text]+'&layers=Fio,Morph,GeoAddr,Date&key='+[key]

где

  • [Text] - переменная Text (строковая), анализируемое выражение
  • [key] - переменная key (строковая), API-ключ, полученный на шаге 1
  • Метод - GET
  • Режим работы - Ожидание результата
  • Тип ответа - Текст
  • Ответ в переменную - переменная ЯндексОтвет (строковая), содержит размеченный текст
  • Кодировка ответа - UTF-8
  • Код ошибки в переменную - переменная Код ошибки (строковая), нужна для вывода администратору в случае возникновения проблем.


Выделение смысла Yandex 001.png


Шаг 3. После выполнения web-запроса в переменной ЯндексОтвет содержится размеченный текст в виде JSON-структуры. Для получения конкретных значений используйте компонент "Парсер". Подробнее про работу с компонентом читайте в статье: Компонент Парсер.


Описание сценария

В этом параграфе описывается демонстрационный пример использования сервиса выделения смысла Yandex SpeechKit Cloud. Сценарий выглядит следующим образом:


Выделение смысла Yandex 002.png


Компонент "SpeechKit Key". Определяет API-ключ для выполнения Web-запроса на сервисы Yandex.

  • переменной key (строковая) присваивается значение API-ключа.


Компонент "Text". Предназначен для ввода демонстрационного текста.

  • переменной Text (строковая) присваивается текст для анализа: "Здравствуйте меня зовут Александр Сергеев. Я живу на Проспекте Победы, дом 55 квартира 890. Позвоните мне завтра". Вы можете опробовать любой другой текст.


Компонент "Выделение смысла". Отправляет текст на сервис Yandex SpeechKit для анализа и сохраняет разметку в переменную.

  • URL - используется выражение:
'https://vins-markup.voicetech.yandex.net/markup/0.x/?text='+[Text]+'&layers=Fio,Morph,GeoAddr,Date&key='+[key]
  • Метод - GET
  • Режим работы - Ожидание результата
  • Тип ответа - Текст
  • Ответ в переменную - переменная ЯндексОтвет (строковая), содержит размеченный текст
  • Кодировка ответа - UTF-8
  • Код ошибки в переменную - переменная "Код ошибки" (строковая), нужна для вывода администратору в случае возникновения проблем.


Выделение смысла Yandex 003.png


Компонент "Вывод разметки". Выводит размеченную структуру на экран.

  • Текст - переменная ЯндексОтвет
  • Адресат - укажите вашего пользователя


Компонент "Ошибка". В случае неудачного выполнения web-запроса выводит код ошибки на экран

  • Текст - выражение 'Ошибка '+[Код ошибки]
  • Адресат - укажите вашего пользователя


Результаты работы

В качестве тестового примера использовался текст:

Здравствуйте меня зовут Александр Сергеев. Я живу на Проспекте Победы, дом 55 квартира 890. Позвоните мне завтра

Ниже показан размеченный текст (некоторые части вырезаны для компактности). Как мы видим, сервис определил в тексте объекты, обозначающие время (ключ "Date"), структуру с именем клиента (ключ "Fio"), выделил географические объекты (ключ "GeoAddr"), а также предоставил список всех использованных слов (ключ "Morph")

{
    "Date": [
        {
            "Day": 1,
            "RelativeDay": true,
            "Tokens": {
                "Begin": 16,
                "End": 17
            }
        }
    ],
    "Fio": [
        {
            "FirstName": "александр",
            "LastName": "сергеев",
            "Tokens": {
                "Begin": 3,
                "End": 5
            },
            "Type": "finame"
        }
    ],
    "GeoAddr": [
        {
            "Fields": [
                {
                    "Name": "проспект победы",
                    "Tokens": {
                        "Begin": 8,
                        "End": 10
                    },
                    "Type": "Street"
                },
                {
                    "Name": "дом 55 квартира 890",
                    "Tokens": {
                        "Begin": 10,
                        "End": 14
                    },
                    "Type": "HouseNumber"
                }
            ],
 ----
 ----
            }
        }
    ],
    "Morph": [
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "V pl imper 2p ipf intr"
                    ],
                    "Language": "ru",
                    "Text": "здравствовать"
                }
            ],
            "Tokens": {
                "Begin": 0,
                "End": 1
            }
        },
 ----
 ----