Labb 1 - Textbearbetning med reguljära uttryck. Formella språk. Definitioner. Chomskyhierarkin. Formella språk. Formella språk

Relevanta dokument
729G09 Språkvetenskaplig databehandling

729G09 Språkvetenskaplig databehandling

Programmering för språkteknologer II. OH-serie: Ändliga automater. reguljära uttryck i Java. Deterministiska ändliga automater

TDDD02 Föreläsning 2 HT Reguljära uttryck och reguljära språk Lars Ahrenberg

Föreläsning 2 5/6/08. Reguljära uttryck 1. Reguljära uttryck. Konkatenering och Kleene star. Några operationer på språk

Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

DAB760: Språk och logik

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Föreläsning 7: Syntaxanalys

Reguljära uttryck, automater, hashtabeller, mm

Introduktion till programmering och Python Grundkurs i programmering med Python

Matematik för språkteknologer

Lite mer psykologi. L2: Automater, Sökstrategier. Top-down. Kimballs sju principer

Språket Python - Del 1 Grundkurs i programmering med Python

Konstruktion av datorspråk

Flera SIP-operatörer eller IP-PBXer. Lisa Hallingström Paul Donald

Mer om språk och Ruby

729G09 Språkvetenskaplig databehandling

Användarhandledning Version 1.2

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Problemlösning och funktioner Grundkurs i programmering med Python

Föreläsning 3 Programmeringsteknik och C DD1316. Innehåll i listor. Uppdateringsoperatorer. +,* och listor. Listor. Indexering

Övning 5 - Tillämpad datalogi 2013

Datorlingvistisk grammatik

Automater. Matematik för språkteknologer. Mattias Nilsson

Programmering. Den första datorn hette ENIAC.

Introduktion till programmering SMD180. Föreläsning 7: Strängar

Reguljära uttryck Grammatiker Rekursiv nedåkning Allmänna kontextfria grammatiker. Syntaxanalys. Douglas Wikström KTH Stockholm

Filer. DA2001 (Föreläsning 16) Datalogi 1 Hösten / 19

Medieteknologi Webbprogrammering och databaser MEB725, 5p (7,5 ECTS) Klientprogrammering JavaScript Program på flera sidor

Alfabeten, strängar och språk. String

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Reguljära uttryck. Reguljära uttryck. Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89)

b) S Ø aa, A Ø aa» bb, B Ø aa» bc, C Ø ac» bc» 2. Låt L vara språket över 8a< som nedanstående NFA accepterar.

Uppgifter till praktiska tentan, del A. (7 / 27)

Mer om språk och Ruby

Repetition av filer Grundkurs i programmering med Python

Föreläsning 7: Syntaxanalys

Sed och Awk. Linuxadministration II 1DV421. Monday, August 8, 11

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Föreläsning 13 Testning och strängar

Chapter 3: Using Classes and Objects

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Uppgift 1 ( Betyg 3 uppgift )

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

MÄLARDALENS HÖGSKOLA. CD5560 Formella språk, automater och beräkningsteori. Användarmanual. för simulatorn JFLAP

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

i LabVIEW. Några programmeringstekniska grundbegrepp

Uppgift 1 ( Betyg 3 uppgift )

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

Föreläsning 18 Filer och avbildningar

Reguljära uttryck. Kapitel Reguljära uttryck Ett godtyckligt tecken: Ett speciellt tecken: [ ] 8.1.

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Grundläggande textanalys, VT2012

Objektorienterad Programkonstruktion

ENKEL Programmering 3

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Definition. Mängden av reguljära uttryck på alfabetet Σ definieras av. om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 7 augusti 2015, kl 08:00-12:00

Övningsuppgifter kapitel 8

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Grundläggande textanalys, VT2013

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

729G04 Programmering och diskret matematik. Python 3: Loopar

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Ersätta text, specialtecken och formatering

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

Labb 2: Syntax och ordklasstaggning. Att arbeta med grammatiskt analyserade data

Block 1 - Mängder och tal

TDP Regler

Föreläsning 11 - Automater, textsökning, tillstånd

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

Datalogi för E Övning 3

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Språket Python - Del 2 Grundkurs i programmering med Python

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Introducerande övningar i HTML

Föreläsning 2. Operativsystem och programmering

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Tentamen i Introduktion till programmering

PROV I MATEMATIK Automatateori och formella språk DV1 4p

Planering av ett större program, del 2 - for och listor. Linda Mannila

