Göm menyn

729G09 Språkvetenskaplig databehandling

Laboration 1


Obs! Kom ihåg att registrera er på kursens WebReg senast vid första labtillfället.

 

729G09 Laboration 1

Laboration 1 - Textbearbetning med reguljära uttryck i Python

Inledning

I denna laboration kommer ni få göra enklare bearbetningar av text. En textbearbetning kan vara något så enkelt som att välja ut alla rader i en text som innehåller ett givet ord, eller att dela upp en text så att varje ord kommer på en egen rad.

Att bearbeta stora textmassor är ofta ett bra sätt att lära sig mer om språket. Det är först när man tar text från verkliga sammanhang, som man ser hur språket faktiskt används, och man måste ta stora textmassor för att kunna se några upprepade mönster.

Efter Laboration 1 ska du:

  • kunna skriva och använda reguljära uttryck,
  • bearbeta och söka i textuella data genom att använda reguljära uttryck i Python

Förberedelser

Vi kommer att använda Python-modulen re för att bearbeta text med reguljära uttryck. re-modulen innehåller många användbara funktioner men vi koncentrerar oss här på tre funktioner:

regex = re.compile(r'reguljärt uttryck', re.L)

Skapar ett mönster från ett reguljärt uttryck.

regex.findall(text) och regex.finditer(text)

Returnernar en lista på alla matchningar av mönstret regex i strängen text.

regex.sub(r'ersättningsuttryck', text)

Returnerar en textsträng där alla förekomster av mönstret regex i strängen texten har bytts ut mot innehållet i ersättningsuttrycket.
Exempel:
Raden regex.sub(r'1999', text) byter ut strängar som matchar regex mot "1999" i strängen text.

Mer information om reguljära uttryck i Python hittar ni här:

Det finns också en lathund för reguljära uttryck som kan vara användbar och (om du behöver) en lathund för UNIX-kommandon:

Om dina script inte beter sig som du förväntar dig kan det bero på teckenkodningen. Du bör därför vara nogrrann med vilken teckenkodning dina textfiler använder. Läs mer om teckenkodning här:

 

Tips

Testa!
När du väl sitter vid datorn så är det bara att testa som gäller. För att verkligen förstå vad ditt reguljära uttryck gör kan det vara användbart att skriva en egen kortare text att köra på. Med en kortare text är det lättare att identifiera och avhjälpa eventuella fel.

Om du vill kan du ladda ner programmet redemo.py till din arbetskatalog. Med redemo.py kan du testa dina reguljära uttryck interaktivt för att se vad de matchar.

Studera utdata!
Glöm inte att studera det resultat du får ut! Om du t.ex. ska dela upp en text i meningar kan det vara värt att ta en extra titt på utdata för att vara säker på att det verkligen bara är en mening på varje rad. Det kan vara svårt att tänka ut alla möjliga undantagsfall i förväg, därför måste man noga studera det material man har!

Textbearbetning

Uppgifterna ska lösas med reguljära uttryck i Python. Till er hjälp har ni två enkla program i Python som ni kan bygga vidare på. Programmet script_find.py letar efter en sträng i en text och skriver ut alla matchningar på skärmen. Programmet script_sub.py letar upp alla förekomster av ett sökuttryck och ersätter dessa med något annat.

Börja med att öppna ett terminalfönster och förflytta er till er arbetskatalog (kommandot cd). Du kan sedan kopiera scripten dit genom att, när du står där, skriva

cp ~729G09/www-pub/vt14/Lab1/script_* .

Använd valfri textredigerare för att ändra i programmen t.ex. Gedit eller Emacs. Kör programmen enklast i terminalfönstret, t.ex. genom att skriva:

python script_find.py

Lösningarna ska vara tillräckligt generella för att kunna köras på en annan text än labbtexten med jämförbart resultat. Lösningarna måste också vara lingvistiskt korrekta. Denna del examineras och era lösningar ska lämnas in enligt beskrivningen längst ner på sidan.

Uppgifter

Till uppgifterna används texten webbtext.txt som är en obehandlad text.

  1. Hitta alla ord som består av exakt 3 bokstäver i texten.
  2. Hitta alla ord med ändelsen 'iga' i texten
  3. Hitta alla ord som innehåller 4 konsonanter i följd
  4. Hitta alla tvåstaviga ord: ord som innehåller exakt två stavelser i texten
  5. Hitta alla förekomster av böjningsformer av ordet 'historia'.
  6. Gör om texten till o-språket. Alla vokaler ska bytas ut mot bokstaven 'o'. Använd sub.
  7. Dela upp texten så att enskilda ord står på olika rader, dvs. ett ord per rad, och även så att skiljetecken: . , : ! också står på egna rader.
  8. Hitta alla formuleringar i texten som kan vara en fristående bestämd artikel följt av ett adjektiv i superlativ form. Försök göra sökningen så exakt som möjligt. Vad händer om man varierar det reguljära uttrycket? Får man fler eller färre träffar, och är de mer eller mindre rätt? Vilka formuleringar fångar uttrycket inte upp? TIPS! Det kan ibland vara lättare att se att det verkligen är ett adjektiv i superlativ form om ni också skriver ut ordet efter (vanligtvis ett substantiv).
  9. Dela upp texten i meningar, dvs. en mening per rad. Er definition av 'mening' ska vara lingvistiskt godtagbar. Snygga till det så att det inte finns några blankrader eller "onödiga" blanktecken kvar i början av meningen.
  10. Hitta ord som är sannolika egennamn: dvs., ord som börjar med stor bokstav och inte står först i en mening. Tips! Ett sätt att lösa denna uppgift är att först dela upp texten i meningar, så att det går lättare att kontrollera om ordet står i början av meningen eller inte. Om er meningsuppdelning från tidigare uppgift är felaktig bör ni kunna se detta när ni studerar era egennamn.
  11. Översätt texten till rövarspråket.
  12. Plocka ut treordiga nominalfraser i bestämd form från texten, analogt med den gröna hatten, det röda huset, den villrådige mannen, den rasande hettan, de gräsätande korna, osv. Nominalfraserna ska vara uppbyggda av en bestämd artikel, exakt ett adjektiv eller particip i bestämd form följt av ett substantiv i bestämd form. Tips: ni kan skriva flera mönster för att lösa uppgiften.

Redovisning av uppgifter

Redovisning görs elektroniskt. Ni skickar redovisningen enligt anvisningarna nedan till assistenten för er grupp (se WebReg).

Redovisningen ska bestå av ett enda dokument som innehåller de ändrade delarna av skripten för alla uppgifter ni löst. Det ska tydligt framgå vilken uppgift varje lösning hör till, t.ex. genom en rubrik ovanför skriptet, typ "Uppgift 1: ord med tre bokstäver". Ta bort kommentarerna (utom om ni lagt till egna kommentarer). Ange om ni använder annan indata än labbtexten, exempelvis resultatet från en tidigare uppgift.

Examinering & Deadline

För betyget G krävs minst 8 godkända lösningar. För betyget VG krävs att du löst alla 12 uppgifterna med godkänt resultat. Ange vid första inlämningen om du siktar på VG.

Uppgift om deadline finns på sidan Inlämningsdatum.


Sidansvarig: Lars Ahrenberg
Senast uppdaterad: 2014-03-26