Перейти до основного вмісту

API природної мови

Надішліть фрагмент тексту й отримайте структуровані факти про нього: до яких тематичних категорій він належить, наскільки він позитивний чи негативний, яких людей, компанії, місця та продукти в ньому згадано і чи торкається він чутливих тем. Використовуйте це, щоб масово розмічати контент, маршрутизувати звернення до підтримки, відстежувати згадки бренду або перевіряти сторінки перед публікацією.

API використовує стандартний формат запитів documents:<method>: одне тіло JSON з document, одна відповідь на виклик. Якщо ваш код уже надсилає запити в цьому форматі, він працюватиме тут після двох змін: базової URL-адреси та ключа.

API природної мови працює на кожному ключі API OmevAI без окремого ввімкнення і списується зі звичайного балансу ключа. Щодо обсягів або запитань звертайтеся на support@omev.be.

Методи​

МетодМаршрутЩо ви отримуєте
Класифікація текстуPOST /v2/documents:classifyTextдо 5 тематичних категорій із впевненістю, з актуального списку категорій
Класифікація тексту (маршрут v1)POST /v1/documents:classifyTextте саме, для коду, написаного під маршрут v1; надсилайте параметр, наведений нижче
ТональністьPOST /v1/documents:analyzeSentimentзагальна тональність тексту та кожного речення
СутностіPOST /v1/documents:analyzeEntitiesлюди, організації, місця, події, продукти та інші сутності з їхніми згадками
Тональність щодо сутностейPOST /v1/documents:analyzeEntitySentimentсутності та ставлення до кожної з них
МодераціяPOST /v1/documents:moderateTextвпевненість для кожної з 16 чутливих категорій
Кілька аналізів одразуPOST /v1/documents:annotateTextбудь-яке поєднання наведеного вище в одному виклику

Синтаксичний аналіз (analyzeSyntax) не надається.

Ціна​

МетодЦінаЗа одиницюЦіна за 1M символів
classifyText (v1 і v2)$0.0011 000 символів$1.00
analyzeSentiment$0.00051 000 символів$0.50
analyzeEntities$0.00051 000 символів$0.50
analyzeEntitySentiment$0.0011 000 символів$1.00
moderateText$0.00025100 символів$2.50
annotateTextсума увімкнених функційяк вище

Символи — це символи Unicode в document.content, округлені вгору до цілих одиниць: текст на 2 300 символів — це три одиниці для класифікації та 23 одиниці для модерації. Для annotateText функція extractEntitySentiment оплачується як тональність щодо сутностей і замінює оплату за extractEntities. Запит, що завершився помилкою, не оплачується.

Класифікація тексту​

curl -sS "https://llmapi.omev.be/v2/documents:classifyText" \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"document": {
"type": "PLAIN_TEXT",
"content": "Slow-cooked beef ragù: brown the meat, add tomatoes and red wine, then simmer for three hours and serve over fresh pappardelle."
}
}'
{
"categories": [
{"name": "/Food & Drink/Cooking & Recipes", "confidence": 0.93}
],
"languageCode": "en",
"languageSupported": true
}

categories містить до 5 шляхів категорій, починаючи з найкращої. На маршруті v1 відповідь містить лише categories, а запит має запитувати актуальний список категорій: "classificationModelOptions": {"v2Model": {"contentCategoriesVersion": "V2"}}. Попередній (V1) список категорій не надається; запит v1 без цього параметра не обслуговується й не оплачується.

Документ​

Кожен метод приймає той самий об'єкт document.

ПолеОбов'язковеЗначення
document.typeтакPLAIN_TEXT або HTML
document.contentтаксам текст, не порожній, до 1 000 000 байтів у UTF-8
document.languageCodeнікод мови, наприклад en; якщо не вказано, визначається автоматично
encodingTypeніNONE (за замовчуванням), UTF8, UTF16, UTF32: як рахуються значення beginOffset; не приймається moderateText

Приймається лише текст, переданий безпосередньо в запиті; посилання на збережені файли відхиляються з 400. Невідомі поля відхиляються з 400.

