Поделиться через


Контейнер: перевод текста

Переведите текст.

Запросить 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, чтобы перевести на немецкий и итальянский.
Обязательный параметр

Необязательные параметры

Параметр запроса 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

Английский ↔ Немецкий

  1. Перейдите на страницу Swagger: http://localhost:5000/swagger/index.html
  2. Выберите POST/перевести
  3. Выберите Попробовать
  4. Введите параметр От как en
  5. Введите параметр Кому как de
  6. Введите параметр api-version как 3.0
  7. В разделе тексты замените 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.

Создание приложения

  1. Используя предпочитаемый редактор или интегрированную среду разработки, создайте новый каталог для вашего приложения с именем container-environment или именем вашего выбора.

  2. Создайте файл YAML с именем compose.yaml. Расширения .yml или YAML можно использовать для compose файла.

  3. Скопируйте и вставьте следующий пример кода YAML в compose.yaml файл. {TRANSLATOR_ENDPOINT_URI} Замените {TRANSLATOR_KEY} значения ключей и конечных точек из экземпляра портал Azure Translator. Убедитесь, что используется .document translation endpoint

  4. Имя верхнего уровня (azure-ai-translator, azure-ai-language, azure-ai-read) — это указанный параметр.

  5. Это 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}
    
  6. Откройте терминал, перейдите в container-environment папку и запустите контейнеры с помощью следующей docker-compose команды:

    docker compose up
    
  7. Чтобы остановить контейнеры, используйте следующую команду.

    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.

Next Steps