百度AI──⾃然语⾔处理使⽤教程
百度AI──⾃然语⾔处理使⽤教程(情感倾向分析)
创建⾃⼰的应⽤
百度研发的预训练模型ERNIE在处理中⽂任务上⾃称超越了Bert模型,本次教程以⽂本的情感分类作为例⼦,⾸先在控制台到nlp模块
然后创建⾃⼰的应⽤,个⼈申请的时候应该是不需要审核的,之后就可以看到⾃⼰应⽤下的三个参数:APPID APIKEY Secret Key这三个参数是⽤来鉴权(oauth2.0认证⽅式,感兴趣可以⾃⾏百度)的,在调⽤百度AI的接⼝时需要⽤到。
接⼝调⽤⽀持以下语⾔:
NLP-Java-SDK (Java)
NLP-PHP-SDK (PHH)
NLP-Cpp-SDK (C)
NLP-Node-SDK (nodejs)
NLP-Python-SDK (python)
NLP-C#-SDK (C#)
本⼈实验了python和Java两种⽅式,使⽤python⽐较⽅便,在数据预处理中可以使⽤其他的包,但是接⼝链接时的配置官⽅给出的不是很全⾯,⽽Java相反,可以配置很多调⽤接⼝的客户端的⼀些链接参数,但是数据预处理不⽅便。
python⽅式调⽤
安装Python SDK
pip install baidu-aip
创建⼀个 Python SDK客户端
from aip import AipNlp
""" 你的 APPID AK SK """
APP_ID ='你的 App ID'
API_KEY ='你的 Api Key'
SECRET_KEY ='你的 Secret Key'
client = AipNlp(APP_ID, API_KEY, SECRET_KEY)
配置AipNlp
如果⽤户需要配置AipNlp的⽹络请求参数(⼀般不需要配置),可以在构造AipNlp之后调⽤接⼝设置参数,⽬前只⽀持以下参数:
接⼝说明
setConnectionTimeoutInMillis建⽴连接的超时时间(单位:毫秒)
setSocketTimeoutInMillis通过打开的连接传输数据的超时时间(单位:毫秒)
使用if函数计算调⽤接⼝
情感倾向分析
对包含主观观点信息的⽂本进⾏情感极性类别(积极、消极、中性)的判断,并给出相应的置信度。
text ="苹果是⼀家伟⼤的公司"
""" 调⽤情感倾向分析 """
client.sentimentClassify(text);
返回参数
{
"text":"苹果是⼀家伟⼤的公司",
"items":[
{
"sentiment":2,//表⽰情感极性分类结果
"confidence":0.40,//表⽰分类的置信度
"positive_prob":0.73,//表⽰属于积极类别的概率
"negative_prob":0.27//表⽰属于消极类别的概率
php代码修改目录}
]
}
需要注意的⼏个点
单次接⼝调⽤的并发量是2,会员是5,意思就是每秒钟只能调⽤2次。
⽂本的编码⽅式必须是gbk格式,在传⼊之前可以⾃⾏编码
text = de(encoding='gbk', errors='ignore').decode(encoding='gbk', errors='ignore')
长⽂本⽆法处理,特定任务⽀持的最⼤长度不⼀样,可以参考API⽂档
其他接⼝nlp任务接⼝可⾃⾏查看客户端的源码或者是官⽅API⽂档
完整代码
pymysql 1.0.2
baidu-Aip 2.2.18.0
# encoding=utf-8
javascript访问网站from pymysql import connect,cursors
from aip import AipNlp
import math
import logging
import time
python入门教程applogger = Logger(__name__)
logger.setLevel(level=logging.INFO)
handler = logging.FileHandler("baiduAi.log")
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter)
logger.addHandler(handler)
class BaiduAi:
def__init__(self,APP_ID,API_KEY,SECRET_KEY,host,username,pwd,db):
# self.APP_ID = APP_ID
# self.API_KEY = API_KEY
# self.SECRET_KEY = SECRET_KEY
self.client = AipNlp(APP_ID,API_KEY,SECRET_KEY)
< = connect(
host=host,
user=username,
password=pwd,
database=db,
charset='utf8'
)
def get_document(self,page,size=20):
cursor = ursor(cursor=cursors.DictCursor)
sql ="select * from tweet limit %s,%s"%((page-1)*size,size)
res = cursor.fetchall()
cursor.close()
return res
def get_count(self):
cursor = ursor()
sql ="select count(*) from tweet"
strncpy函数自己实现
res = cursor.fetchmany(1)
cursor.close()
return res[0][0]
def close(self):
sqlmap手机版def classify(self,sentence):
# 修改编码格式
sentence['text']= sentence['text'].encode(encoding='gbk', errors='ignore') \ .decode(encoding='gbk', errors='ignore')
try:
res = self.client.sentimentClassify(sentence['text'])
res = self.client.sentimentClassify(sentence['text'])
if"items"in res:
res = res['items'][0]
cursor = ursor()
sql ="update tweet set positive=%s,negative=%s,sentiment=%s where id=%s"
cursor.close()
else:
logger.warning("process text:{}\nencounter warning{},text_id = {}".format(sentence['text'],
res['error_msg'],sentence['id'])) except Exception:
<("process text:{} \nencounter error,text_id = {}".format(sentence['text']),sentence['id'])
if __name__ =='__main__':
baiduAi = BaiduAi()//在这⾥传⼊你⾃⼰的参数
total = _count()
size =20
page =il(total*1.0/size))
start = time.time()
for i in range(86,page+1):
logger.info("load data page = %s,size = 20"%i)
sentences = _document(i);
for s in sentences:
baiduAi.classify(s)
time.sleep(1)
logger.info("finish classify %s/%s"%(i*20,total))
end = time.time()
logger.info("Successfully classify all in %s"%(end-start))
参考
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论