Ladda ner presentationen
Presentation laddar. Vänta.
1
Labb 1 - Textbearbetning med reguljära uttryck
Dela upp en text i meningar Hitta alla namn i en text Hitta adjektiv i superlativ Lektion reguljära uttryck re modulen i Python
2
Formella språk Naturliga språk engelska, svenska, … Formella språk
Programmeringsspråk Användas för att modellera naturliga språk Modellera uttryckstyper
3
Definitioner Ett alfabet är en mängd av symboler
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}
4
Chomskyhierarkin Reguljära språk Kontextfria språk
Kontextkänsliga språk Obegränsade språk
5
Formella språk Sheeptalk Bä! Bää! Bäää! Bääää! … Alfabet = {Bä!}
6
Formella språk 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
7
Ändliga automater Ä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
8
Reguljära språk Ett reguljärt språk kan definieras med hjälp av
ett reguljärt uttryck en automat
9
Vad är en text? 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.
10
Reguljära uttryck 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
11
Reguljära uttryck 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’
12
Teckenmängder [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
13
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 …
14
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
15
Kvantifierare: Exempel
Ett ord, vilket som helst [a-zåäö]+ Ett namn [A-ZÅÄÖ][a-zåäö]+ Telefonnummer, [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
16
Förankringstecken 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’
17
Förankringstecken Förankringstecken matchar inget eget tecken. Ex.:
\b - ordgräns ’Det står 2-3, sa mannen.’ |Det| |står| |2|-|3|, |sa| |mannen|.
18
Varför behövs en ordgräns?
Jämför ’^De’ De första åren... Det är… Denne… ’^De\b’ De betraktade mig … De första åren blev svåra. ’Karlsson’ Han ringde till Eva Karlsson. Använd Karlssons klister. ’\bKarlsson\b’ Larson och Karlsson var där.
19
Referenser 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
20
Specialtecken 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
21
Girighet 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>
22
Girighet forts. 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>
23
Övningar Skriv ett reguljärt uttryck som matchar:
Ordet ’att’ men t.ex. inte ”katt”, ”skatt”, ”batteri” Alla böjningsformer av substantivet ’hund’ Alla årtal i en text En svensk epostadress Ord som består av små bokstäver och slutar på ’b’ Ord som upprepas två gånger efter varandra t.ex. ”och och”, ”Lena Lena”
24
Reguljära uttryck i Python
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)
25
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 Exempel regex = re.compile(r’[a-zåäö]+’, re.L)
26
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) returnerar ett matchobject matchobj.group() returnerar den matchade strängen
27
Gruppera mönster Gruppera uttryck med ()
>>> regex = re.L) >>> m = >>> m.group(0) >>> m.group(1) 'marho' >>> m.group(2) 'ida.liu.se’
28
Sök i en text forts. >> text = ’Bill och Bull’
>> regex = re.compile(r’[a-zåäö]+’, re.L) Hitta alla förekomster av regex i text: matchlist = regex.finditer(text) returnerar lista med matchobject for m in matchlist: print m.group() Hur många träffar i texten?
29
Sök och ersätt text ”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.
30
Sök och ersätt text forts.
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>
31
Exempelskript 1 # 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)
32
Exempelskript 2 # 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
33
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 lingvistiskt korrekta. Testa sökmönster med redemo.py Läs före labben Introduktion till reguljära uttryck Kap 7. i Programmering i Python
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.