en stor bokstav och en siffra. Lösenordet får inte innehålla några tecken (!,,#,%,&)

Lösningsförslag till exempeltenta 2

Övningsuppgift 2 Datalogi I 2I1027/2I1035/2I1046

Hur man programmerar. Exempel på problemlösning i Python

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Tentamen, Algoritmer och datastrukturer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Övningar i 2D2050. Per-Anders Staav (kallas Pa) Epost: eller

Kapitel 12. Mer om program Att rapportera buggar och problem make

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Handbok KFind. Dirk Doerflinger Översättare: Stefan Asserhäll

Filer, dokument och TextWrangler. Vad är en fil? Gruppering av ettorna och nollorna. Lagra information. Använda senare

Transkript:

Labb 1 - Textbearbetning med reguljära uttryck Textbearbetning: Dela upp en text i meningar Hitta alla namn i en text Hitta adjektiv i superlativ Lektion reguljära uttryck re modulen i Python Formella språk Naturliga språk engelska, svenska, Formella språk Programmeringsspråk Användas för att modellera naturliga språk Modellera uttryckstyper Definitioner Chomskyhierarkin Ett alfabet är en mängd av symboler A = {0,1} En sträng är en sekvens av symboler 0011, 101, 1, 111 Ett (formellt) språk är en mängd strängar som bildas med ett givet alfabet L = {001, 01, 1, 111} Reguljära språk Kontextfria språk Kontextkänsliga språk Obegränsade språk Formella språk Formella språk Sheeptalk Bä! Bää! Bäää! Bääää! Alfabet = {Bä!} Ett (formellt) språk är en mängd strängar som bildas med ett givet alfabet Definition av Sheeptalk Uppräkning {Bä!, Bää!, Bäää!, Bääää!, } Reguljära uttryck Bää*! * - noll eller flera av föregående symbol Automater 1

Ändliga automater Reguljära språk Ändliga automater består av En mängd tillstånd Minst ett starttillstånd Minst ett sluttillstånd Tillståndsövergångar associerade med symboler (eller strängar) ur ett alfabet Ett reguljärt språk kan definieras med hjälp av ett reguljärt uttryck en automat Vad är en text? Reguljära uttryck En textfil består av tecken t.ex.: Bill och Bull\nåt kanelbullar\t i parken. \n radbrytning \t tabtecken På skärmen (eller i en texteditor) visas texten så här: Bill och Bull åt kanelbullar i parken. Reguljära uttryck är ett sätt att definiera sökmönster. stöds av de flesta programmeringspråk även Sök/Ersätt i Word Textfil: Bill coh Bull jagade Pelle coh Maja. Sökmönster: och Bill B.ll. matchar ett tecken vilket som helst Reguljära uttryck Teckenmängder Reguljära uttryck - ett kraftfullare sätt att definiera en söksträng. Karlsson - Karlsson [KC]arlsson - Karlsson, Carlsson [KC]arl(s ss z zs)on - Karlsson, Carlsson, Karlson, Carlson, Carlzon [KC] exakt ett tecken ur teckenmängden K och C (s ss z sz) en sträng, antingen s, ss, z eller sz [abcdef] teckenmängd Exakt ett tecken ur teckenmängden abcdef [^abcdef] komplement Exakt ett tecken som inte tillhör mängden abcdef [a-z] intervall Exakt ett tecken från intervallet a-z [a-zåäö] Exakt ett tecken ur mängden tecken i svenska alfabetet Obs! ÅÄÖ kan inte ingå i intervallet och måste skrivas separat 2

Kvantifierare Anger antal av föregående deluttryck.? 0 eller 1 * 0 eller flera + 1 eller flera Carina? Carina, Carin [0-9]+ Ex. 1, 12, 67, 34589, 544 ba* Ex. b, ba, baa, baaa (ba)* Ex., ba, baba, bababa Kvantifierare forts.? 0 eller 1 * 0 eller flera + 1 eller flera {2} 2 {2,5} 2 till 5 {2,} Minst 2 ggr {,3} Högst 3 ggr Kvantifierare: Exempel Förankringstecken Ett ord, vilket som helst [a-zåäö]+ Ett namn [A-ZÅÄÖ][a-zåäö]+ Telefonnummer, 14 03 04 [0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9]{2} [0-9]{2} [0-9]{2} ([0-9]{2} ){3} ( ) specialtecken, gruppering Definierar var i strängen mönstret ska finnas: ^ strängens början $ strängens slut \b ordgräns mellan ord och icke-ord Ordtecken: A-ZÅÄÖa-zåäö0-9 Icke-ordtecken: mellanslag,.? : ; -! etc Ex. ^B - Bra Björn! hej$ - Hej hej hej \ba En glad anka Förankringstecken Varför behövs en ordgräns? Förankringstecken matchar inget eget tecken. Jämför Ex.: \b - ordgräns Det står 2-3, sa mannen. Det står 2-3, sa mannen. ^De ^De\b Karlsson \bkarlsson\b De första åren... Det är Denne De betraktade mig De första åren blev svåra. Han ringde till Eva Karlsson. Använd Karlssons klister. Han ringde till Eva Karlsson. Larson och Karlsson var där. 3

Referenser Specialtecken En grupp av 2 likadana siffror t.ex. 22, 55, 77 ([0-9])\1 Tolkas: en siffra + det som matchades i första parentesen ( ) - används både till gruppering och till att skapa en möjlig referent \1, \2, \3 - refererar till tidigare matchningar Specialtecken, t ex:.? [ ] + * $ måste kvotas med \ (backslash) för att tolkas som vanliga tecken.? Specialtecken: 0 eller 1 av föregående uttryck \? Frågetecken. Specialtecken: Ett tecken, vilket som helst \. En punkt ( ) Specialtecken: Gruppering \(\) Startparentes och slutparentes Girighet Girighet forts. Vissa specialtecken t.ex. * och + är giriga dvs. matchar alltid så mycket som möjligt av en rad. Exempel: Skriv ett reguljärt uttryck som matchar html-taggarna i texten: <TAGG>En massa text här < /TAGG> Girigt: <.*> Matchar så lång sträng som möjligt. Matchar: <TAGG>En massa text här < /TAGG> Icke-girigt: <.*?> Matchar så kort sträng som möjligt Matchar: <TAGG> En massa text här < /TAGG> Övningar Reguljära uttryck i Python Skriv ett reguljärt uttryck som matchar: 1) Ordet att men t.ex. inte katt, skatt, batteri 2) Alla böjningsformer av substantivet hund 3) Alla årtal i en text 4) En svensk epostadress 5) Ord som består av små bokstäver och slutar på b 6) Ord som upprepas två gånger efter varandra t.ex. och och, Lena Lena Modulen re compile() skapa regexp mönster search() hitta ett mönster i en text finditer() hitta alla förekomster av mönstret sub() sök och ersätt 1 Importera re modulen >> import re >> text = Bill och Bull 2 Skapa ett sökmönster (reguljärt uttryck) >> regex = re.compile(r [a-zåäö]+, re.l) 3 Sök efter mönstret i en textsträng >> regex.search(text) 4

