2013-11-23 4 views
0

파이썬에서 Google Speech API를 사용하려고합니다. 나는이 같은 인 .flac 파일을로드 :Python의 Google Speech API 응답 디코딩

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}]}

내가 추출하고 텍스트를 절약 할 수있는 방법 누군가가 가르쳐 주시겠습니까"변수로 오늘은 수요일이다 "을하고 인쇄? 응답이 문자열로 오는 경우

+2

['json' 모듈] (http://docs.python.org/2/library/json.html) 사용은 어떻습니까? – falsetru

답변

3

당신은 바람직하다 다음 안전을 위해 (사전에 평가 후면 단지 수있는이

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

답장을 보내 주셔서 감사합니다. 불행히도, 이것은 나를 위해 작동하지 않는 것 같습니다. ValueError를 발생시킵니다 ("No JSON 객체가 디코딩 될 수 없음"). ValueError : JSON 객체를 디코딩 할 수 없습니다. – Stralo

+0

@Stralo 전체 프로그램을 보여 주시겠습니까? – thefourtheye

+0

방금 ​​원본 게시물에 코드를 추가했습니다. 도움을 주셔서 감사합니다 – Stralo

0

처럼 딕셔너리에 JSON 데이터를 변환 할 json.loads을 사용할 수 있습니다) 대신 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 

를 이미 사전 인 경우 평가 후 당신이 할 필요가 없습니다, response이 어디 print type(response)를 사용해보십시오 당신이 얻고있는 결과.

+0

['ast.literal_eval()'] (http : //docs.python .org/2/library/ast.html # ast.literal_eval)이이를 수행하는 안전한 방법입니다. 'eval'은 절대로 사용해서는 안됩니다. – Tim

+0

나는 텍스트 = 평가 (STR (response.read())) 인쇄 텍스트를 시도하고 파일 ""라인을 가지고 0 ^ 구문 에러 : 예기치 않은 EOF 버퍼 중 하나가 가득하거나 연결이 끊어처럼 – Stralo

+0

를 구문 분석하는 소리 동안 전체 문자열 끝에 _or_ 형식이 잘못되었습니다. –

0

검색 결과의 문제점은 보이는 것처럼 약간 복잡합니다. 처음에는 resp가 인스턴스 유형이지만, 출력을 수동으로 복사하는 경우 dictionary-> list-> dictionary입니다. resp.read()를 새로운 변수에 할당하면 길이가 0 인 유형 문자열을 얻게됩니다. 모든 출력이 한 번 사용되면 사라지기 때문에 발생합니다 (인쇄). 따라서 json 디코딩은 google api의 응답이 승인되는대로 완료되어야합니다. 다음과 같다 :

RESP = urllib2.urlopen (REQ)

텍스트 = json.loads (resp.read()) "가설"] [0] [ "말"] 등

서지 내 경우의 매력;)