Контейнер: перевод текста
Переведите текст.
Запросить URL-адрес
Отправьте запрос POST
на следующий адрес.
POST http://localhost:{port}/translate?api-version=3.0&&from={from}&to={to}
Пример запроса
curl -x POST "https:localhost:5000/translate?api-version=3.0&from=en&to=es" -H "Content-Type: application/json" -d "[{
'Text': 'I would really like to drive your car.'}]"
Пример ответа
[
{
"translations": [
{
"text": "Realmente me gustaría conducir su coche.",
"to": "es"
}
]
}
]
Параметры запроса
В таблице ниже приведены параметры, которые передаются в строке запроса.
Обязательные параметры
Параметр запроса | Description | Условие |
---|---|---|
api-version | Версия API, запрошенная клиентом. Необходимое значение: 3.0 . |
Обязательный параметр |
от | Определяет язык оригинального текста. | Обязательный параметр |
до | Определяет язык выходного текста. Например, используйте параметр to=de , чтобы перевести на немецкий.Вы можете одновременно переводить на различные языки, использовав этот параметр в строке запроса несколько раз. Например, используйте параметр to=de&to=it , чтобы перевести на немецкий и итальянский. |
Обязательный параметр |
- Вы можете запросить службу для
translation
поддерживаемых языков области. - См. также языковую поддержку транслитерации.
Необязательные параметры
Параметр запроса | Description |
---|---|
textType | Необязательный параметр. Определяет, является ли текст перевода обычным или HTML-текстом. Любой код HTML должен быть полным элементом с правильным форматом. Возможные значения: plain (по умолчанию) или html . |
includeSentenceLength | Необязательный параметр. Указывает, следует ли включать границы предложения оригинального и переведенного текста. Возможные значения: true или false (по умолчанию). |
Заголовки запросов
Заголовки | Description | Условие |
---|---|---|
Заголовки проверки подлинности | См. доступные параметры проверки подлинности. | Обязательный заголовок запроса |
Тип контента | Указывает тип содержимого для полезных данных. Допустимое значение: application/json; charset=UTF-8 . |
Обязательный заголовок запроса |
content-length: 0 | Длина текста запроса. | Необязательно |
X-ClientTraceId | Созданный клиентом идентификатор GUID, позволяющий уникально идентифицировать запрос. Этот заголовок можно опустить, если в строке запроса указан идентификатор трассировки в параметре с именем ClientTraceId . |
Необязательно |
Текст запроса
Текст запроса является массивом в формате JSON. Каждый элемент этого массива представляет собой объект JSON со строковым свойством Text
, который являет собой строку для перевода.
[
{"Text":"I would really like to drive your car around the block a few times."}
]
Действительны следующие ограничения.
- Массив может содержать не более 100 элементов.
- Весь текст, включенный в запрос, не может превышать 50 000 символов, включая пробелы.
Текст ответа
Успешный ответ возвращается в формате массива JSON с одним результатом для каждой строки входного массива. Объект результата содержит следующие свойства.
translations
— массив результатов перевода. Размер массива совпадает с количеством языков, указанных с помощью параметра запросаto
. Каждый элемент массива содержит:to
— строка, которая содержит код целевого языка.text
— строка с текстом перевода.sentLen
— объект, возвращающий границы предложения в оригинальном и переведенном текстах.srcSentLen
— массив целых чисел, представляющих значения длины предложений в оригинальном тексте. Длина массива соответствует количеству предложений, а значения — длине каждого предложения.transSentLen
: массив целых чисел, представляющих значения длины предложений в переведенном тексте. Длина массива соответствует количеству предложений, а значения — длине каждого предложения.Границы предложения включены только тогда, когда параметр запроса
includeSentenceLength
имеет значениеtrue
.sourceText
— объект с одним свойством строкиtext
, который возвращает оригинальный текст в сценарии по умолчанию исходного языка.sourceText
свойство присутствует только в том случае, если входные данные выражаются в сценарии, который не является обычным для этого языка. Например, если входные данные были на арабском языке, но написаны латинским алфавитом, тогда параметрsourceText.text
вернет текст на арабском языке, преобразованным в арабский сценарий.
Заголовки ответа
Заголовки | Description |
---|---|
X-RequestId | Значение, созданное службой для идентификации запроса и используемого для устранения неполадок. |
X-MT-System | Указывает тип системы, который использовался для перевода каждого целевого языка, запрошенного для перевода. Это значение представляет собой список строк, разделенных запятыми. Каждая строка обозначает тип: ▪ Пользовательский запрос включает пользовательскую систему, и при переводе использовалась как минимум одна пользовательская система. ▪ Команда — все остальные запросы |
Коды состояния ответа
Если возникает ошибка, запрос возвращает ответ на ошибку JSON. Код ошибки представляет собой число из 6 знаков, первые 3 из которых являются кодом состояния HTTP, а оставшиеся 3 цифры определяют категорию ошибки. Коды распространенных ошибок можно найти на справочной странице переводчика версии 3.
Примеры кода: перевод текста
Примечание.
- Каждый пример выполняется в
localhost
указанном сdocker run
помощью команды. - Пока контейнер запущен,
localhost
указывает на сам контейнер. - Вам не нужно использовать
localhost:5000
. Вы можете использовать любой порт, который еще не используется в среде узла.
Перевод отдельного элемента
В этом примере показано, как перевести одно предложение с английского языка на упрощенный китайский.
curl -X POST "http://localhost:{port}/translate?api-version=3.0&from=en&to=zh-Hans" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'Hello, what is your name?'}]"
Текст ответа:
[
{
"translations":[
{"text":"你好, 你叫什么名字?","to":"zh-Hans"}
]
}
]
Массив translations
содержит один элемент, который обеспечивает перевод одного элемента текста в оригинальных данных.
Запрос конечной точки Azure AI Translator (текст)
Ниже приведен пример HTTP-запроса cURL с помощью localhost:5000, указанного docker run
с помощью команды:
curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-HANS"
-H "Content-Type: application/json" -d "[{'Text':'Hello, what is your name?'}]"
Примечание.
Если вы попытаетесь выполнить запрос cURL POST до того, как контейнер будет готов, вы получите ответ Служба временно недоступна. Подождите, пока контейнер будет готов, затем попробуйте еще раз.
Перевод текста с помощью API Swagger
Английский ↔ Немецкий
- Перейдите на страницу Swagger:
http://localhost:5000/swagger/index.html
- Выберите POST/перевести
- Выберите Попробовать
- Введите параметр От как
en
- Введите параметр Кому как
de
- Введите параметр api-version как
3.0
- В разделе тексты замените
string
следующим JSON
[
{
"text": "hello, how are you"
}
]
Выберите Выполнить, полученные переводы будут выведены в Тексте ответа. Появится следующий ответ:
"translations": [
{
"text": "hallo, wie geht es dir",
"to": "de"
}
]
Перевести текст с помощью Python
Английский французский ↔
import requests, json
url = 'http://localhost:5000/translate?api-version=3.0&from=en&to=fr'
headers = { 'Content-Type': 'application/json' }
body = [{ 'text': 'Hello, how are you' }]
request = requests.post(url, headers=headers, json=body)
response = request.json()
print(json.dumps(
response,
sort_keys=True,
indent=4,
ensure_ascii=False,
separators=(',', ': ')))
Перевести текст с помощью консольного приложения C#/.NET
Английский испанский ↔
Запустите Visual Studio и создайте новое консольное приложение. Отредактируйте файл *.csproj
, чтобы добавить узел <LangVersion>7.1</LangVersion>
— указывает C# 7.1. Добавьте пакет NuGet Newtoonsoft.Json версии 11.0.2.
В Program.cs
измените весь существующий код на следующий скрипт:
using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace TranslateContainer
{
class Program
{
const string ApiHostEndpoint = "http://localhost:5000";
const string TranslateApi = "/translate?api-version=3.0&from=en&to=es";
static async Task Main(string[] args)
{
var textToTranslate = "Sunny day in Seattle";
var result = await TranslateTextAsync(textToTranslate);
Console.WriteLine(result);
Console.ReadLine();
}
static async Task<string> TranslateTextAsync(string textToTranslate)
{
var body = new object[] { new { Text = textToTranslate } };
var requestBody = JsonConvert.SerializeObject(body);
var client = new HttpClient();
using (var request =
new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri($"{ApiHostEndpoint}{TranslateApi}"),
Content = new StringContent(requestBody, Encoding.UTF8, "application/json")
})
{
// Send the request and await a response.
var response = await client.SendAsync(request);
return await response.Content.ReadAsStringAsync();
}
}
}
}
Перевод нескольких строк
Одновременный перевод нескольких строк — это просто вопрос задания массива строк в тексте запроса.
curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-Hans" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'Hello, what is your name?'}, {'Text':'I am fine, thank you.'}]"
Ответ содержит перевод всех фрагментов текста в том же порядке, что и в запросе. Текст ответа:
[
{
"translations":[
{"text":"你好, 你叫什么名字?","to":"zh-Hans"}
]
},
{
"translations":[
{"text":"我很好,谢谢你。","to":"zh-Hans"}
]
}
]
Перевод на несколько языков
В этом примере показано, как перевести одинаковый оригинальный текст на несколько языков в одном запросе.
curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-Hans&to=de" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'Hello, what is your name?'}]"
Текст ответа:
[
{
"translations":[
{"text":"你好, 你叫什么名字?","to":"zh-Hans"},
{"text":"Hallo, was ist dein Name?","to":"de"}
]
}
]
Перевод содержимого с помощью разметки и указание преобразованного содержимого
Обычно переводят содержимое, которое включает разметку, например содержимое HTML-страницы или содержимое XML-документа. Включите параметр запроса textType=html
при переводе содержимого с тегами. Кроме того, иногда бывает полезно исключить из перевода конкретное содержимое. С помощью атрибута class=notranslate
можно указать содержимое, которое должно остаться не переведенным. В следующем примере содержимое внутри первого div
элемента не преобразуется, а содержимое второго div
элемента преобразуется.
<div class="notranslate">This will not be translated.</div>
<div>This will be translated. </div>
Пример запроса приведен ниже.
curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-Hans&textType=html" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'<div class=\"notranslate\">This will not be translated.</div><div>This will be translated.</div>'}]"
Ответ:
[
{
"translations":[
{"text":"<div class=\"notranslate\">This will not be translated.</div><div>这将被翻译。</div>","to":"zh-Hans"}
]
}
]
Перевод с помощью динамического словаря
Если вы уже знаете перевод, который хотите применить к слову или фразе, вы можете указать его в запросе как исправление. Динамический словарь безопасен только для имен собственных, таких как личные имена и названия продуктов.
В разметке используется следующий синтаксис:
<mstrans:dictionary translation="translation of phrase">phrase</mstrans:dictionary>
Например, рассмотрим следующее русское предложение: "Слово "словоматик" — это словарная запись". Чтобы сохранить при переводе слово словоматик, необходимо отправить запрос:
curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=de" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'The word <mstrans:dictionary translation=\"wordomatic\">word or phrase</mstrans:dictionary> is a dictionary entry.'}]"
Результат:
[
{
"translations":[
{"text":"Das Wort \"wordomatic\" ist ein Wörterbucheintrag.","to":"de"}
]
}
]
Эта возможность работает одинаково как с textType=text
, так и с textType=html
. Компонент должен использоваться только в случае необходимости. Соответствующий и гораздо лучший способ настройки перевода — это использование концентратора Custom Translator. Custom Translator обеспечивает полное использование контекста и статистические значения вероятности. Если вы создали обучающие данные, показывающие работу или фразу в контексте, вы получите лучшие результаты. Узнайте больше о Custom Translator.
Ограничения запросов
Каждый запрос на перевод ограничен 50 000 символами для всех целевых языков, на которые вы выполняете перевод. Например, при отправке запроса на перевод 3000 символов на три разных языка его размер составит 3000x3 = 9000 символов, что соответствует ограничению запроса. Плата взимается на основе количества знаков, а не запросов. Мы рекомендуем отправлять более короткие запросы.
В нижеприведенной таблице перечислены элементы массива и ограничения на количество символов для операции перевод Переводчика.
Операция | Максимальный размер элемента массива | Максимальное количество элементов массива | Максимальный размер запроса (символов) |
---|---|---|---|
translate | 10,000 | 100 | 50,000 |
Использование docker Compose: Переводчик с вспомогательными контейнерами
Docker Compose — это средство, позволяющее настроить многоконтейнерные приложения с помощью одного файла YAML, который обычно называется compose.yaml
. docker compose up
Используйте команду, чтобы запустить приложение контейнера и docker compose down
команду, чтобы остановить и удалить контейнеры.
Если вы установили Интерфейс командной строки Docker Desktop, он включает в себя docker compose и его предварительные требования. Если у вас нет Docker Desktop, ознакомьтесь с обзором установки Docker Compose.
В следующей таблице перечислены необходимые вспомогательные контейнеры для операций перевода текста и документов. Контейнер Переводчика отправляет сведения о выставлении счетов в Azure через ресурс Azure AI Translator в учетной записи Azure.
Операция | Запрос запроса | Document type | Поддержка контейнеров |
---|---|---|---|
•Перевод текста • Перевод документов |
from указанный. |
Документы Office | нет |
•Перевод текста • Перевод документов |
from не задано. Требует автоматического обнаружения языка для определения исходного языка. |
Документы Office | Контейнер "Анализ текста:язык" ✔️ |
•Перевод текста • Перевод документов |
from указанный. |
Сканированные PDF-документы | ✔️ Контейнер Vision:read |
•Перевод текста • Перевод документов |
from не указан, требующий автоматического обнаружения языка для определения исходного языка. |
Сканированные PDF-документы | Контейнер "Анализ текста:язык" ✔️ ✔️ Контейнер Vision:read |
Образы и теги контейнеров
Образы контейнеров служб искусственного интеллекта Azure можно найти в каталоге Реестр артефактов Microsoft. В следующей таблице перечислены полные расположения изображений для перевода текста и документа:
Контейнер | Расположение образа | Примечания. |
---|---|---|
Переводчик: перевод текста | mcr.microsoft.com/azure-cognitive-services/translator/text-translation:latest |
Полный список тегов версий перевода текста служб ИИ Azure можно просмотреть в MCR. |
Переводчик: перевод документов | Activities overview (Обзор действий) | Activities overview (Обзор действий) |
Анализ текста: язык | mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest |
Полный список служб ИИ Azure можно просмотреть Анализ текста теги версий языка в MCR. |
Зрение: чтение | mcr.microsoft.com/azure-cognitive-services/vision/read:latest |
Полный список служб ИИ Azure можно просмотреть Компьютерное зрение чтение OCR тегов версий в MCR. |
Создание приложения
Используя предпочитаемый редактор или интегрированную среду разработки, создайте новый каталог для вашего приложения с именем
container-environment
или именем вашего выбора.Создайте файл YAML с именем
compose.yaml
. Расширения .yml или YAML можно использовать дляcompose
файла.Скопируйте и вставьте следующий пример кода YAML в
compose.yaml
файл.{TRANSLATOR_ENDPOINT_URI}
Замените{TRANSLATOR_KEY}
значения ключей и конечных точек из экземпляра портал Azure Translator. Убедитесь, что используется .document translation endpoint
Имя верхнего уровня (
azure-ai-translator
,azure-ai-language
,azure-ai-read
) — это указанный параметр.Это
container_name
необязательный параметр, который задает имя контейнера при запуске, а не позволяетdocker compose
создавать имя.services: azure-ai-translator: container_name: azure-ai-translator image: mcr.microsoft.com/product/azure-cognitive-services/translator/text-translation:latest environment: - EULA=accept - billing={TRANSLATOR_ENDPOINT_URI} - apiKey={TRANSLATOR_KEY} - AzureAiLanguageHost=http://azure-ai-language:5000 - AzureAiReadHost=http://azure-ai-read:5000 ports: - "5000:5000" azure-ai-language: container_name: azure-ai-language image: mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest environment: - EULA=accept - billing={TRANSLATOR_ENDPOINT_URI} - apiKey={TRANSLATOR_KEY} azure-ai-read: container_name: azure-ai-read image: mcr.microsoft.com/azure-cognitive-services/vision/read:latest environment: - EULA=accept - billing={TRANSLATOR_ENDPOINT_URI} - apiKey={TRANSLATOR_KEY}
Откройте терминал, перейдите в
container-environment
папку и запустите контейнеры с помощью следующейdocker-compose
команды:docker compose up
Чтобы остановить контейнеры, используйте следующую команду.
docker compose down
Совет
docker compose
Команды:docker compose pause
приостанавливает выполнение контейнеров.docker compose unpause {your-container-name}
нераспакованные контейнеры приостановлены.docker compose restart
перезапускает все остановленные и запущенные контейнеры со всеми предыдущими изменениями без изменений. При внесении изменений вcompose.yaml
конфигурацию эти изменения не обновляются с помощьюdocker compose restart
команды. Для отражения обновлений и изменений вcompose.yaml
файле необходимо использоватьdocker compose up
команду.docker compose ps -a
перечисляет все контейнеры, включая остановленные.docker compose exec
позволяет выполнять команды для отсоединения или задания переменных среды в работающем контейнере.
Дополнительные сведения см. в справочнике по интерфейсу командной строки Docker.