加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP如何调用百度AI开放平台中NLP语言处理基础技术的“依存句法分

发布时间:2020-12-13 14:16:03 所属栏目:PHP教程 来源:网络整理
导读:《PHP如何调用百度AI开放平台中NLP语言处理基础技术的“依存句法分析”等接口?》要点: 本文介绍了PHP如何调用百度AI开放平台中NLP语言处理基础技术的“依存句法分析”等接口?,希望对您有用。如果有疑问,可以联系我们。 在百度AI开放平台中,PHP如何调用

《PHP如何调用百度AI开放平台中NLP语言处理基础技术的“依存句法分析”等接口?》要点:
本文介绍了PHP如何调用百度AI开放平台中NLP语言处理基础技术的“依存句法分析”等接口?,希望对您有用。如果有疑问,可以联系我们。

在百度AI开放平台中,PHP如何调用NLP语言处理基础技术等接口?

有两种模式:

一种是使用百度的SDK,参http://ai.baidu.com/docs#/NLP-PHP-SDK/fddb1eac 

一种是使用自己封装的PHP类,参http://ai.baidu.com/docs#/NLP-API/top


本例展示了使用自己封装的PHP类调用百度NLP的句法依存关系接口:

/**
 * Class baiduapi  不使用
 * 作者:www.52php.cn
 */

class baiduapi
{
       public $error ='';
       public $apiUrl = '';
       private $_errnum=1;
       private $header = ["Content-Type: application/json"];

       public $access_token='';

       //以下这些需要换成你自己的。
       public $appId1 = '2321332';
       public $appKey1 = 'WLsd3232bI1j7ve3rnCNHIf';  //换成你的APP KEYA
       public $appSecretKey1 = 'f8w4g123asdfjwP0AExcYFh17PhLjYt1';  //换成你的

       public $tokenApi = 'https://aip.baidubce.com/oauth/2.0/token';
       public $grant_type = 'client_credentials';

       //缓存文件路径
       public $cacheFile = WEBROOT.'public/uploads/modules/tmp';

       /**
        * http constructor.
        */
       public function __construct ()
       {
              if(!is_dir ($this->cacheFile)) @mkdir ($this->cacheFile);
              $this->cacheFile = $this->cacheFile.'/baiduapi_token_cache.txt';
              $this->access_token = $this->getAccessToken ();
       }


       /**
        * 依存句法分析接口
        * @param $mode 默认值为0,可选值mode=0(对应web模型,适用于处理网页文本等书面表达句子);mode=1(对应query模型,适用于处理信息需求类的搜索或口语query)
        */
       public function textDependParse($text='', $mode =0)
       {
              $this->apiUrl = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/depparser?charset=UTF-8&access_token='.$this->access_token;

              $post = ['text'=>$text, 'mode'=>$mode];   // mb_convert_encoding(json_encode($text), 'GBK', 'UTF8')
              $post = json_encode ($post);  #关键
              $re = $this->getBaiduApi($this->apiUrl, $post , $this->header);

              return $re;
       }




       /** 获取百度API接口返回值:
        * @param $url API地址,如拼音调用,
        * @param string $auth  你在百度的apiKey
        * @return mixed 成功则返回std对象
        */
       public function getBaiduApi($url='', $postData='', $headers=[])
       {
              if(empty($url)) return false;
              $ch = curl_init ();
              curl_setopt ( $ch, CURLOPT_URL, $url );
              #["apikey: $apiKeyAuth"]
              if(!empty($headers)) curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
              curl_setopt ( $ch, CURLOPT_HEADER, 0);
              curl_setopt($ch, CURLOPT_TIMEOUT, 10);  //cURL允许执行的最长秒数。这里设定10S
              curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
              curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );

              #curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
              #curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