Тональність, сутності, модерація та annotateText працюють 26 мовами: en, ru, uk, de, fr, es, it, pt, nl, pl, cs, sk, sl, hr, sr, sv, da, no, fi, hu, ro, bg, el, lt, lv, et. На текст іншою мовою повертається 400.

Тональність​

curl -sS "https://llmapi.omev.be/v1/documents:analyzeSentiment" \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"document": {"type": "PLAIN_TEXT", "content": "The parcel arrived two days late. Support fixed it in minutes, though."},
"encodingType": "UTF8"
}'
{
"documentSentiment": {"magnitude": 1.4, "score": 0.1},
"sentences": [
{"text": {"content": "The parcel arrived two days late.", "beginOffset": 0},
"sentiment": {"magnitude": 0.6, "score": -0.6}},
{"text": {"content": "Support fixed it in minutes, though.", "beginOffset": 34},
"sentiment": {"magnitude": 0.8, "score": 0.8}}
],
"language": "en"
}

score змінюється від -1 (негативна) до 1 (позитивна). magnitude (від 0 і більше) показує, скільки емоцій загалом несе текст: змішаний текст може мати оцінку, близьку до 0, і високу інтенсивність.

Сутності та тональність щодо сутностей​

analyzeEntities і analyzeEntitySentiment приймають те саме тіло. Кожен елемент entities містить:

ПолеЗначення
nameсутність так, як її написано в тексті
typePERSON, ORGANIZATION, LOCATION, EVENT, WORK_OF_ART, CONSUMER_GOOD, OTHER, а також DATE, NUMBER, PRICE, PHONE_NUMBER
salience0–1, наскільки сутність центральна для тексту; список відсортовано за цим значенням
mentionsкожне місце, де вона трапляється: text (content, beginOffset) і type (PROPER, COMMON або TYPE_UNKNOWN для дат, чисел, цін і телефонних номерів)
metadataдодаткові структуровані дані, якщо вони є
sentimentscore і magnitude щодо цієї сутності (лише analyzeEntitySentiment)

Модерація​

moderateText приймає лише document. Відповідь перелічує кожну категорію з confidence від 0 до 1, тобто впевненістю, що текст належить до неї (обговорює, показує чи виражає її, позитивно чи негативно):

{
"moderationCategories": [
{"name": "Toxic", "confidence": 0.04},
{"name": "Health", "confidence": 0.81}
]
}

Категорії: Toxic, Insult, Profanity, Derogatory, Violent, Sexual, Death, Harm & Tragedy, Firearms & Weapons, Public Safety, Health, Religion & Belief, Illicit Drugs, War & Conflict, Finance, Politics, Legal. Обирайте власний поріг для кожної категорії.

Кілька аналізів в одному виклику​

{
"document": {"type": "PLAIN_TEXT", "content": "…"},
"features": {
"extractEntities": true,
"extractDocumentSentiment": true,
"classifyText": true,
"moderateText": true
}
}

features приймає extractEntities, extractEntitySentiment, extractDocumentSentiment, classifyText, moderateText і classificationModelOptions. Щонайменше одна функція має бути true; на extractSyntax повертається 400. Якщо ввімкнено classifyText, додайте до features "classificationModelOptions": {"v2Model": {"contentCategoriesVersion": "V2"}}, як і для маршруту класифікації v1. Відповідь містить language, а також поля кожного увімкненого аналізу: entities, documentSentiment, categories, moderationCategories.

Помилки​

КодКоли
400document відсутній або порожній, неправильний type, текст понад 1 000 000 байтів, непідтримувана мова, невідоме поле чи функція
401ключ API відсутній або недійсний
403ключ не може використовувати цей продукт
404невідомий метод, зокрема analyzeSyntax
429забагато запитів або баланс чи бюджет ключа не покриває виклик; повторіть спробу після короткої паузи або поповніть баланс
500тимчасова проблема; повторіть спробу обмежену кількість разів

Загальний формат і поради щодо повторних спроб див. у розділі Помилки.