[PYTHON] [AWS; Introduction à Lambda] 2ème; Extraire des phrases du fichier json et enregistrer S3 ♬

Dernière fois traduit le fichier mp3 placé dans le compartiment s3: // en texte avec le code suivant et convertit le fichier json en OutputBucketName. S3; Placé dans un seau. Cette fois, j'appellerai ce fichier json pour extraire les phrases converties en texte. J'ai volontairement émis le code la dernière fois car le code est également similaire cette fois.

s3 = boto3.client('s3')
transcribe = boto3.client('transcribe')
def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    try:
        transcribe.start_transcription_job(
            TranscriptionJobName= datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '_Transcription',
            LanguageCode='ja-JP',
            Media={
                'MediaFileUri': 'https://s3.ap-northeast-1.amazonaws.com/' + bucket + '/' + key
            },
            OutputBucketName='lamoutput'
        )
...
        raise e

J'ai donc pu l'implémenter avec le code suivant. S3; La méthode de sauvegarde dans le compartiment est une référence. 【référence】 ① [AWS Lambda Basic Code Part 2] Enregistrement de fichiers dans S3Manipuler des objets S3 avec Boto3 (API de haut niveau et API de bas niveau) J'ai laissé un commentaire pour Reference ①. Cela fonctionnait avec presque le même code. La différence est qu'il intègre Comment gérer les fichiers json l'autre jour. Premièrement, Lib est comme suit

#① Import de bibliothèque
import boto3
import urllib.parse
from datetime import datetime
import json

Ce qui suit définit le client en imitant la référence (2).

print('Loading function')      #(2) Sortie de la fonction load dans le journal
s3 = boto3.resource('s3')      #③ Obtenir l'objet S3
client = s3.meta.client

Obtenir le bucket et la clé avec le lambda_handler est exactement le même que le code de transcription ci-dessus (bien sûr ...).

#④ Fonction principale de Lambda
def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')

Ce qui suit lit la réponse ['Body'] du fichier json avec le même code que la référence ②. Cependant, je suis tombé ici. En d'autres termes, je pensais que des phrases japonaises apparaissaient si ce body.decode ('utf-8') était utilisé. Cependant, en réalité, une jolie chaîne de caractères de type json apparaît. Au départ, je ne savais pas que c'était une chaîne et je pensais que c'était un fichier json. Donc, j'ai remarqué qu'il s'agissait d'une chaîne de caractères et j'ai trouvé qu'elle pouvait être convertie en fichier json avec json.loads,. .. .. Je suis enfin arrivé au code ci-dessous. Autrement dit, le corps est une chaîne.

    response = client.get_object(Bucket=bucket, Key=key)
    body = response['Body'].read()

Convertissez la chaîne en fichier json.

    dec = json.loads(body)

Et comme il s'agit d'un fichier json, les phrases japonaises peuvent être facilement extraites comme suit.

    con_el=dec["results"]["transcripts"][0]["transcript"]
    print('contents=',con_el)

Contenu = Bonjour Tokyo Yokohama aussi la petite voix trouble est celle de Mizuki Enfin, il peut être enregistré en tant que .txt chronométré semblable à une clé dans le compartiment s3; spécifié comme suit.

    bucket = 'muauanpub'    #⑤ Spécifiez le nom du bucket
    key = 'test_' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.txt'  #⑥ Spécifiez les informations clés de l'objet
    file_contents = con_el # 'Lambda test'  #⑦ Contenu du fichier
    obj = s3.Object(bucket,key)     #⑧ Spécifiez le nom et le chemin du bucket
    obj.put( Body=file_contents )   #⑨ Fichier de sortie vers le seau
    return

Résumé

・ J'ai pu extraire des phrases du fichier json converti du fichier audio et le stocker dans le bucket s3. -Il s'agit d'un processus en deux étapes, mais lorsque vous placez un fichier mp3 dans le seau s3, le texte converti lui-même est automatiquement enregistré dans le seau s3. ・ Pour le moment, transfert au godet Teraterm → ec2 → s3. .. .. Téléchargement depuis s3 bucket ⇒ L'affichage était possible

-De plus, si une application qui transfère des fichiers audio vers ce bucket s3 et une application qui affiche le fichier texte du bucket s3 peut être créée, il semble qu'une application de conversion fichier-texte audio plus facile à utiliser puisse être créée (conversion Web). -Même si le temps de conversion est long, les deux fonctions Lambda sont démarrées de manière asynchrone, il semble donc être une application conviviale en termes de temps et d'argent.

Recommended Posts

[AWS; Introduction à Lambda] 2ème; Extraire des phrases du fichier json et enregistrer S3 ♬
Script pour générer un répertoire à partir d'un fichier json
[AWS] Associez Lambda et S3 à boto3
Connectez-vous à s3 avec AWS Lambda Python
[Introduction à AWS] Conversion de texte-voix et lecture ♪
Terraform configuré pour lancer AWS Lambda à partir d'Amazon SQS
Script Python qui crée un fichier JSON à partir d'un fichier CSV
Extraction de données depuis S3
Extrayez la quantité de caractéristiques (identité) du texte.
Tweet d'AWS Lambda
Exporter les journaux CloudWatch vers S3 avec AWS Lambda (Pythyon ver)
[Python] Exportez régulièrement de CloudWatch Logs vers S3 avec Lambda
Couches AWS Lambda Une explication rapide de la création à la liaison
Envoyer une demande d'AWS Lambda à Amazon Elasticsearch Service
Traitez le fichier gzip UNLOADed avec Redshift avec Python de Lambda, gzipez-le à nouveau et téléchargez-le sur S3