Bing Spell Check API を使用したスペル チェック

Download Sampleサンプルのダウンロード

Bing Spell Check では、テキストのコンテキスト スペル チェックが実行され、スペルミスの単語に対するインライン候補が提供されます。 この記事では、Bing Spell Check REST API を使用して、Xamarin.Forms アプリケーションのスペル ミスを修正する方法について説明します。

概要

Bing Spell Check REST API には 2 つの動作モードがあり、API に対して要求を行う際はモードを指定する必要があります。

  • Spell は、大文字と小文字を変更することなく短いテキスト (最大 9 単語) を修正します。
  • Proof は長いテキストを修正し、大文字と小文字の修正と基本的な句読点を提供し、大々的な修正を抑制します。

Note

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Bing Spell Check API を使用するには、API キーを取得する必要があります。 これは、「Cognitive Services を試す」で取得できます

Bing Spell Check API でサポートされている言語の一覧については、サポートされている言語に関するページを参照してください。 Bing Spell Check API の詳細については、Bing Spell Check のドキュメントを参照してください。

認証

Bing Spell Check API に対して行うすべての要求には、API キーが必要であり、それを Ocp-Apim-Subscription-Key ヘッダーの値として指定する必要があります。 次のコード例は、API キーを要求の Ocp-Apim-Subscription-Key ヘッダーに追加する方法を示しています。

public BingSpellCheckService()
{
    httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", Constants.BingSpellCheckApiKey);
}

有効な API キーを Bing Spell CheckAPI に渡すことができない場合、401 応答エラーが発生します。

スペル チェックの実行

スペル チェックは、https://api.cognitive.microsoft.com/bing/v7.0/SpellCheckSpellCheck API に対して GET または POST 要求を行うと実現できます。 GET 要求を行うと、スペル チェックされるテキストがクエリ パラメーターとして送信されます。 POST 要求を行うと、スペル チェックされるテキストが要求本文で送信されます。 クエリ パラメーター文字列の長さの制限のために、GET 要求は、1500 文字のスペル チェックに制限されます。 したがって、短い文字列をスペル チェックする場合を除いて、通常は POST 要求を行う必要があります。

サンプル アプリケーションでは、SpellCheckTextAsync メソッドでスペル チェック プロセスを呼び出します。

public async Task<SpellCheckResult> SpellCheckTextAsync(string text)
{
    string requestUri = GenerateRequestUri(Constants.BingSpellCheckEndpoint, text, SpellCheckMode.Spell);
    var response = await SendRequestAsync(requestUri);
    var spellCheckResults = JsonConvert.DeserializeObject<SpellCheckResult>(response);
    return spellCheckResults;
}

SpellCheckTextAsync メソッドは、要求 URI を生成した後、その要求を SpellCheck API に送信します。この API は、結果を含む JSON 応答を返します。 JSON 応答は逆シリアル化され、その結果が呼び出し元のメソッドに返されて表示されます。

スペル チェックの構成

HTTP クエリ パラメーターを指定すると、スペル チェック プロセスを構成できます。

string GenerateRequestUri(string spellCheckEndpoint, string text, SpellCheckMode mode)
{
  string requestUri = spellCheckEndpoint;
  requestUri += string.Format("?text={0}", text);                         // text to spell check
  requestUri += string.Format("&mode={0}", mode.ToString().ToLower());    // spellcheck mode - proof or spell
  return requestUri;
}

このメソッドは、スペル チェックするテキストと、スペル チェック モードを設定します。

Bing Spell Check REST API の詳細については、「Spell Check API v7 リファレンス」を参照してください。

要求の送信

SendRequestAsync メソッドは、Bing Spell Check REST API に対して GET 要求を行います。

async Task<string> SendRequestAsync(string url)
{
    var response = await httpClient.GetAsync(url);
    return await response.Content.ReadAsStringAsync();
}

このメソッドは、翻訳するテキストとスペル チェック モードを指定する要求 URL を使用して、GET 要求を SpellCheck API に送信します。 この後、応答が読み取られ、呼び出し元のメソッドに返されます。

SpellCheck API は、要求が有効な場合、応答で HTTP 状態コード 200 (OK) を送信します。これは、要求が成功し、要求された情報が応答内にあることを示します。 応答オブジェクトの一覧については、「応答オブジェクト」を参照してください。

応答の処理

API 応答は、JSON 形式で返されます。 次の JSON データは、スペルミスのあるテキスト Go shappin tommorow の応答メッセージを示しています。

{  
   "_type":"SpellCheck",
   "flaggedTokens":[  
      {  
         "offset":3,
         "token":"shappin",
         "type":"UnknownToken",
         "suggestions":[  
            {  
               "suggestion":"shopping",
               "score":1
            }
         ]
      },
      {  
         "offset":11,
         "token":"tommorow",
         "type":"UnknownToken",
         "suggestions":[  
            {  
               "suggestion":"tomorrow",
               "score":1
            }
         ]
      }
   ],
   "correctionType":"High"
}

配列 flaggedTokens には、スペルが正しくないというフラグが設定されたか、または文法が間違っているテキスト内の単語の配列が含まれます。 スペルおよび文法のエラーが見つからない場合、この配列は空です。 配列内のタグは、次のとおりです。

  • offset - テキスト文字列の先頭から、フラグが設定された単語までの 0 から始まるオフセット。
  • token – スペルが正しくない、または文法が間違っているテキスト内の単語。
  • type – 単語にフラグを設定する原因となったエラーの種類。 設定される可能性のある値は、RepeatedTokenUnknownToken の 2 つです。
  • suggestions – スペル ミスまたは文法エラーを修正する単語の配列。 この配列は、suggestionscore (修正候補が正しいという信頼度のレベルを示します) で構成されます。

サンプル アプリケーションでは、JSON 応答は SpellCheckResult インスタンスに逆シリアル化され、結果が呼び出し元のメソッドに返されて表示されます。 次のコード例は、表示するために SpellCheckResult インスタンスが処理される方法を示しています。

var spellCheckResult = await bingSpellCheckService.SpellCheckTextAsync(TodoItem.Name);
foreach (var flaggedToken in spellCheckResult.FlaggedTokens)
{
  TodoItem.Name = TodoItem.Name.Replace(flaggedToken.Token, flaggedToken.Suggestions.FirstOrDefault().Suggestion);
}

このコードは、FlaggedTokens コレクションを反復処理し、ソース テキスト内のスペルミスのある単語または文法が間違っている単語を最初の候補に置き換えます。 次のスクリーンショットは、スペル チェックの前と後を示しています。

Before Spell Check

After Spell Check

Note

上記の例では、わかりやすくするために Replace が使用されていますが、大量のテキストでは、誤ったトークンが置き換えられる可能性があります。 API は offset 値を提供します。運用アプリでは、これを使用して、ソース テキスト内の更新を実行する正しい位置を特定する必要があります。

まとめ

この記事では、Bing Spell Check REST API を使用して、Xamarin.Forms アプリケーション内のスペルミスを修正する方法について説明しました。 Bing Spell Check では、テキストのコンテキスト スペル チェックが実行され、スペルミスの単語に対するインライン候補が提供されます。