Python - 解析来自 IBM Watson Tone Analyzer 的 Json 响应

Posted

技术标签:

【中文标题】Python - 解析来自 IBM Watson Tone Analyzer 的 Json 响应【英文标题】:Python - Parsing Json Response from IBM Watson Tone Analyzer 【发布时间】:2018-04-24 20:41:52 【问题描述】:

我在解析来自 IBM Watson 的 Tone Analyzer 的 JSON 响应时遇到问题。 我知道我需要输入字典,然后遍历每个键,直到获得所需的信息。

当前代码

from __future__ import print_function
import json
import sys
from os.path import join, dirname
from watson_developer_cloud import ToneAnalyzerV3
from musixmatch import Musixmatch

musixmatch = Musixmatch('')

tone_analyzer = ToneAnalyzerV3(
    username = "",
    password = "",
    version = '',
    url = "https://gateway.watsonplatform.net/tone-analyzer/api" )

lyric = lyricwikia.get_lyrics('Dragonforce', 'Through the fire and flames')



fh = open('lyrics.txt', 'w+')

fh.write(lyric)

fh.close()


f = open('lyrics.txt', 'r+')

print("\ntone_chat() Dragonforce - Through the Fire and Flames:\n")

m = []

for line in f.readlines():

    content_type = 'application/json'
    tone = tone_analyzer.tone("text": line, content_type)
    jsonText = json.dumps(tone, indent=2)
    jsonParse = json.loads(jsonText)
    m = jsonParse["document_tone"]["tones"]
    print(m)

f.close()

我试图想办法从这个 JSON 响应中获取多个结果并将其作为密钥对存储在字典中,但我很难弄清楚如何去做。

电流输出

tone_chat() Dragonforce - 穿越烈火:

[]
['score': 0.511165, 'tone_id': 'sadness', 'tone_name': 'Sadness']
['score': 0.697052, 'tone_id': 'sadness', 'tone_name': 'Sadness']
[]
['score': 0.511165, 'tone_id': 'sadness', 'tone_name': 'Sadness']
['score': 0.697052, 'tone_id': 'sadness', 'tone_name': 'Sadness']
['score': 0.816009, 'tone_id': 'joy', 'tone_name': 'Joy', 'score': 
0.822231, 'tone_id': 'tentative', 'tone_name': 'Tentative']
[]
['score': 0.518879, 'tone_id': 'sadness', 'tone_name': 'Sadness']
['score': 0.619897, 'tone_id': 'anger', 'tone_name': 'Anger']
['score': 0.608597, 'tone_id': 'anger', 'tone_name': 'Anger']
['score': 0.865077, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.724236, 'tone_id': 'analytical', 'tone_name': 'Analytical']
[]
[]
[]
[]
['score': 0.557844, 'tone_id': 'joy', 'tone_name': 'Joy', 'score': 
0.898327, 'tone_id': 'confident', 'tone_name': 'Confident']
[]
['score': 0.695561, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.895415, 'tone_id': 'analytical', 'tone_name': 'Analytical']
['score': 0.616244, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.898327, 'tone_id': 'confident', 'tone_name': 'Confident']
['score': 0.859366, 'tone_id': 'sadness', 'tone_name': 'Sadness']
[]
[]
['score': 0.621329, 'tone_id': 'joy', 'tone_name': 'Joy']
['score': 0.743111, 'tone_id': 'joy', 'tone_name': 'Joy']
[]
['score': 0.612119, 'tone_id': 'joy', 'tone_name': 'Joy']
[]
['score': 0.524931, 'tone_id': 'joy', 'tone_name': 'Joy', 'score': 
0.786991, 'tone_id': 'tentative', 'tone_name': 'Tentative']
['score': 0.92125, 'tone_id': 'confident', 'tone_name': 'Confident']
[]
['score': 0.8152, 'tone_id': 'analytical', 'tone_name': 'Analytical', 
'score': 0.618451, 'tone_id': 'confident', 'tone_name': 'Confident']
['score': 0.638092, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.874372, 'tone_id': 'confident', 'tone_name': 'Confident']
['score': 0.707601, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.687768, 'tone_id': 'analytical', 'tone_name': 'Analytical', 
'score': 0.618451, 'tone_id': 'confident', 'tone_name': 'Confident']
['score': 0.704642, 'tone_id': 'confident', 'tone_name': 'Confident']
[]
['score': 0.695561, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.895415, 'tone_id': 'analytical', 'tone_name': 'Analytical']
['score': 0.616244, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.898327, 'tone_id': 'confident', 'tone_name': 'Confident']
['score': 0.859366, 'tone_id': 'sadness', 'tone_name': 'Sadness']
[]
[]
['score': 0.516628, 'tone_id': 'fear', 'tone_name': 'Fear']
['score': 0.524235, 'tone_id': 'sadness', 'tone_name': 'Sadness']
['score': 0.52202, 'tone_id': 'sadness', 'tone_name': 'Sadness', 'score': 
0.786991, 'tone_id': 'tentative', 'tone_name': 'Tentative']
['score': 0.961633, 'tone_id': 'confident', 'tone_name': 'Confident']
[]
['score': 0.695561, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.895415, 'tone_id': 'analytical', 'tone_name': 'Analytical']
['score': 0.616244, 'tone_id': 'sadness', 'tone_name': 'Sadness', 
'score': 0.898327, 'tone_id': 'confident', 'tone_name': 'Confident']
['score': 0.859366, 'tone_id': 'sadness', 'tone_name': 'Sadness']
[]['score': 0.816009, 'tone_id': 'joy', 'tone_name': 'Joy', 'score': 
0.822231, 'tone_id': 'tentative', 'tone_name': 'Tentative']
[]
['score': 0.518879, 'tone_id': 'sadness', 'tone_name': 'Sadness']
[]
['score': 0.511165, 'tone_id': 'sadness', 'tone_name': 'Sadness']
['score': 0.697052, 'tone_id': 'sadness', 'tone_name': 'Sadness']
['score': 0.816009, 'tone_id': 'joy', 'tone_name': 'Joy', 'score': 
0.822231, 'tone_id': 'tentative', 'tone_name': 'Tentative']
[]

我创建了一个名为“emotions”的字典,我试图将这 2 个值存储到其中,但它不起作用,所以我尝试至少获取要打印的值。我是否需要以不同的方式将音调名称和分数以密钥对的形式存储在字典中?感谢您的帮助!

【问题讨论】:

我能够得到数组的响应,我只需要能够访问数组的信息。 【参考方案1】:

你有一个错字。 JSON 对象也是一个数组,因此您需要指定索引。

例子:

for row in jsonText:
    for tones in row['document_tone']['tones']:
        print(' Name:  . Score: '.format(tone['tone_name'], tone['score']))

【讨论】:

.format (tone['tone_name'] 中的音调应该是音调*吗?就像我在调用音调字典一样?

以上是关于Python - 解析来自 IBM Watson Tone Analyzer 的 Json 响应的主要内容,如果未能解决你的问题,请参考以下文章

IBM Watson Assistant 响应来自机器人的延迟

IBM Watson Alchemy 新闻 iOS SDK Swift

IBM Cloud Object Storage Connection 问题 Watson Studio Python 笔记本

IBM Watson Unity 3D SDK 保护服务(几乎可以正常工作!)

有图有故事 - Watson Analytics 解析幸福指数

IBM BigInsights (IBM Hadoop) 与 IBM Watson