52028


watsonのspeech to text APIを使ってwavファイルをテキスト化しようとしています。  
以下が実行しているコードです。

[code]

    from __future__ import print_function
    import json
    from os.path import join, dirname
    from watson_developer_cloud import SpeechToTextV1
    
    service = SpeechToTextV1(
        url='https://stream.watsonplatform.net/speech-to-text/api',
        iam_apikey='hoge')
    
    with open(join(dirname(__file__), '../test.wav'),
          'rb') as audio_file:
    print(json.dumps(
        service.recognize(
            audio=audio_file,
            content_type='audio/wav',
            model='ja-JP_BroadbandModel',
            timestamps=True,
            word_confidence=True).get_result(),
        indent=2))
    
[/code]

「これはマイクのテストです」という結果を得たいのですが、文字コードで返ってきてしまいます。  
以下が結果です。

[code]

    {
      "results": [
        {
          "alternatives": [
            {
              "word_confidence": [
                [
                  "\u3053\u308c", 
                  1.0
                ], 
                [
                  "\u306f", 
                  1.0
                ], 
                [
                  "\u30de\u30a4\u30af", 
                  1.0
                ], 
                [
                  "\u306e", 
                  1.0
                ], 
                [
                  "\u30c6\u30b9\u30c8", 
                  1.0
                ], 
                [
                  "\u3067\u3059", 
                  0.988
                ]
              ], 
              "confidence": 0.997, 
              "transcript": "\u3053\u308c \u306f \u30de\u30a4\u30af \u306e \u30c6\u30b9\u30c8 \u3067\u3059 ", 
              "timestamps": [
                [
                  "\u3053\u308c", 
                  0.65, 
                  0.92
                ], 
                [
                  "\u306f", 
                  0.92, 
                  1.07
                ], 
                [
                  "\u30de\u30a4\u30af", 
                  1.07, 
                  1.48
                ], 
                [
                  "\u306e", 
                  1.48, 
                  1.62
                ], 
                [
                  "\u30c6\u30b9\u30c8", 
                  1.62, 
                  2.02
                ], 
                [
                  "\u3067\u3059", 
                  2.02, 
                  2.4
                ]
              ]
            }
          ], 
          "final": true
        }
      ], 
      "result_index": 0
    }
    
[/code]

文字コードではなく日本語でコンソール出力するにはどうしたら良いでしょうか？


CC BY-SA 4.0
2019-01-16T05:40:46.553
52007
2019-01-16T14:09:20.157
31801
question
python watson-api
pycharmのコンソール出力が文字コードになってしまう


回答1

JSONの仕様上そのように出力されるべき表現(may be represented)で、まったく正しいデータです。

<https://www.rfc-editor.org/rfc/rfc8259#section-7>

> Any character may be escaped. If the character is in the Basic  
>  Multilingual Plane (U+0000 through U+FFFF), then it may be represented  
>  as a six-character sequence

とはいっても人間が見て正しいのかどうかパッとわからなくて面倒なので、

<https://docs.python.org/ja/3.6/library/json.html#json.dump>

> ensure_ascii が (デフォルト値の) true の場合、出力では入力された全ての非 ASCII  
>  文字はエスケープされていることが保証されています。ensure_ascii が false の場合、これらの文字はそのまま出力されます。

というオプションも用意されています。  
`json.dumps`に`ensure_ascii=False`をパラメータとして付け加えてみてください。

（そのようにしてエスケープされない状態のデータをUTF-8でないエンコーディングで出力して、他のシステムに渡してしまったりするとJSON **ではない**
データになってしまうのでご注意ください）

回答2  
あるいは、

[code]

    print(service.recognize(
            audio=audio_file,
            content_type='audio/wav',
            model='ja-JP_BroadbandModel',
            timestamps=True,
            word_confidence=True).get_result().get('results', [{}])[0].get('alternatives', [{}])[0].get('transcript'))
    
[/code]

などで取り出したかったのでしょうか。


CC BY-SA 4.0
2019-01-16T11:24:45.827
52028
2019-01-16T11:24:45.827
2021-10-07T07:34:52.683
-1
12274
52007
answer