使用必应拼写检查 API 进行拼写检查

下载示例 下载示例

必应拼写检查对文本执行上下文拼写检查,为拼写错误的字词提供内联建议。 本文介绍如何使用必应拼写检查 REST API 来更正应用程序中的 Xamarin.Forms 拼写错误。

概述

必应拼写检查 REST API 有两种操作模式,在向 API 发出请求时必须指定一种模式:

  • Spell 更正短文本 (最多 9 个单词) ,而无需更改任何大小写。
  • Proof 更正长文本,提供大小写更正和基本标点,并抑制主动更正。

注意

如果还没有 Azure 订阅,可以在开始前创建一个免费帐户

必须获取 API 密钥才能使用必应拼写检查 API。 这可以在试用认知服务中获取

有关必应拼写检查 API 支持的语言的列表,请参阅 支持的语言。 有关必应拼写检查 API 的详细信息,请参阅 必应拼写检查文档

身份验证

对必应拼写检查 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 密钥传递给必应拼写检查 API 将导致 401 响应错误。

执行拼写检查

可以通过在 https://api.cognitive.microsoft.com/bing/v7.0/SpellCheck向 API 发出 GET 或 POST 请求SpellCheck来实现拼写检查。 发出 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;
}

此方法设置要检查拼写的文本,并将拼写检查模式。

有关必应拼写检查 REST API 的详细信息,请参阅 拼写检查 API v7 参考

发送请求

方法 SendRequestAsync 向必应拼写检查 REST API 发出 GET 请求,并返回响应:

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

此方法将 GET 请求发送到 SpellCheck API,其中请求 URL 指定要翻译的文本,拼写检查模式。 然后,读取响应并将其返回到调用方法。

API SpellCheck 将在响应中发送 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 并将源文本中任何拼写错误或语法不正确的单词替换为第一个建议。 以下屏幕截图显示了拼写检查前后:

拼写检查前

拼写检查后

注意

为简单起见,上面的示例使用 Replace ,但在大量文本中,它可能会替换错误的令牌。 API 提供 offset 应在生产应用中使用的值,以标识源文本中的正确位置以执行更新。

总结

本文介绍了如何使用必应拼写检查 REST API 来更正应用程序中的 Xamarin.Forms 拼写错误。 必应拼写检查对文本执行上下文拼写检查,为拼写错误的字词提供内联建议。