AI FÖR NATURLIGT SPRÅK

Kursinfo

Kursmaterial

FAQ

Kursmaterial

/

Kapitel

Deluppgift 1: Format på data

Bearbeta olika dataformat

Följande filer används i uppgiften:

talbanken-dep-train.conll

För att spara filerna, högerklicka på länken och välj att spara filen. Du behöver inte ladda ned några filer för att genomföra uppgiften, utan de är per automatik tillgängliga för användning i kodcellerna nedan.


Text som data kan komma i många olika format, och det påverkar vad vi behöver göra för att bearbeta text. Vi är vana att tänka oss text som en löpande sträng, en enda lång följd av tecken. I nästa kodcell har vi ett sådant exempel, där vi sparar och skriver ut en mening.

Ett första steg att extrahera information från texten är att dela upp den i token och beräkna hur många ord som finns i texten. Du ska i nästa kodcell dela upp texten vid varje mellanslag – en enkel men inte särskilt precis metod för att dela upp en text. För att dela upp en en sträng i dess fält kan du använda metoden split().

Textdata kan också komma i format som innehåller mycket mer information. Viss data innehåller text tillsammans med lingvistisk information, som vilken ordklass ett ord i en mening tillhör. Vi ska arbeta med exakt ett sådant korpus. Filen talbanken-dep-train.conll innehåller meningar annoterade med lingvistisk information enligt det så kallade CoNLL-X-formatet. Varje mening representeras genom ett antal rader – en rad för varje token (ord eller ordliknande enhet, såsom skiljetecken) – och avslutas med en tom rad.

Du ska nu skriva kod som tar fram det totala antalet meningar och det totala antalet token i korpusen.

Den lingvistiska informationen för varje token representeras genom ett antal fält som innehåller t.ex. ordets form och ordklass. Vilket fält som innehåller vilken information finns beskrivet i artikeln om CoNLL-X-formatet. Här ser du korpusfilens första rad som exempel:

1 Individuell _ JJ JJ POS|UTR|SIN|IND|NOM 2 AT _ _

Fälten är separerade med tabulatortecken (“tab” i folkmun). Även för detta passar det utmärkt att använda split() för att dela upp en rad (sträng) i dess fält.

I nästa uppgift ska du räkna antalet unika ordformer i korpusen. Det generella receptet för en uppgift där man ska räkna antalet unika objekt är att lägga in alla dessa objekt i en mängd (set) och att sedan skriver ut mängdens storlek. Läs på om mängder innan du går vidare i laborationen.

Ett bra sätt att orientera sig om en korpusfil är att titta på fördelningen av olika typer av lingvistisk information. I denna uppgift ska du titta på fördelningen av ordklasstaggarna. En sådan fördelning kan med fördel visualiseras i ett diagram.

Innan du kan skapa ett diagram behöver du samla in information om hur ofta varje ordklasstagg förekommer i korpusen. Standarddatastrukturen för denna uppgift är en Counter. Läs på om denna klass innan du går vidare.

Skriv klart funktionen count_tags() som tar fram fördelningen över alla ordklasstaggar i korpusfilen. Funktionen ska returnera en Counter som anger antalet gånger som varje ordklasstagg förekommer i korpusen.

Följande kodcell skapar ett diagram över den fördelning av ordklasstaggar som du tagit fram i föregående uppgift.

Diagrammet visar tydligt att antalet förekomster varierar kraftigt mellan ordklasserna. Vilka är de tre ordklasser som förekommer oftast? Läs dokumentationen om ordklasstaggarna i Swedish Treebank för att se vilken tagg som svarar mot vilken ordklass.

Denna webbsajt innehåller kursmaterialet för kursen ETE335 AI för naturligt språk.
Materialet är licenserat under en Creative Commons Erkännande 4.0 Internationell licens.
Copyright © 2022, Marco Kuhlmann & Oskar Holmström