使用Python对鹅厂的文本情感分析接口进行封装

22 篇文章 2 订阅
11 篇文章 2 订阅

昨天尝试了鹅厂的AI开放平台中的文本情感分析功能。
今天进行了封装,并且设计了针对鹅厂AI开放平台的接口。
以后使用其他的功能扩展起来也能方便一些。

首先简单画了一个UML类图:
在这里插入图片描述
接下来是实现:

qqaibase.py:

'''
data:2019.7.7
copyright:buaalzm
'''
import time
import random
import string
from abc import ABCMeta, abstractmethod
class QQAIBase():
    __metaclass__ = ABCMeta
    param_dict = {}

def __init__(self, app_id, app_key):
    self.param_dict['app_id'] = app_id
    self.param_dict['app_key'] = app_key

def basic_param_init(self):
    '''请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效)'''
    t = time.time()
    self.param_dict['time_stamp'] = str(int(t))

    '''请求随机字符串,用于保证签名不可预测'''
    self.param_dict['nonce_str'] = ''.join(random.sample(string.ascii_letters + string.digits, 10))

@abstractmethod
def get_url(self):
    pass

@abstractmethod
def get_content(self):
    pass

nlptextpolar.py

'''
data:2019.7.7
copyright:buaalzm
'''
from qqaibase import QQAIBase
import urllib
import hashlib
import requests
from bs4 import BeautifulSoup
import json

class NLPTextPolar(QQAIBase):
    base_url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textpolar"  # API地址
    def get_url(self, content):
        self.basic_param_init()
        '''值使用URL编码,URL编码算法用大写字母'''
        self.param_dict['text'] = urllib.request.quote(content.encode('utf-8')).upper()
        sign_before = ''
        for key in sorted(self.param_dict):
            if key is 'app_key':
                continue
            sign_before += key + '=' + self.param_dict[key] + '&'
        sign_before += 'app_key=' + self.param_dict['app_key']
        '''计算MD5摘要,得到签名字符串'''
        sign = hashlib.md5(sign_before.encode('utf-8')).hexdigest()
        sign = sign.upper()
        params = 'app_id=' + self.param_dict['app_id'] + '&time_stamp=' + self.param_dict['time_stamp']\
        + '&nonce_str=' + self.param_dict['nonce_str'] + '&sign=' + sign + '&text=' + self.param_dict['text']
        url = self.base_url + '?' + params  # 请求地址拼接
        return url

    def get_content(self, content):
        url = self.get_url(content)
        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:
            print('exception occur')
            return 0, 0, 0

if __name__ == '__main__':
    text_polar = NLPTextPolar('2118080088', '0tAooeqvvQeVx0hZ')
    polar, confd, text = text_polar.get_content('有意思')
    print('情感倾向:'+str(polar)+'\n'+'程度:'+str(confd)+'\n'+'文本:'+str(text))

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值