使用必应拼写检查 API 进行拼写检查
必应拼写检查对文本执行上下文拼写检查,并为拼写错误的单词提供内联建议。 本文介绍了如何在 Xamarin.Forms 应用程序中使用必应拼写检查 REST API 纠正拼写错误。
概述
必应拼写检查 REST API 有两种操作模式,在向 API 发出请求时必须指定模式:
Spell
更正短文本(最多 9 个单词),而不进行任何大小写更改。Proof
更正长文本,提供大小写更正和基本标点符号,并抑制激进的更正。
必须获取 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
的 SpellCheck
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;
}
此方法会设置要拼写检查的文本,以及拼写检查模式。
有关必应拼写检查 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 指定要翻译的文本和拼写检查模式。 然后,该响应将读取并返回到调用方法。
如果请求有效,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
– 从文本字符串的开头到标记的单词的基于 0 的偏移量。token
– 文本字符串中拼写不正确或语法不正确的单词。type
– 导致单词被标记的错误的类型。 有两个可能的值:RepeatedToken
和UnknownToken
。suggestions
– 将更正拼写或语法错误的单词数组。 该数组由suggestion
和score
组成,表示对建议修正正确性的置信度。
在示例应用程序中,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 应用程序中的拼写错误。 必应拼写检查对文本执行上下文拼写检查,并为拼写错误的单词提供内联建议。