[PYTHON] [AWS; Einführung in Lambda] 2. Extrahieren Sie Sätze aus der JSON-Datei und speichern Sie S3 ♬

Letztes Mal übersetzt die im s3: // Bucket platzierte MP3-Datei in Text mit dem folgenden Code und konvertiert die JSON-Datei in OutputBucketName. S3; In einen Eimer gelegt. Dieses Mal werde ich diese JSON-Datei aufrufen, um die textkonvertierten Sätze zu extrahieren. Ich habe den Code das letzte Mal absichtlich ausgegeben, da der Code auch diesmal ähnlich ist.

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

Also konnte ich es mit dem folgenden Code implementieren. S3: Die Methode zum Speichern im Bucket dient als Referenz. 【Referenz】 ① [AWS Lambda-Basiscode 2] Speichern von Dateien in S3S3-Objekte mit Boto3 bearbeiten (High-Level-API und Low-Level-API) Ich habe einen Kommentar als Referenz hinterlassen ①. Es funktionierte mit fast demselben Code. Der Unterschied besteht darin, dass es [Wie man neulich mit JSON-Dateien umgeht] enthält (https://qiita.com/MuAuan/items/45bc563a068d9fc87600). Erstens ist Lib wie folgt

#① Import der Bibliothek
import boto3
import urllib.parse
from datetime import datetime
import json

Das Folgende definiert den Client durch Imitieren von Referenz (2).

print('Loading function')      #(2) Geben Sie die Funktionslast in das Protokoll aus
s3 = boto3.resource('s3')      #③ S3-Objekt abrufen
client = s3.meta.client

Das Abrufen des Buckets und des Schlüssels mit dem lambda_handler entspricht genau dem obigen Transkriptionscode (natürlich ...).

#④ Lambdas Hauptfunktion
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')

Im Folgenden wird die Antwort ['Body'] aus der JSON-Datei mit demselben Code wie Referenz ② gelesen. Ich bin hier jedoch gestolpert. Mit anderen Worten, ich dachte, dass japanische Sätze erscheinen würden, wenn dieser body.decode ('utf-8') verwendet würde. In Wirklichkeit erscheint jedoch eine ziemlich json-artige (Zeichenkette). Anfangs wusste ich nicht, dass es sich um eine Zeichenfolge handelt, und dachte, es sei eine JSON-Datei. Also bemerkte ich, dass es sich um eine Zeichenfolge handelte, und stellte fest, dass sie mit json.loads in eine json-Datei konvertiert werden konnte. .. .. Ich bin endlich zu dem Code unten gekommen. Das heißt, Körper ist eine Zeichenfolge.

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

Konvertieren Sie die Zeichenfolge in eine JSON-Datei.

    dec = json.loads(body)

Und da es sich um eine JSON-Datei handelt, können japanische Sätze wie folgt leicht extrahiert werden.

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

Inhalt = Hallo Tokyo Yokohama auch trübe kleine Stimme ist Mizukis Schließlich können Sie es als schlüsselähnlichen zeitgesteuerten .txt im s3; Bucket speichern, der wie folgt angegeben ist.

    bucket = 'muauanpub'    #⑤ Geben Sie den Bucket-Namen an
    key = 'test_' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.txt'  #⑥ Geben Sie die Schlüsselinformationen des Objekts an
    file_contents = con_el # 'Lambda test'  #⑦ Dateiinhalt
    obj = s3.Object(bucket,key)     #⑧ Geben Sie den Namen und den Pfad des Buckets an
    obj.put( Body=file_contents )   #⑨ Ausgabedatei in Bucket
    return

Zusammenfassung

・ Ich konnte Sätze aus der konvertierten JSON-Datei der Audiodatei extrahieren und im S3-Bucket speichern. -Dies ist ein zweistufiger Prozess, aber wenn Sie eine MP3-Datei in den S3-Bucket legen, wird der textkonvertierte Text selbst automatisch im S3-Bucket gespeichert. ・ Teraterm → ec2 → s3 Bucket Transfer vorerst. .. .. Download aus dem S3 Bucket ⇒ Anzeige war möglich

Recommended Posts

[AWS; Einführung in Lambda] 2. Extrahieren Sie Sätze aus der JSON-Datei und speichern Sie S3 ♬
Skript zum Generieren eines Verzeichnisses aus einer JSON-Datei
[AWS] Verknüpfen Sie Lambda und S3 mit boto3
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
[Einführung in AWS] Text-Voice-Konvertierung und Wiedergabe ♪
Terraform konfiguriert, um AWS Lambda von Amazon SQS aus zu starten
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
Daten aus S3 extrahieren
Extrahieren Sie die Merkmalsmenge (Identität) aus dem Text.
Tweet von AWS Lambda
Ausgabe von CloudWatch-Protokollen an S3 mit AWS Lambda (Pythyon ver)
[Python] Exportieren Sie regelmäßig mit Lambda aus CloudWatch-Protokollen nach S3
AWS Lambda Layers Eine kurze Erklärung von der Erstellung bis zur Verknüpfung
Senden Sie eine Anfrage von AWS Lambda an Amazon Elasticsearch Service
Verarbeiten Sie die mit Redshift entladene gzip-Datei mit Python of Lambda, gzipen Sie sie erneut und laden Sie sie in S3 hoch