大致步骤
- 在百度ai情感分析网站中获取API等
- 生成access token
- 测试分析文本编码
- 生成情感分析结果并保存
第一大板块 获取百度AI情感分析API
这里指路调用百度情绪倾向分析API_python调用百度大脑的api接口进行情感分析-CSDN博客
博主写的很详细。
主要总结为
- 注册
- 创建情感分析应用
- 开通付费(网站有50万次免费额度,开通是为了获取额度)
- 找到API
第二大板块 生成分析代码
以下部分内容参考了这篇博文调用百度情绪倾向分析API_python调用百度大脑的api接口进行情感分析-CSDN博客
一 生成access token
这里先要使用第一板块中获得的API,生成acces token
代码如下:
import requests
ak = '你的API key'
sk = '你的secret key'
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}'.format(ak,
sk)
res = requests.post(host)
print(res.text)
然后就会输出一段字符,找到里面access token后面跟着的内容,只提取双引号内的的部分,保存,到这里第一部分结束。
二 检测文件编码
我遇到的问题都是来自这一部分。所以在运行代码前检测一下数据文件的编码是什么。
代码如下:
import chardet
with open(r"你的文件地址", "rb") as f:
result = chardet.detect(f.read())
print(result)
运行后,会输出一段文字。
记录'encoding': 'UTF-16'。
三 分析数据文件代码
这里注意,需要替换的信息:
- access token,在第一部分得到
- 数据文件编码类型,在第二部分得到
- 数据文件地址
- 输出结果的文件地址
注意:我的数据文件为txt,所以,下面这段代码是根据分析txt类型编写的,如果是其他后缀的数据文件,比如csv、xls等,需要自行修改。
import urllib3
import json
# 百度AI情感分析API的Access Token
access_token = '第一部分获取的access token'
http = urllib3.PoolManager()
url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?access_token=' + access_token
# 读取TXT文件
def read_txt(file_path):
try:
with open(file_path, 'r', encoding='你的数据文件编码类型') as file:
text = file.read()
return text
except Exception as e:
print(f"读取TXT文件失败: {e}")
return None
# 调用百度AI情感分析API
def analyze_sentiment(text):
params = {'text': text}
encoded_data = json.dumps(params).encode('UTF-8')
request = http.request(
'POST',
url,
body=encoded_data,
headers={'Content-Type': 'application/json'}
)
result = json.loads(request.data.decode('UTF-8'))
return result
# 主函数
def main():
# TXT文件路径
file_path = r"你的数据文件地址" # 替换为你的TXT文件路径
output_file_path = r"输出结果地址" # 输出文件路径
# 读取TXT文件
text = read_txt(file_path)
if text is None:
return
# 分段处理文本(每段最多1000字符)
segment_size = 1000
segments = [text[i:i + segment_size] for i in range(0, len(text), segment_size)]
# 存储分析结果
results = []
# 逐段分析文本
for segment in segments:
try:
# 调用API分析文本
sentiment_result = analyze_sentiment(segment)
# 检查API返回结果
if "error_code" in sentiment_result:
print(f"文本分析失败, 错误: {sentiment_result['error_msg']}")
results.append(f"文本: {segment}\n错误: {sentiment_result['error_msg']}\n")
elif "items" in sentiment_result and sentiment_result["items"]:
# 提取情感分析结果
result = {
"text": segment,
"sentiment": sentiment_result["items"][0].get("sentiment", "N/A"),
"confidence": sentiment_result["items"][0].get("confidence", "N/A"),
"positive_prob": sentiment_result["items"][0].get("positive_prob", "N/A"),
"negative_prob": sentiment_result["items"][0].get("negative_prob", "N/A")
}
results.append(json.dumps(result, indent=4, ensure_ascii=False) + "\n")
else:
error_msg = "文本分析失败: API返回结果中无有效数据"
print(error_msg)
results.append(f"文本: {segment}\n错误: {error_msg}\n")
except Exception as e:
error_msg = f"分析文本失败, 错误: {e}"
print(error_msg)
results.append(f"文本: {segment}\n错误: {error_msg}\n")
# 将结果写入输出文件
with open(output_file_path, 'w', encoding='utf-8') as output_file:
for result in results:
output_file.write(result + "\n")
print(f"情感分析完成,结果已保存到 {output_file_path}")
# 运行主函数
if __name__ == "__main__":
main()