Progrmmering för språkteknologer II, HT2014 Avncerd progrmmering för språkteknologer, HT2014 evelin.ndersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelin/uv/uv14/pst2/
Idg - Ändlig utomter - Reguljär uttryck - Läsning/Skrivning - Hshteller - Övningr 2
Reltion till tidigre kurser - Mtemtik för språkteknologer Teori kring finit utomter och reguljär uttryck - Introduktion till dtteknik för språkvetre Prktisk nvändning v reguljär uttryck sed och grep - Den här kursen Fokus på hur reguljär uttryck nvänds i Jv Sk kunn representer enkl uttryck som utomter 3
Ändlig utomter 4
Exempel Vd är en utomt? S 1 S 2 S 3 S 4 S 2 S 1 S4 initiltillstånd tillstånd S 3 finltillstånd 5
Exempel Vd är en utomt? S 1 S 2 S 3 S 4 symoler trnsition / övergång loop 6
Exempel Vd är en utomt? S 1 2 3 S 4 S S 3 Provkör utomten på inputsträngen: 7
Exempel Vd är en utomt? indt: S 1 2 3 S 4 S S 3 8
Exempel Vd är en utomt? indt: S 1 2 3 S 4 S S 3 9
Exempel Vd är en utomt? indt: S 1 2 3 S 4 S S 3 10
Exempel Vd är en utomt? indt: S 1 2 3 S 4 S S 3 11
Exempel Vd är en utomt? indt: S 1 2 3 S 4 S S 3 12
Exempel Vd är en utomt? indt: S 1 2 3 S 4 S S 3 13
Exempel Vd är en utomt? indt: S 1 2 3 S 4 S S 3 14
Exempel Vd är en utomt? indt: S 1 2 3 S 4 S S 3 15
Exempel Vd är en utomt? indt: S 1 2 3 S 4 Nu är indtn slut och vi lyckdes hmn i utomtens finltillstånd. Dett inneär tt strängen ccepters v utomten. S S 3 16
Exempel Vd är en utomt? S 1 2 3 S 4 Provkör utomten på indtn S S 3 17
Exempel Vd är en utomt? Indt: S 1 2 3 S 4 S S 3 18
Exempel Vd är en utomt? Indt: S 1 2 3 S 4 S S 3 19
Exempel Vd är en utomt? Indt: S 1 2 3 S 4 S S 3 20
Exempel Vd är en utomt? Indt: S 1 2 3 S 4 S S 3 21
Exempel Vd är en utomt? Indt: S 1 2 3 S 4 S S 3 Nu är indtn slut och vi lyckdes inte hmn i utomtens finltillstånd. Dett inneär tt strängen inte ccepters v utomten. 4 Tillståndet S klls för skräptillstånd 22
Exempel Vd är en utomt? S 1 S 2 S 3 S 4 Accepternde strängr:,,,... Icke-ccepternde strängr:,,,,... 23
Deterministisk ändlig utomt Fkt S 1 initiltillstånd - finns endst en - utomtens strttillstånd S i S j tillstånd - det tillstånd utomten hmnt i under körning S f finltillstånd - utomtens måltillstånd - kn finns fler 24
Deterministisk ändlig utomt Fkt c d symoler - Det lfet vi retr med i utomten trnsition/övergång - förflyttning från ett tillstånd till ett nnt tillstånd smtidigt som en symol läses från indt loop - en symol läses från indt och vi är kvr i smm tillstånd 25
Deterministisk ändlig utomt Fkt Accepterd indt När mn kört den givn indtn på utomten från initiltillståndet och lyckts komm frm till finltillståndet, då hr utomten ccepterd den givn indtn. Inte ccepterd indt När mn kört den givn indtn på utomten från initiltillståndet tills indtn är slut och mn inte hr nått frm till finltillståndet, då hr utomten inte ccepterd den givn indtn. 26
Ändlig utomter Fkt Deterministisk utomt En utomt där en symol leder till mximlt ett estämt tillstånd. Exempel: S 1 S 2 S 3 Icke deterministisk utomt En utomt där en symol kn led till mer än ett tillstånd. Exempel: S 1 S 2 S 3 27
Automter Tillämpning Exempel: Test tt dtum i texter är skrivn på rätt sätt. Rätt dtum: 110915, 111015 Fel dtum: 111401, 110145 Kn vr intressnt i sökning, elektronisk formulär, etc 28
Reguljär uttryck 29
Reguljär uttryck - Vd är reguljär uttryck? - Ett reguljär uttryck krktäriserr teckensekvenser - En sekvens med tecken mtchr eller mtchr inte ett reguljärt uttryck. - När esläktde med utomter - Mycket viktig i språkteknologi och dtvetenskp 30
Reguljär uttryck i Jv - Syntxen för reguljär uttryck kn skilj sig från den syntx ni är vn vid. - Funktioner med reguljär uttryck finns i klssen String - Klsser i Jv: jv.util.regexp - Pttern - Mtcher - I ndr klsser, till exempel Scnner, kn reguljär uttryck nvänds som prmeter till metoder. 31
Reguljär uttryck som strängr - I Jv skrivs reguljär uttryck som strängr - Speciltecken: Speciltecken Betydelse. Vilket tecken som helst () Gruppering v tecken *+? Kvntifierre ({[\^-=$! ]})?*+ All specil tecken Noter: Bckslsh(\) måste dulers: \\ Speciltecken kn nvänds som vnlig tecken om mn skriver ckslsh före: \\. Fördefinierde klsser: \\s 32
Kvntifierre - * Hur kn vi eskriv nednstående utomt med hjälp v ett reguljärt uttryck? S 1 Lösning: * Opertionen klls för kleeneslutning och mtchr noll eller fler 33
Kvntifierre - + Hur kn vi eskriv nednstående utomt med hjälp v ett reguljärt uttryck? S S 1 2 Lösning: + Opertionen klls för plusopertor och mtchr en eller fler 34
Kvntifierre -? Hur kn vi eskriv nednstående utomt med hjälp v ett reguljärt uttryck? S1 S 2 Lösning:? Opertionen klls för optionlitet och mtchr noll eller ett 35
Opertioner - Hur kn vi eskriv nednstående utomt med hjälp v ett reguljärt uttryck? S 1 S 2 S 3 Lösning: Opertionen klls för union och nvänds när mn vill mtch olik lterntiv 36
Reguljär uttryck - Teckenklsser [] Ett v de tecken som står innnför [] mtchs 37
Reguljär uttryck - Teckenklsser [] [] mtchr tecknet Motsvrr denn utomt: S 1 S 2 38
Regujär uttryck - Teckenklsser [] [-c] mtchr tecken, och c Motsvrr denn utomt: S S 1 2 c 39
Reguljär uttryck - Teckenklsser [] [-za-z] mtchr tecken till och med z smt A till och med Z 40
Reguljär uttryck - Teckenklsser [] [c] mtchr tecken och c Motsvrr denn utomt: S 1 2 c S 41
Reguljär uttryck negerde teckenklsser [] En negerd teckenklss mtchr inget v de tecken som står innnför [] 42
Reguljär uttryck negerde teckenklsser [] [^] mtchr ll tecken utom S 1 2, c,... S S 3 43
Reguljär uttryck negerde teckenklsser [] [^c] mtchr ll tecken utom och c S 1 2, c, d, e,... S S 3 44
Reguljär uttryck negerde teckenklsser [] [^-c] mtchr ll tecken utom, och c S 1 2,, c d, e,... S S 3 45
Reguljär uttryck negerde teckenklsser [] [^-za-z] mtchr ll tecken utom till och med z smt A till och med Z 46
Fördefinierde teckenklsser i Jv: Teckenklss Betydelse Mtchr "\\d" [0-9] en siffr "\\D" [^0-9] ett tecken som inte är en siffr "\\w" [-za-z0-9] ett ordtecken "\\W" [^-za-z0-9] inte ett ordtecken "\\s" [ \t\n...] vit tecken "\\S" [^ \t\n...] inte vit tecken "\\" Ordgräns Inget tecken 47
Unicode i Jv - Stndrd för de teckenklsser vi ehöver när vill nvänd ll skriftsystem för nturlig språk - Exempel: "\\p{l}" "\\p{ll}" "\\p{lu}" "\\p{p}" - okstv - gemen - versl - interpunktionstecken Fler klsser finns här: http://www.regulr-expressions.info/unicode.html 48
Opertioner Hur kn vi eskriv nednstående utomt med hjälp v ett reguljärt uttryck? S 1 2 3 S S 3 49
Opertioner - [][] Hur kn vi eskriv nednstående utomt med v ett reguljärt uttryck? S 1 2 3 S S 3 Lösning: [][] Metoden klls för konktinering dvs smmnfogning 50
Konktinering([][]): Givet två reguljär uttryck R 1 och R 2. R 1R 2 mtchr ll strängr som är smmnstt v två strängr där den först strängen mtchr R och den ndr strängen mtchr R. 1 Exempel: [1] [2] mtchr, 2, 1 och 12 2 51
Konktinering([][]): Exempel: [1] [2] mtchr, 2, 1 och 12 2 S 1 2 S 3 1 S 52
Reguljär uttryck - Opertioner Opertor nmn [][] konktinering(smmnfogning) * kleeneslutning + plusopertor union? optionlitet 53
Reguljär uttryck i Jv Klssen String 54
Klssen String mtchningsmetod oolen mtches(string regex) - returnerr snt om strängen mtchr regex och flskt nnrs Exempel: String mystring = ""; if(mystring.mtches("+")) System.out.println("The string mtches" + "\"+\""); else { System.out.println("The string does " + "not mtch \"+""); } 55
Klssen String ersättningsmetoder Följnde yter den mtchnde strängen regexp mot strängen replcement: replcefirst(string regex, String replcement) - ersätter de först mtchningen i strängen och returnerr den ny strängen (String) replceall(string regex, String replcement) - ersätter ll mtchningr i strängen och returnerr den ny strängen (String) 56
Klssen String ersättningsmetoder replcefirst(string regex, String replcement) - ersätter de först mtchningen i strängen och returnerr den ny strängen (String) Exempel: String mystring = ""; mystring = mystring.replcefirst("", ""); "" mtchr strängen mystring ser nu ut så här: "" 57
Klssen String ersättningsmetoder replceall(string regex, String replcement) - ersätter ll mtchningr i strängen Exempel: String mystring = ""; mystring = mystring.replceall("+", ""); "+" mtchr ll strängr som innehåller:,,,,... mystring ser nu ut så här: "" 58
Klssen String ersättningsmetoder replceall(string regex, String replcement) - ersätter ll mtchningr i strängen Exempel: String mystring = ""; mystring = mystring.replceall("*", ""); "*" mtchr ll strängr som innehåller: "",,,,,... mystring ser nu ut så här: "" 59
Klssen String ersättningsmetoder replceall(string regex, String replcement) - ersätter ll mtchningr i strängen Exempel: String mystring = ""; mystring = mystring.replceall("?", ""); "?" mtchr ll strängr som innehåller: "" eller mystring ser nu ut så här: "" 60
Klssen String splitmetod String[] split(string regex) - klipper en sträng vid vrje mtchnde delsträng Exempel: String mystring = "en liten ktt"; String[] sustring = mystring.split(" "); sustring ser ut så här: "en" "liten" "ktt" 61
Reguljär uttryck- gruppering 62
Reguljär uttryck- gruppering - Med hjälp v prenteser kn mn grupper delr v ett reguljärt uttryck. Användning Exempel Mtchr Begräns lterntiv gld(re st) gldre, gldst gldre st gldre, st Tillsmmns med kvntifierre (ktt)+ gld(re st)? ktt, kttktt, kttkttktt,... gld, gldre, gldst Hänvis tillk ([1-4])\\1 11, 22, 33, 44 63
Reguljär uttryck- gruppering - Fler grupper kn nvänds i ett uttryck - Gruppern räkns från vänster till höger: Exempel: ((e(tl))(r)) 64
Reguljär uttryck- gruppering - Fler grupper kn nvänds i ett uttryck - Gruppern räkns från vänster till höger: Exempel: ((e(tl))(r)) grupp 0: etlr 65
Reguljär uttryck- gruppering - Fler grupper kn nvänds i ett uttryck - Gruppern räkns från vänster till höger: Exempel: ((e(tl))(r)) grupp 0: etlr grupp 1: etl 66
Reguljär uttryck- gruppering - Fler grupper kn nvänds i ett uttryck - Gruppern räkns från vänster till höger: Exempel: ((e(tl))(r)) grupp 0: etlr grupp 1: etl grupp 2: tl 67
Reguljär uttryck- gruppering - Fler grupper kn nvänds i ett uttryck - Gruppern räkns från vänster till höger: Exempel: ((e(tl))(r)) grupp 0: etlr grupp 1: etl grupp 2: tl grupp 3: r 68
Reguljär uttryck- gruppering - Mn kn nvänd grupper för tt välj ut ett eller uttryck I smm uttryck - \\x Exempel:[rst]\\1 mtchr rr, ss, tt I utytesuttryck - $x 69
Regexp i Jv jv.util.regex - Innehåller mer vncerde funktioner än klssen String - Två huvudklsser: Pttern representerr ett reguljärt uttryck Mtcher Hnterr instnser v klssen Pttern och Innehåller metoder för mtchning - Exempel: String mysentence =...; Pttern p = Pttern.compile("REGEXP"); Mtcher m = p.mtcher(sentence); // Do something with m 70
Regexp i Jv jv.util.regex Mtchningsmetoder oolen find() returnerr snt om det finns en delsekvens i teckensekvensen som uppfyller det reguljär uttrycket oolen mtches() returnerr snt om hel teckensekvensen mtchr det reguljär uttrycket 71
Regexp i Jv jv.util.regex indexmetoder int regionstrt() returnerr vid vilket index i teckensekvensen som mtchningen örjr int regionend() returnerr vid vilket index i teckensekvensen som mtchningen slutr 72
Regexp i Jv jv.util.regex Grupperingsmetoder String group() returnerr den delsträng som mtcht grupp 0 String group(int group) returnerr den delsträng som mtcht grupp group int groupcount() returnerr ntlet grupper i det reguljär uttrycket 73
Regexp i Jv jv.util.regex Ersättningsmetoder String replceall(string replcement) Ersätter ll delsträngr som mtchr det reguljär uttrycket med replcement String replcefirst(string replcement) Ersätter den först delsträngen som mtchr det reguljär uttrycket med replcement 74
Reguljär kvntifiktorer Greedy X? X* X+ Greedy Mtchr så lång delsträng som möjligt först och försöker därefter med kortre. (Defult) Exempel: String mystring = "en <i>liten</i> ktt"; mystring = mystring.replceall("</?.*>", ""); mystring ser nu ut så här: "en ktt" 75
Reguljär kvntifiktorer Reluctnt X?? X*? X+? Reluctnt(?) Mtchr så kort delsträng som möjligt först och försöker därefter med längre. Exempel: String mystring = "en <i>liten</i> ktt"; mystring = mystring.replceall("</?.*?>", ""); mystring ser nu ut så här: "en liten ktt" 76
Reguljär kvntifiktorer Possessive(+) Mtchr som greedy men kstr tidigre mtchningr. Exempel: String mystring = "cx"; mystring = mystring.replceall(".*", ""); mystring ser nu ut så här: "" Possessive X?+ X*+ X++ 77
Reguljär kvntifiktorer Possessive(+) Mtchr som greedy men kstr tidigre mtchningr. Exempel: String mystring = "cx"; Possessive X?+ X*+ X++ mystring = mystring.replceall(".*+x", ""); mystring ser nu ut så här: "cx" Eftersom ingen delsträng mtchde.*+x 78
Reguljär kvntifiktorer Greedy Reluctnt Possessive X? X?? X?+ X* X*? X*+ X+ X+? X++ Greedy Mtchr så lång delsträng som möjligt först och försöker därefter med kortre. Reluctnt(?) Mtchr så kort delsträng som möjligt först och försöker därefter med längre. Possessive(+) Mtchr som greedy men kstr tidigre mtchningr. 79
Reguljär uttryck i Jv vs grep/sed - Vrför sk mn nvänd reguljär uttryck i jv? - Fungerr inte grep och sed lik r? 80
Reguljär uttryck i Jv vs grep/sed - Vrför sk mn nvänd reguljär uttryck i jv? - Fungerr inte grep och sed lik r? Svr: Det eror på vd sk gör! Om mn sk gör något mer med dtn, till exempel gör en frekvenstell som i lortion 1, så kn det vr r tt nvänd ett progrmmeringsspråk. 81
Läsning med reguljär uttryck 82
Läsning med reguljär uttryck - Scnner - Klssen Scnner nvänds när mn vill läs in dt med hjälp v reguljär uttryck. Exempel: - Stndrd in: Scnner stdin = new Scnner(System.in); - Från en nnn sträng: String line = ; Scnner linescnner = new Scnner(line); - Från en fil: File infile = new file(filenme); Scnner instrem = new Scnner(infile); 83
Läsning med reguljär uttryck - Scnner Exempel på Inläsningsmetoder: String next() returnerr näst token från sknnern String next(string/pttern regexp) returnerr näst token från sknnern om det uppfyller Regexp String nextline() returnerr resternde innehåll på nuvrnde rd och förflyttr sknner till näst rd int textint() returnerr näst heltl om det går nnrs ksts ett undntg 84
Läsning med reguljär uttryck - Scnner Exempel på kontrollmetoder: oolen hsnext() returnerr snt om indtn till sknnern estår v fler token oolen hsnextline() returnerr snt om det finns en till rd i indtn till sknnern oolen hsnextint() returnerr snt näst token i indtn till sknnern är ett heltl 85
Scnner kodexempel VISA KODEXEMPEL!!! 86
Skrivning med reguljär uttryck klssen Formt 87
Klssen Formt - Används för tt formter output för till exempel: Tl Dtum Mrginler... - Kn npsss till konventioner i olik språk (med hjälp v locles) 88
Klssen Formt - Kn nvänds till olik skrivtekniker: Formtter(Appendle ) Exempel: StringBuilder Formtter(File file) Formtter(OutputStrem os) - Mn kn även nvänd en locle för tt konverter till olik språk: Exempel: Formtter(Appendle, Locle l) - Kn även skriv till stndrd out: System.out.formt 89
Klssen Formt Användning - System.out.formt(String formt, Oject...rgs) formt: Formtet på strängen och innehåller text och formtidentifierre: Formtidentifierre Betydelse %s sträng %d heltl i decimlformt %o heltl i octlformt %f decimlformt %e decimltl, vetenskplig nottion %t dtum/tid Exempel: System.out.form( Frekvensen (kräver ytterliggre för ordet specifiering) %s är %d, word, freq); Resultt: Frekvensen för ordet ktt är 5 %n nyrd 90
Klssen Formt Användning - System.out.formt(String formt, Oject...rgs) formt: Formtet på strängen och innehåller text och formtidentifierre: Exempel: System.out.formt("Frekvensen för ordet %s är %d", word, freq); Resultt: Frekvensen för ordet ktt är 5 91
Klssen Formt Formtidentfierre - Detljer %[flgs][width][.precision]conversion - conversion Vilken formtidentifierre det är - flgs Specifiktionsflggor, vilk som mn kn nvänd eror på conversionen - width minimumvidd på utskriften -.precision ntl decimler för decimltl (nvänds enrt för tl) 92
Klssen Formt Formtidentfierre - Detljer Exempel: %.2f - decimltl vrundt till två decimler, ex. 23.57 %10s -sträng utskriven vänsterjusterd, med minst 20 tecken, utfyllt med mellnslg, ex. '' hej'' %-10s -sträng utskriven högerjusterd, med minst 20 tecken, utfyllt med mellnslg, ex. ''hej '' %0+8.3f - decimltl vrundt till två decimler, med tecken ngivet, minst 8 positioner långt, utfyllt med nollor, ex. ''+023.568'' 93
Hshteller Idg: - Vd är en hshtell (Översikt)? - Vilk klsser finns i Jvs iliotek? - Hur nvänder mn den? Senre i kursen: - Hur fungerr en hshtell teoretiskt? - Hur är den implementerd? 94
Hshteller - Mppningr -Arryer: Mppning från heltl (0,...,n) till värden: 0 1 2 3 95
Hshteller - Mppningr -Arryer: Mppning från heltl (0,...,n) till värden: 0 1 2 3 ArryList<String>: Mppning melln heltl och strängr hej ö En ktt 0 1 2 3 96
Hshteller - Mppningr Hshteller: Mppning från en typ till en nnn HshMp<String,String> Mppning från sträng till sträng hej ö En ktt h ö E k 97
Hshteller - Mppningr Hshteller: Mppning från en typ till en nnn HshMp<String,String> Mppning från sträng till sträng hej ö En ktt h ö E k HshMp<Person,Integer> Mppning från klssen Person till heltl 4711 11 15 1000 Klle Musse Kntte Kjs 98
Hshteller - Terminologi - Mppning från nyckel till värde Exempel: Frekvensordlist: Nyckel: ord(string) Värde: frekvens(integer) HshMp<String,Integer> Mpp från ordform till lemm Nyckel: ordform(string) Värde: lemm(string) HshMp<String,String> 99
Hshteller Vilk hshteller finns det i jv? - Osorterde hshteller HshMp Hshtle - Sorterde hshteller (sorterr på nycklrn) TreeMp - All hshteller implementerr gränssnittet Mp 100
Klsser vs Astrkt klsser vs Gränssnitt - Klss Kn h instnser All metoder är implementerde Kn vr superklss 101
Klsser vs Astrkt klsser vs Gränssnitt - Klss Kn h instnser All metoder är implementerde Kn vr superklss - Astrkt klss Kn INTE h instnser Minst en metoder är inte implementerd Kn vr superklss 102
Klsser vs Astrkt klsser vs Gränssnitt - Klss Kn h instnser All metoder är implementerde Kn vr superklss - Astrkt klss Kn INTE h instnser Minst en metoder är inte implementerd Kn vr superklss - Gränssnitt (Intefce) Kn inte h instnser Hr endst oimplementrde metoder Andr klsser kn implementer en eller fler gränssnitt Ett lterntiv till multipel rv (som skns i Jv) 103
Använd hshteller Funktion Skp hshtell Lägg till ett nytt nyckelvärdepr Hämt värde Exempel HshMp<K,V> nme = new HshMp<K,V)(int cpcity); Nme.put(K key, V vlue); V vlue = nme.get(k key); Returnerr null om det inte finns en mppning melln key och ett värde Test om en nyckel finns i hshtellen nme.continskey(k key); 104
Exempel: Ök värdet i en frekvenslist HshMp<String, Integer> freqlist = new HshMp<String, Integer>(); // Lägg till nycklr-värden //Ök värdet för nyckel med 1 //Alterntiv 1: if(freqlist.continskey()) { freqlist.put(, freqlist.get()+1); } else{ freqlist.put(, 1); } 105
Exempel: Ök värdet i en frekvenslist HshMp<String, Integer> freqlist = new HshMp<String, Integer>(); // Lägg till nycklr-värden //Ök värdet för nyckel med 1 //Alterntiv 2: if(freqlist.get() == null) { freqlist.put(, 1); } else{ freqlist.put(, freqlist.get()+1); } 106
Lortion 1 - Huvudskligen om reguljär uttryck - Även övning på utomter, läsning/skrivning, hshteller - Språkteknologrelterde uppgifter, t ut informtion och t frm informtion från texter - Tre delr(kndidt), fyr delr(mster): 1. Mtch och eret rå text 2. T frm frekvensteller för olik spekter ur tggt text 3. T frm sttistik från text: meningslängd, ordlängd, Vnlig ord, etc Mster: 4. Diskussionsfrågor - Givet testprogrm för del 1. I övrigt får ni skriv och strukturer er egen kod. Dedline: 17/9 107
Lrpporter - Vd som sk ts med frmgår i respektive instruktion - Mil llt till Evelin, zippt - T lltid med kod: Använd r nmn på klsser, metoder, vriler Indenter koden korrekt Följ Orcles kodstndrd - Övrig delr i l 1 Testkörning för er progrm Finit utomter för övning 1.1 och 1.2 - I kommnde lortioner: Skriftlig diskussion- ing formell rpporter men skriv tydligt och korrekt. Lämn in som pdf. Skriv nmn! UML-digrm Skärmdump 108
Näst veck Tem: Sökning och sortering Två föreläsningr: Fö 1: Sökning och sortering Fö 2: Generics, interfce, stckr, köer, mm (även inför l 3) L 2 om sökning och sortering 109
Jo själv - Lr L 1 L 0 om den inte är klr - Gör progrmmeringsövningr Från oken L 2 från 2012 (mer om finit utomter) - Läs om veckns område Mteril om reguljär uttryck och finit utomter Från kurshemsidn Läsning/skrivning Hshteller Jvdoc om de klsser vi ehndlt idg - Läs inför näst veck: Sökning Sortering 110