Краткое руководство. Проверка орфографии с помощью REST API проверки орфографии Bing и C#

Предупреждение

30 октября 2020 г. API Поиск Bing перенесены из служб ИИ Azure в Поиск Bing Services. Эта документация приводится только для справки. Обновленную информацию см. в документации по API Поиска Bing. Инструкции по созданию ресурсов Azure для Поиска Bing приведены в статье Создание ресурса для Поиска Bing с помощью Azure Marketplace.

В этом кратком руководстве показано, как отправить первый вызов к REST API "Проверка орфографии Bing". Это простое приложение C# отправляет запрос к API и возвращает список предлагаемых исправлений.

Это приложение написано на C#. Но API представляет собой веб-службу RESTful, совместимую с большинством языков программирования. Исходный код этого приложения доступен на GitHub.

Предварительные требования

  • Любой выпуск Visual Studio 2017 или более поздней версии.

  • Пакет NuGet Newtonsoft.Json.

    Чтобы установить этот пакет в Visual Studio, сделайте следующее:

    1. Щелкните правой кнопкой мыши файл решения в обозревателе решений.
    2. Выберите Управление пакетами NuGet для решения.
    3. Найдите пакет Newtonsoft.Json и установите его.
  • Если вы используете Linux или MacOS, это приложение можно запустить с помощью Mono.

Создание ресурса Azure

Чтобы начать работу с API Проверки орфографии Bing, создайте один из следующих ресурсов Azure.

Ресурс проверки орфографии Bing

  • доступен на портале Azure до удаления.
  • Используйте бесплатную ценовую категорию, чтобы опробовать службу, а затем выполните обновление до платного уровня для рабочей среды.
  • API Проверки орфографии Bing также предоставляется на некоторых уровнях ресурса Поиска Bing версии 7.

Ресурс для нескольких служб

  • доступен на портале Azure до удаления.
  • Используйте один ключ и конечную точку для приложений в нескольких службах ИИ Azure.

Создание и инициализация проекта

  1. Создайте консольное решение SpellCheckSample в Visual Studio. Затем добавьте следующие пространства имен в основной файл кода:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Text;
    using Newtonsoft.Json;
    
  2. Создайте переменные для конечной точки API, ключа подписки и текста, в котором нужно проверить орфографию. Вы можете использовать глобальную конечную точку, указанную в коде ниже, или конечную точку личного поддомена, которая отображается на портале Azure для вашего ресурса.

    namespace SpellCheckSample
    {
        class Program
        {
            static string host = "https://api.cognitive.microsoft.com";
            static string path = "/bing/v7.0/spellcheck?";
            static string key = "<ENTER-KEY-HERE>";
            //text to be spell-checked
            static string text = "Hollo, wrld!";
        }
    }
    
  3. Создайте строку для параметров поиска:

    1. Назначьте код рынка для параметра mkt с помощью оператора =. Код рынка — это код страны или региона, из которого выполняется запрос.

    2. Добавьте параметр mode с оператором & и назначьте режим проверки орфографии. Можно указать режим proof (выявляет большинство орфографических и грамматических ошибок) или spell (выявляет большинство орфографических ошибок, но не так много грамматических ошибок).

    static string params_ = "mkt=en-US&mode=proof";
    

Создание и отправка запроса на проверку орфографии

  1. Создайте асинхронную функцию SpellCheck() для отправки запроса в API. Создайте HttpClient и добавьте ключ подписки в заголовок Ocp-Apim-Subscription-Key. В функции выполните описанные ниже действия.

    async static void SpellCheck()
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key);
    
        HttpResponseMessage response = null;
        // add the rest of the code snippets here (except for main())...
    }
    
  2. Создайте URI для запроса путем, добавив узел, путь и параметры.

    string uri = host + path + params_;
    
  3. Создайте список с объектом KeyValuePair, в котором содержится текст, и используйте его для создания объекта FormUrlEncodedContent. Задайте данные заголовка и используйте PostAsync() для отправки запроса.

    var values = new Dictionary<string, string>();
    values.Add("text", text);
    var content = new FormUrlEncodedContent(values);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
    response = await client.PostAsync(uri, new FormUrlEncodedContent(values));
    

Получение и вывод ответа API

Получение заголовка идентификатора клиента

Если в ответе содержится заголовок X-MSEdge-ClientID, получите значение и выведите его.

string client_id;
if (response.Headers.TryGetValues("X-MSEdge-ClientID", out IEnumerable<string> header_values))
{
    client_id = header_values.First();
    Console.WriteLine("Client ID: " + client_id);
}

Получение ответа

Получите ответ от API. Десериализируйте объект JSON и выведите его в консоли.

string contentString = await response.Content.ReadAsStringAsync();

dynamic jsonObj = JsonConvert.DeserializeObject(contentString);
Console.WriteLine(jsonObj);

Вызов функции проверки орфографии

В функции Main() проекта вызовите SpellCheck().

static void Main(string[] args)
{
    SpellCheck();
    Console.ReadLine();
}

Выполнение приложения

Выполните сборку проекта и запустите его. Если вы используете Visual Studio, то для отладки файла нажмите клавишу F5.

Пример ответа в формате JSON

Успешный ответ возвращается в формате JSON, как показано в примере ниже.

{
   "_type": "SpellCheck",
   "flaggedTokens": [
      {
         "offset": 0,
         "token": "Hollo",
         "type": "UnknownToken",
         "suggestions": [
            {
               "suggestion": "Hello",
               "score": 0.9115257530801
            },
            {
               "suggestion": "Hollow",
               "score": 0.858039839213461
            },
            {
               "suggestion": "Hallo",
               "score": 0.597385084464481
            }
         ]
      },
      {
         "offset": 7,
         "token": "wrld",
         "type": "UnknownToken",
         "suggestions": [
            {
               "suggestion": "world",
               "score": 0.9115257530801
            }
         ]
      }
   ]
}

Дальнейшие действия