1 / 33

Labb 1 - Textbearbetning med reguljära uttryck

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 e ngelska, svenska, … Formella språk Programmeringsspråk

ellard
Download Presentation

Labb 1 - Textbearbetning med reguljära uttryck

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  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 • 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}

  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ärauttryckärettsättattdefinierasökmönster. • stödsav de flestaprogrammeringspråk • ävenSök/Ersätti Word Textfil: Bill coh Bull jagadePelle cohMaja. 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ängdExakt ett tecken ur teckenmängden abcdef • [^abcdef] – komplementExakt 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. 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.

  15. Kvantifierare: Exempel • 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

  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-9Icke-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

  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 Vissaspecialteckent.ex. * och + ärgirigadvs. matcharalltidsåmycketsommöjligtav 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.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’

  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: printm.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ärauttryck • Kap 7. iProgrammeringi Python

More Related