在python中解码Google Speech API响应



我正在尝试在Python中使用Google Speech API。我加载了一个.flac文件,如下所示:

url = "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US"
audio = open('temp_voice.flac','rb').read()
headers = {'Content-Type': 'audio/x-flac; rate=44100', 'User-Agent':'Mozilla/5.0'}
req = urllib2.Request(url, data=audio, headers=headers)
resp = urllib2.urlopen(req)
system("rm temp_voice.wav; rm temp_voice.flac")
print resp.read()

输出:

{"状态":0,"id":","假设":〔{"话语":"今天是星期三","信心":0.75135982}〕}

有人能教我如何提取并保存文本"今天是星期三"作为变量并打印它吗?

您可以使用json.loads将JSON数据转换为dict,如以下

data = '{"status":0,"id":"","hypotheses":[{"utterance":"Today is Wednesday","confidence":0.75135982}]}'
import json
data = json.loads(data)
print data["hypotheses"][0]["utterance"]

如果响应是以字符串形式出现的,那么您可以将其评估到字典中(为了安全起见,最好使用ast库中的literal_eval):

>>> d=eval('{"status":0,"id":"","hypotheses":[{"utterance":"Today is Wednesday","confidence":0.75135982}]}')
>>> d
{'status': 0, 'hypotheses': [{'confidence': 0.75135982, 'utterance': 'Today is Wednesday'}], 'id': ''}  
>>> h=d.get('hypotheses')                                                                            
>>> h                                                                                                 
[{'confidence': 0.75135982, 'utterance': 'Today is Wednesday'}]                                       
>>> for i in h:                                                                                       
...    print i.get('utterance')
... 
Today is Wednesday

当然,如果它已经是一个字典,那么你不需要进行评估,试着使用print type(response),其中response是你得到的结果。

检索输出的问题比看起来更复杂。起初resp是实例的类型,但如果您手动复制输出,则为dictionary->list->dictionary。如果您将resp.read()赋值给新变量,您将获得长度为0的类型字符串。之所以会发生这种情况,是因为一旦使用(打印),所有输出都会消失在空气中。因此,json解码必须在谷歌api的响应被授予后立即完成。如下:

resp=urllib2.urlopen(req)

text=json.loads(resp.read())["假设"][0]["话语"]

对我来说,这就像一种魅力;)

相关内容

  • 没有找到相关文章

最新更新