我正在尝试在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]["话语"]
对我来说,这就像一种魅力;)