You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Google Cloud NLP API实体情感输出转JSON并提取特定实体情感参数

直接从Google Cloud NL API结果中提取目标候选人的情感数据

不用序列化JSON也完全没问题!Google Cloud Natural Language API返回的实体情感分析对象本身就提供了直接访问属性的方法,完全可以跳过序列化步骤,直接从返回的AnalyzeEntitySentimentResponse对象里提取你需要的信息。

下面是具体的实现思路和代码示例:

首先,我们先把需要匹配的候选人姓名及简称做一个分组,这样可以统一处理不同的称呼:

# 定义候选人和对应的匹配关键词(转小写后匹配)
candidate_keywords = {
    "Donald Trump": ["donald trump", "trump", "@realdonaldtrump"],
    "Hillary Clinton": ["hillary clinton", "hillary", "clinton"],
    "Bernie Sanders": ["bernie sanders", "bernie", "sanders"],
    "Ted Cruz": ["ted cruz", "cruz"]
}

接下来,假设你已经通过API调用得到了response对象(就是client.analyze_entity_sentiment()返回的结果),我们直接遍历里面的实体,匹配目标候选人并提取情感数据:

from google.cloud import language_v1

# 这里省略API调用的代码,假设你已经拿到了response
# client = language_v1.LanguageServiceClient()
# document = language_v1.Document(content=your_text, type_=language_v1.Document.Type.PLAIN_TEXT)
# response = client.analyze_entity_sentiment(request={"document": document})

# 存储结果的字典
candidate_sentiments = {}

for entity in response.entities:
    # 把实体名称转成小写,避免大小写匹配问题
    entity_name_lower = entity.name.lower()
    
    # 检查当前实体是否属于我们关注的候选人
    for candidate, keywords in candidate_keywords.items():
        if entity_name_lower in keywords:
            # 如果是第一次匹配到该候选人,初始化数据结构
            if candidate not in candidate_sentiments:
                candidate_sentiments[candidate] = {
                    "total_score": 0,
                    "total_magnitude": 0,
                    "mention_count": 0
                }
            
            # 累加情感数据
            candidate_sentiments[candidate]["total_score"] += entity.sentiment.score
            candidate_sentiments[candidate]["total_magnitude"] += entity.sentiment.magnitude
            candidate_sentiments[candidate]["mention_count"] += 1
            break  # 匹配到对应的候选人后就停止检查其他关键词

# 计算最终的平均情感值和总情感量级(如果需要单条提及的结果,可以跳过这一步)
final_results = {}
for candidate, data in candidate_sentiments.items():
    final_results[candidate] = {
        "average_sentiment_score": round(data["total_score"] / data["mention_count"], 2),
        "total_sentiment_magnitude": round(data["total_magnitude"], 2),
        "mention_times": data["mention_count"]
    }

# 输出结果
for candidate, result in final_results.items():
    print(f"--- {candidate} ---")
    print(f"平均情感值: {result['average_sentiment_score']}")
    print(f"总情感量级: {result['total_sentiment_magnitude']}")
    print(f"被提及次数: {result['mention_times']}\n")

关键说明:

  • 直接访问API返回对象的属性:entity.name是实体的名称,entity.sentiment.score是情感值(范围-1到1,负数表示负面,正数表示正面),entity.sentiment.magnitude是情感量级(范围0到无穷,数值越高表示情感强度越大,不管正负)。
  • 大小写处理:把实体名称转成小写后再匹配关键词,避免因为大小写不一致导致漏匹配(比如"Trump"和"trump")。
  • 数据聚合:如果同一个候选人被多次提及,上面的代码会计算平均情感值和总量级,如果你需要保留每一次提及的单独数据,可以把candidate_sentiments里的存储改成列表,直接追加每次的score和magnitude即可。
  • 扩展匹配:如果还有其他变体称呼(比如"Donald J. Trump"),直接在对应的候选人关键词列表里添加即可。

这样处理完全不需要序列化JSON,直接利用API返回对象的原生属性,既高效又能避免重新调用API的耗时问题。

内容的提问来源于stack exchange,提问作者Mona Jalal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:49:47