提出问题
例如目前丢给你一个数据分析任务,已知某一个热度话题下用于的评论信息,现在需要你判断当前网民的倾向,也就是判断当前负面情绪占比多还是正面情绪占比多?
方案选择
明显的自然语言处理问题,基于用户评论大多采用中文,而由于中文的博大精深,词语往往具有多种意思,甚至还需要联系上下文,此时我们不能简单的建立一个字典来一一比对,工作量大不说,最后情感分类的结果也不一定准确。
NLP中针对情感分析任务的方法有很多,由于是初学,我目前只了解了Word2Vec和百度AI,由于是第一篇关于这方面的文章,我先简单的介绍下现成工具(百度AI)的使用好了。
前期准备
首先我们要进入百度AI里注册账号,并完成认证(这一步很重要,不认证的话功能无法使用!)
之后创建应用,会得到APP_ID , API_KEY ,SECRET_KEY,保存后。
打开cmd界面,执行pip install baidu-aip,安装百度ai模块。
然后写python代码进行调用,实现简单的文本判断:
from aip import AipNlp
APP_ID='你的APP_ID'
API_KEY = '你的API_KEY'
SECRET_KEY = '你的SECRET_KEY'
client = AipNlp(APP_ID, API_KEY, SECRET_KEY)
text="生不生都要考虑了,还两孩三孩的。"
result=client.sentimentClassify(text)
print(result)
输出结果:
positive_prob:表示是正面情绪的概率
confidence:置信度
negative_prob:表示是负面情绪的概率
sentiment:0代表是负面情绪;1代表是中和;2代表是正面情绪。
可能会出现的问题
当我们考虑循环判断语句情感时,列如从文本里提取大量语句进行情感分析:
from aip import AipNlp
import pandas as pd #导入pandas包
APP_ID='20014598'
API_KEY = 'ZSYpYqVSue34Nam2fyQmqYZr'
SECRET_KEY = 'NDWKy4t9d8VIlXg8qVkdpMfRK7Aoqgg0'
client = AipNlp(APP_ID, API_KEY, SECRET_KEY)
# data = pd.read_csv("formal_coments.csv") #读取csv文件
#print(data) #打印所有文件
# print (data.head(5)) #打印前5行
# tc = pd.read_csv('formal_coments.csv', usecols=['评论内容','评论时间'])
c = pd.read_csv('c.csv', usecols=['评论内容'])
# print(d)
outpath = 'C:/Users/ASUS/Desktop/math model/c.csv'
#c.to_csv(outpath, sep='\t', index=False,header=True)
print(c)
sum1=0; sum2=0
for x in range(574):
#print(str(c.loc[x]))
result=client.sentimentClassify(str(c.loc[x]))['items'][0]['sentiment']
print(result)
if result==0:
sum1+=1
if result==2:
sum2+=1
print("0: %d" % sum1)
print("2: %d" % sum2)
上述代码看起来似乎没有任何问题,但是程序一定会报错,并提示:
这是因为for循环速度太快,服务器容易达到QPS限制,因此就会出现上述错误,这里并没有什么好的解决方法,除非你花钱,如果想免费试用的话就只能对返回的错误信息进行判断,如果发生了错误,就将语句暂时存起来,等待一段时间再次判断。或者在循环里加入time.sleep(t)指令,让每次循环等待t秒再执行。