Python调用Google Perspective API如何提取响应毒性评分并转换类型
核心错误排查
你当前代码运行会直接报类型错误,问题出在两处:
googleapiclient的execute()方法返回的本身就是Python原生字典,不需要额外做JSON序列化- 执行
val = json.dumps(response, indent=2)后,val已经是格式化的JSON字符串,不再支持字典式的键值访问,直接用val["xxx"]取值必然报错
实现逻辑说明
你需要的目标字段结构路径非常清晰:
- 要提取的第一个取值为0.05588363的毒性字段,路径是
attributeScores -> TOXICITY -> spanScores列表的第一个元素 -> score -> value,这个值本身是0-1区间的浮点型概率值 - 类型转换注意事项:
- 转字符串直接调用
str()包裹取值结果即可 - 不要直接对原始浮点数做
int()强转——因为原始值是小于1的小数,强转后会直接得到0,通常业务场景会把概率值乘以100转成百分制整数,拿到0-100区间的整型分
- 转字符串直接调用
修正后的可运行代码
from googleapiclient import discovery import json import os API_KEY = os.getenv('API_KEY') service = discovery.build('commentanalyzer', 'v1alpha1', developerKey=API_KEY) analyze_request = { 'comment': { 'text': 'sample text' }, 'requestedAttributes': {'TOXICITY': {}} } # 获取原生字典结构的接口响应 response = service.comments().analyze(body=analyze_request).execute() # 仅打印时做格式化序列化,不改变原始字典结构 print(json.dumps(response, indent=2)) # 按路径提取目标毒性评分 target_score = response["attributeScores"]["TOXICITY"]["spanScores"][0]["score"]["value"] # 类型转换示例 score_as_str = str(target_score) score_as_int = int(target_score * 100) # 百分制整数转换,避免精度丢失 print(f"原始提取值: {target_score}") print(f"字符串格式值: {score_as_str}") print(f"整数格式值: {score_as_int}")
注意区分两个同值字段:
spanScores里的是分段文本的评分,summaryScore里的是整段文本的汇总评分,你需求里提到的“第一个取值为0.05588363”对应的就是前者,取值时不要错找路径。
内容的提问来源于stack exchange,提问作者Romulus Hill
相关产品推荐
相关产品推荐

