2017-06-21 80 views
0

我试图实现Bing Spell Check API v7。这是我目前的功能:Bing拼写检查API v7的实现返回0 flaggedTokens

# spell check 
function bing_spell_check($q, $lang) { 
    $param = array(); 
    $param['appName'] = PRO_NAME; 
    $param['text'] = $q; 
    $param['setLang'] = $lang; 
    $url = 'https://api.cognitive.microsoft.com/bing/v7.0/SpellCheck?'.http_build_query($param); 
    $process = curl_init(); 
    curl_setopt($process, CURLOPT_URL, $url); 
    curl_setopt($process, CURLOPT_TIMEOUT, 10); 
    curl_setopt($process, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($process, CURLOPT_HTTPHEADER, 
     array(
      'Accept: application/ld+json', 
      'Ocp-Apim-Subscription-Key: '.PRO_BING_KEY_SPELL 
     ) 
    ); 
    $response = curl_exec($process); 
    return $response; 
} 

的问题是,这个例子:

print_r(bing_spell_check('en', 'whts yur name?')); 

返回:

{ 
    "@context":{ 
     "@vocab":"http:\/\/bingapis.com\/v7\/schemas\/", 
     "s":"http:\/\/schema.org\/", 
     "@base":"https:\/\/api.cognitive.microsoft.com\/api\/v7\/" 
    }, 
    "@type":"SpellCheck", 
    "flaggedTokens":[ 
    ] 
} 

这意味着它没有发现任何错误。我跑了同样的试验Bing's test tool,我收到这个结构,而不是:

{ 
    "_type": "SpellCheck", 
    "FlaggedTokens": [ 
    { 
     "Offset": 0, 
     "Token": "whts", 
     "Type": "UnknownToken", 
     "Suggestions": [ 
     { 
      "suggestion": "what's", 
      "Score": 0.909352914464075 
     }, 
     { 
      "suggestion": "whats", 
      "Score": 0.810588859407343 
     }, 
     { 
      "suggestion": "what is", 
      "Score": 0.680176771139565 
     } 
     ] 
    }, 
    { 
     "Offset": 5, 
     "Token": "yur", 
     "Type": "UnknownToken", 
     "Suggestions": [ 
     { 
      "suggestion": "your", 
      "Score": 0.909352914464075 
     } 
     ] 
    } 
    ] 
} 

我失去了一些东西。有任何想法吗?谢谢!

回答

0

这很简单,你只是混淆了你的函数参数。你有

function bing_spell_check($q, $lang) {} 

bing_spell_check('en', 'whts yur name?'); 

这就是问题开始的地方,现在$qen$lang现在whts yur name?。因此,当您创建$param数组时,您将语言和文本混淆在一起(这会导致拼写检查API以静默方式失败)。你可以简单地通过改变参数为了解决这个问题:

function bing_spell_check($lang, $q) {} 

现在你的代码

<?php 
define(PRO_BING_KEY_SPELL, 'XXX'); 
define(PRO_NAME, 'XXX'); 

function bing_spell_check($lang, $q) { 
    $param = array(); 
    $param['appName'] = PRO_NAME; 
    $param['text'] = $q; 
    $param['setLang'] = $lang; 
    $url = 'https://api.cognitive.microsoft.com/bing/v7.0/spellcheck?'.http_build_query($param); 
    $process = curl_init(); 
    curl_setopt($process, CURLOPT_URL, $url); 
    curl_setopt($process, CURLOPT_TIMEOUT, 10); 
    curl_setopt($process, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($process, CURLOPT_HTTPHEADER, 
     array(
      'Accept: application/ld+json', 
      'Ocp-Apim-Subscription-Key: '.PRO_BING_KEY_SPELL 
     ) 
    ); 
    $response = curl_exec($process); 
    return $response; 
} 

print_r(bing_spell_check('en', 'whts yur name?')); 
?> 

结果

{ 
    "@context": { 
     "@vocab": "http:\/\/bingapis.com\/v7\/schemas\/", 
     "s": "http:\/\/schema.org\/", 
     "@base": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/" 
    }, 
    "@type": "SpellCheck", 
    "flaggedTokens": [{ 
     "offset": 0, 
     "token": "whts", 
     "type": "UnknownToken", 
     "suggestions": [{ 
      "suggestion": "what's", 
      "score": 0.909352914464075 
     }, { 
      "suggestion": "whats", 
      "score": 0.810588859407343 
     }, { 
      "suggestion": "what is", 
      "score": 0.680176771139565 
     }] 
    }, { 
     "offset": 5, 
     "token": "yur", 
     "type": "UnknownToken", 
     "suggestions": [{ 
      "suggestion": "your", 
      "score": 0.909352914464075 
     }] 
    }] 
} 
+1

不能相信我没有注意到这样一个愚蠢的错误。这可能是凌晨3点编程的结果。立即接受答案。谢谢! – andufo

+0

@andufo没问题!我很高兴能够帮助你。 –