大家平常是不是被深度学习和机器学习的一些需要打标签的训练数据所困扰,小编也是这样,特别是利用深度学习进行情感分析的时候,正负面数据进行打标签是一个很繁琐的工作,人工打标签耗费时间长,成本高。最近小编在寻找数据的时候发现了一个由百度推出的Al开放平台,而且发现上面很多功能都是免费的,只需要注册一个账号。下面我就把网站介绍给大家。
Al开放平台
但小编今天向大家介绍的是情感倾向分析,下面小编将整个调用API的过程介绍一下。
在做这些操作之前我们应该在上面的网站注册一个账号,然后做好对应的准备工作,这里我就不过多的重复,有不了解流程的可以看一下官方文档。
当我们完成这些的时候,就可以将我们的AK和SK保存好,接下来的任务需要用到它,它也是我们使用一个应用的相关凭证。
在我看来,AccessToken是我们后面调用这个API的一个端口起到一个密钥的作用,只有我们获取到AccessToken才能进行后面的工作。
下面我给出我的一个获取AccessToken代码,我是按照百度给出的一个代码改造的,因为它代码的版本是python2 的,现在python3成为主流,所以我的代码也是按照python3写的。
import json
import urllib.request
import urllib.parse
import urllib.request
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials"
values = {
'host':'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials',
'client_id':'你的AK密钥',
'client_secret' : '你的SK密钥'
}
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=6HiMTQ0tgFVYnGArVeNE5njq&client_secret=452BGOrxbVfpFlO8S2ZhEmV2hOVUYs6I'
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
content = response.read()
if (content):
print(content)
运行完这个代码之后,将会打印出我们要的信息,但我们要的只是AccessToken,大家不要弄错了。其实获取AccessToken的过程也就是一个爬虫发送信息,然后返回信息的过程,就和我们平常写爬虫是一样的。
当我们做完这个就要开始后面的工作了。但大家要注意一下相关的参数。这个我是参考官网给出的参数所总结的。
######参数说明
'''
参数 说明 描述
access_token 通过API Key和Secret Key获取的access_token
text string 文本内容,最大2048字节
log_id uint64 请求唯一标识码
sentiment int 表示情感极性分类结果,0:负向,1:中性,2:正向
confidence float 表示分类的置信度,取值范围[0,1]
positive_prob float 表示属于积极类别的概率 ,取值范围[0,1]
negative_prob float 表示属于消极类别的概率,取值范围[0,1]
'''
#####请求示例
{
"text": "苹果是一家伟大的公司"
}
#####返回示例
'''
{
"text":"苹果是一家伟大的公司",
"items":[
{
"sentiment":2, //表示情感极性分类结果
"confidence":0.40, //表示分类的置信度
"positive_prob":0.73, //表示属于积极类别的概率
"negative_prob":0.27 //表示属于消极类别的概率
}
]
}
'''
小编结合别人的帖子写了下面的调用API的方法和示例代码。
###########python3 API示例代码
title_list =['你好优秀','大家好','我杀人了','sb','牛逼','佛系']
labels =[]
label_prediction =[]
import urllib3
import json
import time
access_token='你的access_token'
http=urllib3.PoolManager()
url='https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?access_token='+access_token
for i in range(len(title_list)):
if (i+1)%5==0:
time.sleep(1)
params={'text':title_list[i]}
#进行json转换的时候,encode编码格式不指定也不会出错
encoded_data = json.dumps(params).encode('GBK')
request=http.request('POST',
url,
body=encoded_data,
headers={'Content-Type':'application/json'})
#对返回的byte字节进行处理。Python3输出位串,而不是可读的字符串,需要进行转换
#注意编码格式
result = str(request.data,'GBK')
a =json.loads(result)
#a2 =eval(result)
a1 =a['items'][0]
labels.append(a1['sentiment'])#分类结果
label_prediction.append(a1['positive_prob'])#展示的概率
当你看到time.sleep(1)的时候会想为什么会这么做,小编告诉你其实这就是百度赚钱的方式吧,每秒只能标记五条数据,如果你想提高速度的话,唯一办法就是充钱。这个大家需要注意一下,不这样做你的数据可能就会标记几条就自动断开了。
最后小编给出自己做的一个实例。
这个过程是小编对一个包含几万条的表对其中的content数据随机提取100条来做测试,你们也可以试一下。
#############读取csv文件并保存在一个txt文件中
import csv
with open(r'C:\Users\lixue\Desktop\tieba.csv', 'r',encoding='utf-8-sig') as db01:
#返回一个生成器对象,reader是可迭代的
reader = csv.reader(db01)
# for row in reader:
# print(row)
for index,rows in enumerate(reader):
if index == 0:
pass
elif index<10000:
b = rows[5]
with open(r'C:\Users\lixue\Desktop\shuju_test.txt', 'a',encoding='utf-8-sig') as fo1:
fo1.write(b+'\n')
else:
break
####随机将一个txt文件中随机读取100行做测试
import random
title =[]
with open(r'C:\Users\lixue\Desktop\shuju_test.txt', 'r',encoding='utf-8-sig') as f:
raw_list = f.readlines()
random.shuffle(raw_list)
for i in range(100):
title.append(raw_list[i])
###########python3 API示例代码
#测试样例 title_list =['你好优秀','大家好','我杀人了','sb','牛逼','佛系']
labels =[]
label_prediction =[]
import urllib3
import json
import time
import pandas as pd
import numpy as np
import os
local_main2 = r'C:\Users\lixue\Desktop\tieba_test.csv'
data = pd.DataFrame(columns = ['content', 'labels', 'label_prediction'])
data.to_csv(local_main2, index = None, encoding = 'utf_8_sig')
access_token='你的access_token'
http=urllib3.PoolManager()
url='https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?access_token='+access_token
for i in range(len(title)):
if (i+1)%5==0:
time.sleep(1)
if title[i]=='\n':
title[i] ='NA'
params={'text':title[i]}
#进行json转换的时候,encode编码格式不指定也不会出错
encoded_data = json.dumps(params).encode('GBK')
request=http.request('POST',
url,
body=encoded_data,
headers={'Content-Type':'application/json'})
#对返回的byte字节进行处理。Python3输出位串,而不是可读的字符串,需要进行转换
#注意编码格式
result = str(request.data,'GBK')
a =json.loads(result)
#a2 =eval(result)
a1 =a['items'][0]
labels.append(a1['sentiment'])#分类结果
label_prediction.append(a1['positive_prob'])#展示的概率
data1 = pd.DataFrame({'content':title[i],
'labels':labels[i],
'label_prediction':label_prediction[i]}, columns = ['content', 'labels', 'label_prediction'], index=[0])
data1.to_csv(local_main2, index = None, mode = 'a', header = None, sep = ',', encoding = "utf_8_sig")
最后你们也可以去了解一下百度Al 的其他功能。它的功能还是很强大的。