使用 Bing 拼字檢查 API 進行拼字檢查

Download Sample 下載範例

Bing 拼字檢查會執行文字的內容拼字檢查,並提供拼字錯誤的內嵌建議。 本文說明如何使用 Bing 拼字檢查 REST API 來更正應用程式中的 Xamarin.Forms 拼字錯誤。

概觀

Bing 拼字檢查 REST API 有兩種作業模式,而且在向 API 提出要求時必須指定模式:

  • Spell 更正短文字(最多 9 個字),而不需要任何大小寫變更。
  • Proof 更正長文字、提供大小寫更正和基本標點符號,並抑制激進的更正。

注意

如果您沒有 Azure 訂用帳戶,請在開始之前建立 免費帳戶

必須取得 API 金鑰,才能使用 Bing 拼字檢查 API。 這可以在試用認知服務取得

如需 Bing 拼字檢查 API 支援的語言清單,請參閱 支援的語言。 如需 Bing 拼字檢查 API 的詳細資訊,請參閱 Bing 拼字檢查檔

驗證

對 Bing 拼字檢查 API 提出的每個要求都需要指定為標頭值的 Ocp-Apim-Subscription-Key API 金鑰。 下列程式代碼範例示範如何將 API 金鑰新增至 Ocp-Apim-Subscription-Key 要求的標頭:

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

無法將有效的 API 金鑰傳遞至 Bing 拼字檢查 API 會導致 401 回應錯誤。

執行拼字檢查

透過對 SpellCheck API https://api.cognitive.microsoft.com/bing/v7.0/SpellCheck提出 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,以傳回包含結果的 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 拼字檢查 REST API 的詳細資訊,請參閱 拼字檢查 API v7 參考

傳送要求

方法 SendRequestAsync 會向 Bing 拼字檢查 REST API 提出 GET 要求,並傳回回應:

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

這個方法會將 GET 要求傳送至 SpellCheck API,並使用要求 URL 指定要翻譯的文字,以及拼字檢查模式。 接著會讀取回應並傳回至呼叫方法。

SpellCheck API 會在回應中傳送 HTTP 狀態代碼 200 (確定),前提是要求有效,這表示要求成功,且要求的信息在回應中。 如需響應物件的清單,請參閱 響應物件

處理回應

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 – 以零起始的位移,從文字字串開頭到標示的文字。
  • token – 文字字串中未正確拼字或文法不正確的文字。
  • type – 導致文字標示的錯誤類型。 有兩個可能的值 – RepeatedTokenUnknownToken
  • suggestions – 字組陣列,可更正拼字或文法錯誤。 陣列是由和 score所組成suggestion,表示建議的更正正確信賴等級。

在範例應用程式中,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

注意

上述 Replace 範例會為了簡單起見,但在大量的文字中,可能會取代錯誤的令牌。 API 提供 offset 值,該值應該用於生產應用程式,以識別來源文字中用來執行更新的正確位置。

摘要

本文說明如何使用 Bing 拼字檢查 REST API 來更正應用程式中的 Xamarin.Forms 拼字錯誤。 Bing 拼字檢查會執行文字的內容拼字檢查,並提供拼字錯誤的內嵌建議。