要想及时的了解数学信息,请中学师生关注公众号“中学究尽数学”;大学生关注公众号“究尽数学”

文本情感分析

Python huijiaorz 337℃ 0评论

使用语言:Python 2.7;

使用库:百度自然语言处理SDK baidu-aip;或者使用百度自然语言处理的API、百度舆情API;腾讯自然语言处理API;

百度云服务:https://ai.qq.com/doc/index.shtml

腾讯云服务:http://ai.baidu.com/tech/nlp/sentiment_classify

使用流程

  1. 登陆百度和腾讯云服务的控制台(分别使用百度账号和QQ登陆即可);
  2. 创建应用,保存相应的AppID等参数;
  3. 按照平台API使用说明,写出使用代码;
  4. 鉴于准确率,可同时使用百度和腾讯的情感分析;

百度开放API

百度的API是使用的SDK,通过pip安装baidu-aip;在NLP_API.py中导入下述TencentNLpSDK.py一起使用:

# -*-coding:utf-8 -*-
from aip import AipNlp#百度NLP SDK
####腾讯NLP
from TencentNLpSDK import TencentNLP

class BaiduNLpClassify(object):
    '''使用百度云服务的自然语言处理SDK,进行文本数据的情感分析'''
    def __init__(self):
        super(BaiduNLpClassify, self).__init__()
        self.APP_ID = '11123697'
        self.API_KEY = 'jWpFGasdgghT5TjFBrcqaks'
        self.SECRET_KEY = 'lU7CBnnFpasderybnM8IcuzvqXTbU'
        self.Client = AipNlp(self.APP_ID,self.API_KEY,self.SECRET_KEY)

    def getTextClassify(self,text):
        try:
            num = self.Client.sentimentClassify(text)['items'][0]['sentiment']
            return {0:'负面',1:'中性',2:'正面'}.get(num)
        except Exception as e:
            print '异常'
            print e
            return '异常'

class TencentNLpClassify(object):
    """使用腾讯自然语言处理服务,进行文本数据的情感分析,分类"""
    def __init__(self):
        super(TencentNLpClassify, self).__init__()
        self.AppID = '21034795151'
        self.AppKey = 'oOdHuOxsfbnjmaYkH'
        self.Client = TencentNLP(self.AppID,self.AppKey)

    def getTextClassify(self,text):
        try:
            num = self.Client.getNLpTextClassify(text)['data']['polar']
            return {-1:'负面',0:'中性',1:'正面'}.get(num)
        except Exception as e:
            print e
            return '异常'

备注:百度提供舆情API,提供了较丰富的舆情相关功能,但需要付费才能使用。而且,目前API有免费使用的次数限制。

腾讯情感分析API

将代码保存为TencentNLpSDK.py

#-*- coding: UTF-8 -*-
import hashlib
import urllib
import urllib2
import base64
import json
import time

url_preffix='https://api.ai.qq.com/fcgi-bin/'

def setParams(array, key, value):
    array[key] = value

def genSignString(parser):
    uri_str = ''
    for key in sorted(parser.keys()):
        if key == 'app_key':
            continue
        uri_str += "%s=%s&" % (key, urllib.quote(str(parser[key]), safe = ''))
    sign_str = uri_str + 'app_key=' + parser['app_key']

    hash_md5 = hashlib.md5(sign_str)
    return hash_md5.hexdigest().upper()

class TencentNLP(object):
    def __init__(self, app_id, app_key):
        self.app_id = app_id
        self.app_key = app_key
        self.data = {}

    def invoke(self, params):
        self.url_data = urllib.urlencode(params)
        req = urllib2.Request(self.url, self.url_data)
        try:
            rsp = urllib2.urlopen(req)
            str_rsp = rsp.read()
            dict_rsp = json.loads(str_rsp)
            return dict_rsp
        except urllib2.URLError, e:
            dict_error = {}
            if hasattr(e, "code"):
                dict_error = {}
                dict_error['ret'] = -1
                dict_error['httpcode'] = e.code
                dict_error['msg'] = "sdk http post err"
                return dict_error
            if hasattr(e,"reason"):
                dict_error['msg'] = 'sdk http post err'
                dict_error['httpcode'] = -1
                dict_error['ret'] = -1
                return dict_error
        else:
            dict_error = {}
            dict_error['ret'] = -1
            dict_error['httpcode'] = -1
            dict_error['msg'] = "system error"
            return dict_error

    def getNLpTextClassify(self,text):
        self.url = url_preffix + 'nlp/nlp_textpolar'
        setParams(self.data, 'app_id', int(self.app_id))
        setParams(self.data, 'app_key', self.app_key)
        setParams(self.data, 'time_stamp', int(time.time()))
        setParams(self.data, 'nonce_str', int(time.time()))
        setParams(self.data, 'text', text)
        sign_str = genSignString(self.data)
        setParams(self.data, 'sign', sign_str)
        return self.invoke(self.data)

转载请注明:究尽数学 » 文本情感分析

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址