0

Je travaille sur un projet qui, je l'espère, me permettra de combiner la mise en œuvre de Watson Python SDK de la parole au texte ... Watson Conversation ... et de la synthèse vocale. Je rencontre des problèmes en travaillant avec les données Python 2.7 json. Je suis en train d'essayer de faire deux choses:Travailler avec json dans Watson SDK Python

1) Je veux analyser les données json juste pour les valeurs de transcription et ce serait génial si je pouvais combiner ces valeurs dans un format de chaîne facilement lisible pour une utilisation ultérieure dans le programme .

2) L'autre chose que je dois faire est de manipuler le json d'une manière qui me permettrait de l'utiliser comme entrée pour les sections de conversation ou de synthèse vocale. Fondamentalement, comment puis-je convertir ce qui est fourni dans le json en entrée acceptable pour les autres modules de Watson? Ce que j'ai essayé jusqu'ici: J'ai lu les docs de Python 2.7 json et ai essayé de le convertir dans un dictionnaire de Python qui a fonctionné? Toutes les paires clé/valeur avaient un "u" devant elles et aucune des méthodes de dictionnaire habituelles ne semblait fonctionner. En outre, ils ne ressemblent pas à la combinaison clé standard: valeur. Cependant, j'ai pu mettre toutes les données json dans une variable. Je vais poster mon code ci-dessous (ignorer les instructions d'impression comme je vérifiais juste pour voir comment les données ont regardé chaque étape), mais c'est surtout ce que vous pouvez obtenir de la section des exemples de github.

** Juste une dernière question rapide: le Python SDK est-il limité de quelque façon que ce soit par rapport aux autres (Java, JScript, etc.) car il semble que leur sortie soit beaucoup plus facile à utiliser?

import json 
from os.path import join, dirname 
from watson_developer_cloud import SpeechToTextV1 


speech_to_text = SpeechToTextV1(
    username='###########', 
    password='###########, 
    x_watson_learning_opt_out=True 
) 

with open(join(dirname(__file__), '/home/user/Desktop/output.wav'),'rb') as audio_file: 

    json_str = (json.dumps(speech_to_text.recognize(audio_file, content_type='audio/wav', timestamps=False, word_confidence=False, 
model='en-US_NarrowbandModel'), indent=2)) 

print json_str 

json_dict = json.loads(json_str) 

print json_dict 



def main(args): 
    return 0 

if __name__ == '__main__': 
    import sys 
    sys.exit(main(sys.argv)) 

Répondre

1

Le problème me semble que vous videz votre JSON à une chaîne, puis essayez d'y accéder en tant qu'objet. En utilisant l'exemple de code suivant, cela fonctionne.

from os.path import join, dirname 
from watson_developer_cloud import SpeechToTextV1 


speech_to_text = SpeechToTextV1(
    username='....', 
    password='....', 
    x_watson_learning_opt_out=True 
) 

with open('../blog/ihaveadream.wav','rb') as audio_file: 
    response = speech_to_text.recognize(audio_file, content_type='audio/wav', timestamps=False, word_confidence=False, model='en-US_NarrowbandModel') 

print json.dumps(response, indent=2) 

Ce retourne les éléments suivants:

{ 
    "results": [ 
    { 
     "alternatives": [ 
     { 
      "confidence": 1.0, 
      "transcript": "I still have a dream " 
     } 
     ], 
     "final": true 
    }, 
    { 
     "alternatives": [ 
     { 
      "confidence": 0.999, 
      "transcript": "it is a dream deeply rooted in the American dream I have a dream " 
     } 
     ], 
     "final": true 
    }, 
    { 
     "alternatives": [ 
     { 
      "confidence": 1.0, 
      "transcript": "that one day this nation will rise up and live out the true meaning of its creed we hold these truths to be self evident that all men are created equal " 
     } 
     ], 
     "final": true 
    } 
    ], 
    "result_index": 0, 
    "warnings": [ 
    "Unknown arguments: continuous." 
    ] 
} 

Donc, si vous vouliez accéder à la réponse de niveau supérieur, vous pouvez faire ce qui suit.

print 'Confidence: {}'.format(response['results'][0]['alternatives'][0]['confidence']) 
print 'Transcript: {}'.format(response['results'][0]['alternatives'][0]['transcript']) 

La sortie de ce serait:

Confidence: 1.0 
Transcript: I still have a dream 
+0

J'ai essayé plusieurs variations de [field_name/index] pour essayer d'obtenir la suggestion 'json_str [' field_name ']' au travail, mais je continuer à obtenir des erreurs allant de "index hors de portée" à "indices de chaîne doivent être des entiers." J'ai lu cinq autres réponses Stack Overflow concernant ces erreurs, mais je ne peux toujours pas accéder à la clé "transcript" des données json. – jcoop7777

+0

@ jcoop7777 J'ai mis à jour ma réponse. –

+0

Ça y est. J'avais l'impression que vous deviez appeler la méthode de reconnaissance de la même façon que dans les exemples (à l'intérieur d'un objet json). Cette façon a beaucoup plus de sens. Merci pour l'aide! – jcoop7777