Skapa ett reguljärt uttryck med compile() re.compile(r reguljärt uttryck, flaggor) r ange det reguljära uttrycket som en raw-sträng Flaggor re.l LOCALE tar hänsyn till lokala inställningar re.i IGNORECASE skiljer inte på stora och små bokstäver Sök i en text >> text = Bill och Bull >> regex = re.compile(r [a-zåäö]+, re.l) Hitta första förekomsten av regex: matchobj = regex.search(text) t) returnerar ett matchobject matchobj.group() returnerar den matchade strängen Exempel regex = re.compile(r [a-zåäö]+, re.l) Gruppera mönster Sök i en text forts. Gruppera uttryck med () >>> regex = re.compile(r'([a-z.]+)@([a-z.]+)', re.l) >>> m = regex.search('marho@ida.liu.se') >>> m.group(0) 'marho@ida.liu.se' >>> m.group(1) 'marho' >>> m.group(2) 'ida.liu.se >> text = Bill och Bull >> regex = re.compile(r [a-zåäö]+, re.l) Hitta alla förekomster av regex i text: matchlist = regex.finditer(text) for m in matchlist: print m.group() Hur många träffar i texten? returnerar lista med matchobject Sök och ersätt text Sök och ersätt text forts. sök och ersätt > regex.sub(r ersättningsssträng', textfil) Ersätt alla matchningar av regex med ny text. Ersättningstexten är en vanlig textsträng (inte ett reguljärt uttryck) >> regex = re.compile(r coh, re.l) >> ny_text = regex.sub(r och', textfil) Bill och Bull jagade Pelle och Maja. Ersättningstexten kan innehålla referenser till sökuttrycket. Sök efter årtal och märk upp dem med taggar: \d en siffra \d{4} fyra siffror >> regex = re.compile(r (\d{4}), re.l) >> nytext = regex.sub(r <year>\1</year>', text) text : De reste till Spanien 1975. nytext: De reste till Spanien <year>1975</year> 5

Exempelskript 1 Exempelskript 2 # script_find.py import re text_file = open("webbtext.txt", "r") webbtext = text_file.read() text_file.close() # HÄR SKRIVER NI ERA REGULJÄRA UTTRYCK! regex = re.compile(r'reguljärt uttryck', re.l) results = regex.finditer(webbtext) for result in results: print result.group(0) # script_sub.py import re text_file = open("webbtext.txt", "r") webbtext = text_file.read() text_file.close() # HÄR SKRIVER NI ERA REGULJÄRA UTTRYCK! regex = re.compile(r'reguljärt uttryck', re.l) ny_text = regex.sub(r'ersättningsuttryck', webbtext) print ny_text Labb 1 Inlämningsuppgifter (13 st) För G ska 9 uppgifter lösas korrekt För VG ska alla 13 uppgifter lösas korrekt Lösningarna ska vara lingvistiskti korrekta. kt Testa sökmönster med redemo.py Läs före labben Introduktion till reguljära uttryck Kap 7. i Programmering i Python 6