2017-01-02 30 views
1

我想使用語音到文本watson api,但是當我設置interim_results = True時,我得到了值錯誤。請幫我:)json.dumps ValueError:額外的數據無法轉儲json輸出

with open(join(dirname(__file__), './audio-file.wav'), 'rb') as audio_file: 
print(json.dumps(speech_to_text.recognize(
    audio_file, content_type='audio/wav', timestamps=True, interim_results =True, word_confidence=True), indent=2)) 

錯誤輸出:

The error output

但是當我設置interim_results = False我這是正常的輸出。

輸出時interim_results = False

The output when the interim_results=False

我認爲,之所以會與多個JSON輸出有關,但我不知道如何解決它,因爲這是json.dumps :)所以我可以不要引用json.loads的值錯誤情況來解決這種情況。

回答

1

由於interim_results = true,服務會發回多個JSON blob,並希望您在到達時分別解析它們。如果您想要顯示接近實時的副本,這非常有用。

如果您只做一次性轉錄,並且不需要近乎實時地顯示文本,那麼我會建議將interim_results設置爲false。

可能分裂周圍}\s*{結果(其中一個JSON BLOB結束和下一個開始),然後分析每個單獨的塊存儲爲JSON(恢復}{■如果有必要),但它不會因爲完整的最終結果已經在那裏了,所以真的會給你帶來什麼。另外,如果您確實需要/需要接近實時的更新,WebSocket接口使這變得更容易一些,因爲每個JSON組塊都會到達它自己的消息中 - 例如,請查看https://github.com/watson-developer-cloud/speech-to-text-websockets-python

+0

謝謝,但有沒有任何方法來拆分過程中的json結果?我希望有人能爲此提供代碼。 – dlsnfl37

+0

不是我所知道的,但是如果你想創造它,它不應該太難。你甚至可以發送一個合併請求讓它包含在SDK中:https://github.com/watson-developer-cloud/python-sdk –