              curl_setopt ( $ch, CURLOPT_POST, empty($postData)?0:1 );  //POST则设置为1
              if(!empty($postData) ){
                     if( is_array ($postData)) $postData = http_build_query($postData);
                     curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postData );  //POST方式再启用
              }

              $result = curl_exec ( $ch );
              curl_close ( $ch );
              $result = json_decode($result);

              if( $this-> _errorParse($result))
              {
                     if(($result->error_code=='111' || $result->error_code=='110') && $this->_errnum++==1) //Access token过期,重新请求一次
                     {
                            if(file_exists ($this->cacheFile)) @unlink ($this->cacheFile);

                            $newAccessToken = $this->getAccessToken ();
                            $this->apiUrl = str_replace ($this->access_token,$newAccessToken,$this->apiUrl);
                            $url = str_replace ($this->access_token, $url);

                            $this->access_token =$newAccessToken;
                            unset($newAccessToken);

                            $result = $this->getBaiduApi($url, $postData, $headers);
                     }else{
                            return false;
                     }
              }
              return $result;
       }


       /** 获取 access token
        * @return mixed
        */
       public function getAccessToken()
       {
              $cacheFile = file_exists ($this->cacheFile) ? file_get_contents ($this->cacheFile) : '';
              if(!empty($cacheFile))
              {
                     $json = json_decode ($cacheFile);
                     if( (time ()-$json->starttime) < ($json->expires_in-100) ) return $json->access_token;  #2592000
              }

              $post_data['grant_type']       = $this->grant_type;
              $post_data['client_id']      = $this->appKey1;
              $post_data['client_secret'] = $this->appSecretKey1;
              $paraStr = "";
              foreach ( $post_data as $k => $v )     {
                     $paraStr .= "$k=" . urlencode( $v ). "&" ;
              }
              $paraStr = substr($paraStr ,-1);

              $this->apiUrl = 'https://aip.baidubce.com/oauth/2.0/token';
              $this->apiUrl .='?'.$paraStr;
              #$url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=WL3EGcTOnbI1j7ve3rnCNHIf&client_secret=f8w4gG5GdLLMjwP0AExcYFh17PhLjYt1';
              $res = $this->getBaiduApi($this->apiUrl);
              if(!empty($this->error)){
                     return false;
              }
              $res->starttime = time ();
              file_put_contents ($this->cacheFile ,json_encode ($res, true));

              return  $res->access_token;
       }


       private function _errorParse($res)
       {
              $errors=[
                     '1'=> 'Unknown error  服务器内部错误,请再次请求,如果持续出现此类错误,请通过QQ群(224994340)或工单联系技术支持团队',                     '2'=>'Service temporarily unavailable  服务暂不可用,请再次请求,如果持续出现此类错误,请通过QQ群(224994340)或工单联系技术支持团队',                     '3'=>'Unsupported openapi method  调用的API不存在,请检查后重新尝试',                     '4'=>'Open api request limit reached  集群超限额',                     '6'=>'No permission to access data  无权限访问该用户数据',                     '17'=>'Open api daily request limit reached  每天请求量超限额',                     '18'=>'Open api qps request limit reached      QPS超限额',                     '19'=>'Open api total request limit reached  请求总量超限额',                     '100'=>'Invalid parameter  包含了无效或错误参数,请检查代码',                     '110'=>'Access token invalid or no longer valid: Access Token失效',                     '111'=>'Access token expired: Access token过期',                     '282000'=>'internal error  服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(632426386)或工单联系技术支持团队。',                     '282002'=>'input encoding error        编码错误,请使用GBK编码',                     '282004'=>'invalid parameter(s) 请求中包含非法参数,请检查后重新尝试',                     '282130'=>'no result   当前查询无结果返回,出现此问题的原因一般为:参数配置存在问题,请检查后重新尝试',                     '282131'=>'input text too long  输入长度超限,请查看文档说明',                     '282133'=>'param {参数名} not exist       接口参数缺失',                     '282300'=>'word error: word不在算法词典中',                     '282301'=>'word_1 error        word_1 提交的词汇暂未收录,无法比对相似度',                     '282302'=>'word_2 error: word_2 提交的词汇暂未收录,无法比对相似度',                     '282303'=>'word_1&word_2 error : word_1和word_2暂未收录,无法比对相似度',              ];

              $this->error = '';
              if (!empty($res->error_code) && !empty($errors[$res->error_code]))
              {
                     $this->error = $errors[$res->error_code];
              }
              return  !empty($this->error) ? $this->error  : false;
       }
}


调用示例:

$re = $baidu->textDependParse('3D滚轮瘦脸仪微电流V脸神器脸部按摩器提拉紧致面部按摩仪美容仪');

if(!$re) echo $baidu->error;

else print_r ($re);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读