1. 程式人生 > >利用騰訊AI開放平臺進行情感分析

利用騰訊AI開放平臺進行情感分析

騰訊AI開放平臺提供了三大功能:自然語言處理、計算機視覺和智慧語音。
官網截圖

情感分析是自然語言處理下的一大分支,騰訊AI的情感分析介面如下:
情感分析
這裡介紹一下如何利用python來使用騰訊的情感分析API介面服務以便進行大量資料的情感分析。

步驟簡介

1、首先你需要利用QQ號登陸該平臺,進入到控制檯。
2、建立應用,選擇你需要使用的介面(這裡以情感分析為例)。
3、進入應用詳情、你就會看到你的AppID和AppKey。
應用詳情
4、參考情感分析的技術文件,利用python進行接入。

具體實施

1、簽名演算法

首先我們在呼叫API時要搞定介面鑑權,即簽名演算法。

根據介面鑑權的技術文件,可知簽名演算法採用MD5摘要方式實現,且演算法的實現步驟技術文件裡面很詳細,剛好python裡面有相應的包,直接import hashlib即可,我這裡就直接貼程式碼了。

# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name:     md5sign
   Description :
   Author :       YOUQING
   date:          2017/11/20
-------------------------------------------------
   Change Activity:
                   2017/11/20:
-------------------------------------------------
"""
import hashlib import time import random import string import urllib import sys def get_params(plus_item): '''請求時間戳(秒級),用於防止請求重放(保證簽名5分鐘有效)''' t = time.time() time_stamp=int(t) '''請求隨機字串,用於保證簽名不可預測''' nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10)) '''應用標誌,這裡修改成自己的id和key'''
app_id='XXXXXX' app_key='XXXXXXXXXXXX' '''值使用URL編碼,URL編碼演算法用大寫字母''' text1=plus_item text=urllib.quote(text1.decode(sys.stdin.encoding).encode('utf8')).upper() '''拼接應用金鑰,得到字串S''' sign_before='app_id='+app_id+'&nonce_str='+nonce_str+'&text='+text+'&time_stamp='+str(time_stamp)+'&app_key='+app_key '''計算MD5摘要,得到簽名字串''' m=hashlib.md5() m.update(sign_before) sign=m.hexdigest() sign=sign.upper() params='app_id='+app_id+'&time_stamp='+str(time_stamp)+'&nonce_str='+nonce_str+'&sign='+sign+'&text='+text return params

注意事項
1、app_id、app_key替換成自己應用詳情裡的相應內容
2、plus_item是你要輸入的文字內容
3、檔名:md5sign

2、介面呼叫

上一段程式碼得到的是請求引數,這裡我們需要將API地址和請求引數拼接起來,然後採用請求方法GET,並用BeautifulSoup去解析(簡單的爬蟲知識)。
由於響應格式是JSON格式,我們採用json.loads來轉換為字典,以便獲取我們想要的內容(情感傾向、極性與文字內容)

程式碼如下:

# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name:     tencent_api
   Description :
   Author :       YOUQING
   date:          2017/11/20
-------------------------------------------------
   Change Activity:
                   2017/11/20:
-------------------------------------------------
"""

import requests
import md5sign
from bs4 import BeautifulSoup
import json
import sys

reload(sys)
sys.setdefaultencoding('utf-8')


def get_content(plus_item):
    url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textpolar"  # API地址
    params = md5sign.get_params(plus_item)#獲取請求引數
    url=url+'?'+params#請求地址拼接
    try:
        r = requests.get(url)
        soup = BeautifulSoup(r.text, 'lxml')
        allcontents=soup.select('body')[0].text.strip()
        allcontents_json=json.loads(allcontents)#str轉成dict

        return allcontents_json["data"]["polar"],allcontents_json["data"]["confd"],allcontents_json["data"]["text"]
    except Exception, e:
        print 'a', str(e)
        return 0,0,0



if __name__ == '__main__':
    polar,confd,text=get_content('今天天氣真好')
    print '情感傾向:'+str(polar)+'\n'+'程度:'+str(confd)+'\n'+'文字:'+text

執行結果
極性:1
程度:0.90936
文字:今天天氣真好
(注:1代表正面情感;0代表中性;-1代表負面情感)

小結

騰訊的情感分析號稱是依託於騰訊千億級社交語料的支撐,但我認為在使用過程中的準確性還是要看使用的場景,反正我用來分析酒店評論時並不是很滿意得到的結果(可能需要專門的酒店語料庫才能更加準確)。且text的長度上限200位元組,這就造成了使用時較大的限制。