Tekoälyavustettua podcast-litterointia 3: Kun mikään ei riitä

DEMO III: Lyhyt pikanäytös siitä, miten vanhoja litterointeja käsitellään.

Erkki Mervaala
3 min readFeb 19, 2024

Aiemmat osat 1 ja 2 luetaan ensin, kyä te tiiätte. Lisäksi, tänään puhutaan vähän jsonista.

Tällä kertaa kohdataan tilanne, jossa halutaan mennä aiempiin litterointeihin, jotka yhä löytyvät AssemblyAI:n sivuilta, kun itse sovellus (esim. Jupyter Notebook) on ehditty sulkea ja kaikki edellisissä osissa ladattujen transcript-kokonaisuuksien sisällöt ovat kadonneet lokaalista käytöstä, vaikkapa pakotetun päivityksen aiheuttaman työaseman uudelleenkäynnistämisen seurauksena.

Jokaisen AA:n toteuttaman litteroinnin tapahtuessa kyseiselle litteroinnille syntyy oma tokeninsa eli tunnuksena toimiva merkkirivistö, jolla AA-kerholaisen on mahdollista löytää kyseinen litterointi omasta litterointitietokannastaan. Litteroinnit säilyvät käyttäjän tietokannassa, kunnes ne haluaa poistaa, joten niihin pääsee käsiksi myöhemmin varsin helposti pythonin requests-kirjaston get-komennon avulla. Alapuolen esimerkissä litteroinnin sijainti internetissä kirjoitetaan url-muodossa (endpoint).

Sillä haettu litterointi ei kuitenkaan ole samanlainen kuin aiemmissa osissa käsitelty. Siinä missä edellisissä osissa transcriptin sisältöihin päästiin käsiksi kätevästi print(transcript.text)-tyyppisillä komennoilla, niin tällä kertaa requestsin noutama litterointi onkin muotoa json. Se tarkoittaa, että aiempien osien funktioita on muovattava jsonin rakennetta vastaaviksi. Mutta aloitetaan ensin siitä koodista, jolla tuodaan pilvessä tallessa oleva litterointi jsonina Notebookiin.

import json
import requests

headers = {'authorization':'this is where you put your AssemblyAI API key'}

token = "this is where you put the token/id of your transcript"

endpoint = f"https://api.assemblyai.com/v2/transcript/{token}"

transcript = requests.get(endpoint, headers).json()

Alla näkyy vähän, minkälaisessa muodossa litteroitu teksti nyt nähdään:

Jos aiempien osien tavoin vaikkapa lausumia (utterance) yrittää hakea suoraan transcriptista, tulee vastaan virheilmoitus:

Tämä johtuu siitä, että jsonin rakenteessa ei ole attribuutteja, koska kyseessä ei ole enää aiempi transcript-olio vaan json-tiedostomuoto*. Menemättä yhtään syvällisemmin ohjelmoinnikkaaseen kielenkäyttöön, voitaneen vain todeta, että tiedostomuoto on nyt erilainen, jossa pätee eri säännöt. Pythonin näkökulmasta kyseessä on nyt dict eli dictionary (sanasto), jonka eri tasoille päästään siirtymällä hakasulkeisia hyödyntäen.

Tässä edeltävä errorin tuottanut koodi editoituna oikeaan muotoon:

for utterance in transcript['utterances']:
print(f"Speaker {utterance['speaker']}: {utterance['text']}\n")
Lopputulos on identtinen edellisten versioiden transcribe.utterances-esimerkkien kanssa.

Kirjoitussarjan toisessa osassa oli kuitenkin käytössä myös aikakoodit ja funktio, joka sylkäisee ulos suoraan aikakoodattua tekstitystiedostoa, mihin perustui myös tuolloinen ratkaisuni aikakoodatusta ja puhujanimetystä litteroinnista. Mutta jsonin kanssa puljatessa tuota funkkaria ei tietenkään ole käytössä, joten ratkaisu siihen vaatii myös pienen muokkauksen: Kunkin tokenoidun litteroinnin yhteydessä AA luo myös tekstitystiedoston, johon päästään kätevästi requests.getin kautta lisäämällä alkuperäiseen endpoint-urliin “/srt”. Nyt haettu srt ei ole enää json-muodossa vaan sen sisältöön pääsee käsiksi kirjoittamalla ihan vain srt.text.

endpoint_srt = f"https://api.assemblyai.com/v2/transcript/{token}/srt"

srt = requests.get(endpoint_srt, headers=headers)

Näitä tässä kirjoituksessa esiteltyjä muokkauksia soveltamalla on siis mahdollista toteuttaa myös toisessa osassa esittelemäni litterointiratkaisu aiemmin tekoälyn ruksuttamiin AA-litterointeihin. Tästä teemasta requestsin hyödyntämisineen ei tosiaan löytynyt AssemblyAI:n dokumentaatiossa aloittelijoille suunnattua for dummies -ratkaisuja, joten päätin kirjoittaa sen itse. Jos missasin jotain, niin kirjoitteleppa alle.

Ensi kerralla joko sitten jotain aivan muuta tai sitten tätä samaa.

Erkki out.

*Tässä vaiheessa tätä kirjoitusta suomen kielen sanaston riittämättömyys alkoi tökkiä tietojenkäsittelytieteellisessä kontekstissa ärsyttävän paljon.

--

--

Erkki Mervaala
Erkki Mervaala

Written by Erkki Mervaala

Researcher at the Finnish Environment Institute. Doing PhD at Helsinki University. Researcher member @ Puistokatu 4. Writer of many things but here mainly on AI

No responses yet