TDDD02 Språkteknologi för informationssökning
Laboration 1
Laboration 1: Textbearbetning och namnigenkänning med reguljära uttryck
Inledning
I denna laboration ska du få pröva på några av de verktyg för enklare bearbetningar av text som finns på datorsystem, i synnerhet på UNIX-system. 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. Men det kan också innebära att hitta och plocka ut information ur texter.
Syftet med laborationen är att ge grundläggande färdigheter i att använda program baserade på reguljära uttryck för textbearbetningar.
Beskrivning
Efter laborationen ska du kunna:
- skriva och använda reguljära uttryck,
- bearbeta och filtrera textuella data med verktyg som utnyttjar reguljära uttryck.
Vi kommer att koncentrera oss på två olika UNIX-verktyg för textbearbetning:
|
(g)grep |
textfilter: väljer ut alla rader i en fil, där ett givet reguljärt uttryck matchar. Exempel: rader som innehåller strängen Karlsson eller Carlsson matchas med: grep '[KC]arlsson' Tips! Versionen ggrep -E, ger större flexibilitet i de reguljära uttrycken. |
|
(g)sed |
går igenom en fil rad för rad, och utför begärda ändringar, och skriver ut raden. Exempel: för att byta Karl mot Carl skriver man: Tips! Versionen gsed -r, ger större flexibilitet i de reguljära uttrycken. |
Förberedelser
Användningen av reguljära uttryck lär man sig bäst praktiskt, men det skadar inte att vara förberedd. Ni kan t.ex. använda denna User Guide (på engelska) eller ett informationsmaterial på svenska som använts i andra kurser tidigare:
Är du ovan rekommenderar vi att noggrant gå igenom alla exemplen, så att du förstår principerna för hur reguljära uttryck är uppbyggda och vad de matchar. Läs också gärna de övriga introduktionerna till verktygen:
Det finns också en lathund för reguljära uttryck i grep och sed som kan vara användbar:
Övningar
Dessa behöver inte redovisas, men fråga gärna labhandledarna om du stöter på problem.
- Hitta alla ord som börjar på för i texten ordlista.txt
- Hitta alla ord som består av exakt 3 bokstäver i texten ordlista.txt
- Hitta alla ord som innehåller 4 konsonanter i följd i texten ordlista.txt
- Hitta alla tvåstaviga ord: ord som innehåller exakt två stavelser i texten ordlista.txt
- Dela upp texten webbtext.txt i meningar, dvs. en mening per rad. Tänk på att det kan finnas flera typer av meningar. Snygga sedan till er meningsuppdelade text så att dels inga blankrader finns kvar, dels ingen kvarvarande mening har blanktecken i början.
Uppgifter att redovisa
Det finns fyra inlämningsuppgifter att redovisa. Information om hur redovisningen ska se ut finns längre ned på sidan.
Använd reguljära uttryck för att- Hitta korrekta mailadresser i text som
- firstname.lastname@domain.se
- lastname@student.liu.nu
- someothervalid_ID@domain.fi
- validID@liu
- Yoda.example.com
- peter@liu.sverige
- Identifiera och märk upp sannolika personnamn i texten telegram.
Uppmärkningen görs förslagsvis med HTML-liknande taggar med passande namn som markerar var enheten börjar och slutar, t.ex. <NAME>Fredrik Reinfeldt</NAME>. Tips! Gör först ett script som extraherar ord i texten som börjar med stor bokstav och som inte står först i sin mening. Spara utdata i en fil. Du kan kontrollera om scriptet gör rätt genom att titta på utdata i filen. Utöka sedan så att skriptet hittar sekvenser av ord som börjar med stor bokstav.
- När ni är nöjda med er namnuppmärkning i föregående uppgift ska ni utvärdera ert script på en test text: nyhetstext.
För att utvärderingen ska bli så bra som möjligt är det viktigt att ni
inte har tittat på testtexten när ni utvecklar er namnuppmärkning.
- Läs igenom nyhetstext och identifiera alla personnamn
- Kör ert namnuppmärknings-skript på nyhetstexten
- Rapportera precision och recall för ert skript och beskriv hur ni gjorde beräkningarna. (Definitionerna finns bl.a. på ohbilderna från första föreläsningen.)
- Extrahera information ur text. I denna uppgift används texten hotell.txt.
Filen innehåller ett hundratal recensioner av hotell som skrivits av
hotellens gäster. Hotellen är anonyma men ligger i antingen Stockholm
eller Göteborg.
Recensionerna innehåller omdömen av olika slag, en del positiva, andra negativa. Omdömena refererar ofta till någon specifik aspekt av hotellet, t.ex. 'rummet', 'läget', 'personalen', 'frukosten'. Ett enskilt omdöme kan uttryckas av ett adjektiv (bra, uselt, fantastiskt, ...), ett substantiv (toppen, botten, ...) eller en fras (inte särskilt bra, mycket trevlig, ...)
Givet en text kan vi extrahera par på formen <Entitet: Omdöme> där Entitet refererar någon aspekt av hotellet och Omdöme är ett enskilt omdöme. Så t.ex. kan följande recension:
Att rummen var pyttesmå visste vi när vi bokade, men de var iskalla vid ankomst. Frukostmatsalen var lika iskall. Ett bra vandrarhem är att föredra.
generera följande strukturerade fakta: <rummen: pyttesmå>, <rummen: iskalla>, <frukostmatsalen: iskall>. Obs! att ordet 'bra' i den sista meningen inte refererar till detta hotell och därför helst inte ska extraheras.
Att göra:
- Gör ett sed-skript som extraherar hotellentiteter och omdömen och sätter ihop dem i enlighet med exemplet ovan, Tips: Identifiera ord som anger entiteter resp. omdömen och märk upp dem med någon slags tagg, olika taggar för olika typer av ord.
- Undersök utdata från skriptet och jämför med indata. Identifiera (minst tre) typer av fel som ditt skript gör och ge förslag på hur det kan förbättras (testa gärna dina förslag genom att utöka skriptet, men uppgiften är att identifiera problem, inte att ge färdiga lösningar.)
- Utforma skriptet så att det kan skilja på positiva och negativa omdömen.
Redovisning & Deadline
Redovisa genom att skicka epost till labhandledaren (Jody eller Christian beroende på vilken labgrupp ni tillhör). I I rubriken skriver ni <kurskod>-labnr-namn och bifogar efterfrågad information som filer/bilagor. Den i laborationsgruppen som inte är avsändare skall också cc:as. Labhandledaren kan vid behov begära muntlig redovisning.
Förutom konkreta data i form av script och utdata skall ni för varje uppgift ange hur ni tänkt och gått till väga för att lösa uppgiften, så att labrättaren kan förstå er lösning.
- Uppgift 1 redovisas med ert reguljära uttryck och utdata från matchning av uttrycket mot filen.
- Uppgift 2 redovisas med källscriptet, och en kort text som beskriver hur det fungerar, vad det klarar av och inte klarar av.
- Uppgift 3 redovisas med det slutliga scriptet, en fil med de namn ni kunde extrahera, och er uppskattning av precision och recall. Ni måste förklara hur ni beräknade värdena på precision och recall.
- Uppgift 4 redovisas med det script som ni tagit fram, en beskrivning av hur det är tänkt att fungera, samt era förslag på förbättringar med utgångspunkt i minst tre problem som ni identifierat.
Redovisa när ni är klara med hela laborationen och innan uppsatt deadline (se Labkurs översikt för information).
Sidansvarig: Lars Ahrenberg
Senast uppdaterad: 2012-11-01
