729G09 Språkvetenskaplig databehandling

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

729G09 Språkvetenskaplig databehandling

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

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

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

awk, sed och grep awk döpt efter Aho Weinberger Kernighan (1977) sed en stream editor grep sed g/re/p bygger i viss mån på ed line editor

Extramaterial till Matematik Y

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Övning 5 - Tillämpad datalogi 2013

Konstruktion av datorspråk

Mer om språk och Ruby

Föreläsning 7: Syntaxanalys

awk, sed och grep ed kommandon grep Standard unix editor tidig 70-tal program < 8Kbyte awk döpt efter Aho Weinberger Kernighan (1977)

Introduktion till programmering och Python Grundkurs i programmering med Python

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

Tecken och strängar i Java

Schemaunderlag för Programmering, grundkurs (TDDB18)

Objektorienterad Programkonstruktion

TDP002 - Imperativ programmering

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

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

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

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Föreläsning 13 Testning och strängar

DD1311 Programmeringsteknik för S1 Laborationer läsåret

Laboration 6 Formulär och stränghantering övningar/uppgifter

Funktioner. Linda Mannila

Mer om språk och Ruby

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

Datalogi för E Övning 3

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

Användarhandledning Version 1.2

Lösningsförslag till exempeltenta 2

Använda Python Laboration 1 GruDat, DD1344

12. Relationer och funktioner

Chapter 3: Using Classes and Objects

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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Reguljära uttryck, automater, hashtabeller, mm

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Uppgift 1 (Sorterade heltal som är OK)

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

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

Erfarenheter från labben

Övning 1 - Abstrakta datatyper

TDDD78, TDDE30, 729A Tecken och strängar med och utan Java

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

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

Övningsuppgifter kapitel 8

Programmeringteknik. Planering MÅL LABB: MOMENT LAB4 HTML - EXEMPEL HTML. Webbdelen

Strängar. TDDD64 Programmering i Python Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Uppgifter teknik HT17 (uppdaterad v. 40)

Text och strängindexerade fält Grundkurs i programmering med Python

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

Planering Programmering grundkurs HI1024 HT data

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Import av referenser till Mendeley

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

Alfabeten, strängar och språk. String

TDP003 Projekt: Egna datormiljön

BASH. Bourne-Again SHell. Eric Elfving Institutionen för datavetenskap (IDA)

Föreläsning 18 Filer och avbildningar

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

Grundläggande Datalogi

Uppgift 1 ( Betyg 3 uppgift )

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

12. Relationer och funktioner

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

Anteckningar 1: Grundläggande saker

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Planering Programmering grundkurs HI1024 HT TIDAA

Grundläggande textanalys, VT2013

Introduktion till programmering SMD180. Föreläsning 3: Funktioner

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Övning (X)HTML 2. Sidan 1 av

Karlstads Universitet, Datavetenskap 1

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

Din lärare kan se om och när du har utfört ditt uppdrag. Då får du ett nytt.

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Programmering för språkteknologer I, VT2012. Rum

Objektorienterad programmering D2

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Ritningshantering med hjälp av aktiv mapp med arbetsflöde

Byggmästarkrypto lärarsida

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

v. 42 Python HT17 En introduktion Oscar Bergqvist

Transkript:

729G09 Språkvetenskaplig databehandling Lektion inför Laboration 1 vt15 Lars Ahrenberg

Plan för lektionen Grupperingar Substitutioner Strängfunktioner i Python (kort repetition) Reguljära uttryck i Python sökfunktioner substitutioner Inför laboration 1 2

Övningar Skriv reguljära uttryck som matchar Ordet 'att' men inte 'katt' eller 'matta', Ett årtal mellan 1000 och 2999, Ett decimaltal som 2,15 eller 0,6871, En epostadress vid Linköpings universitet 3

Grupperingar () Parenteser används för att markera räckvidd: (ab)* möjliggöra referenser till något som redan matchat. Exempel: '(ab)c\1' matchar abcab varje par av parenteser sparas för sig '(ab)c(ba)' ger \1: ab, \2: ba I Pythonmodulen re används även group(1), group(2),... 4

Reguljära substitutioner Ofta vill man modifiera det som man hittar med ett reguljärt uttryck, t.ex. ta bort det, eller stoppa in något i anslutning till det, t.ex. ett blanktecken, eller märka upp det, t.ex. med <tagg>...</tagg>, eller ändra något, t.ex. ä till ä 5

Substitutioner I UNIX-funktionen sed heter substitutionsoperatorn 's' och skrivs s/<regexp>/<newexp>/; I Python finns funktionen 'sub' i modulen re. 6

Reguljära substitutioner Gruppering är särskilt användbart vid substitutioner, t.ex. om vi vill göra skiljetecken till egna tokens i en text: s/([a-zåäö])([,:!\.\?])/\1 \2/; () anger grupperna grupperna numreras i den ordning de påträffas 7

Girighet Många operatorer är giriga, dvs. matchar så mycket som möjligt: 't*' matchar ett, '<.*>' matchar <tagg>en massa text här </tagg> Icke-girig matchning kan begäras: <.*?> matchar <tagg>en massa text här </tagg> 8

Strängfunktioner i Python find matchar en sträng mot en annan sträng s = 'Hello world!' s.find('world') 6 s.find('word') -1 s.find('world',7) -1 9

Strängfunktioner i Python replace byter ut en sträng mot en annan. s = 'Hello world!' s.replace('world','my friend') 'Hello my friend!' s.replace('o','u') 'Hellu wurld!' s.replace('o','u',1) 'Hellu world!' find och replace tar bara argument som är konkreta strängar 10

Substitutioner utan reguljära uttryck Strängfunktioner i Python kan användas för konkreta substitutioner, t.ex. replace(), capitalize(), lower(), upper(), Exempel: string = 'abcabc' string.upper() returnerar 'ABCABC' 11

Reguljära uttryck i Python Modulen re compile() skapar reguljära mönster match() matchar endast i början search() hittar mönster (1 gång) findall()hittar mönster (alla förekomster) finditer() som findall fast flexiblare sub() substitutioner 12

Reguljära uttryck i Python 1. Importera modulen >> import re 2. Skapa text >> t = 'Bill och Bull' 3. Skapa ett sökmönster (regexp) >> regex = re.compile(r'[a-z]+') 4. Sök efter mönstret i texten, t.ex. >> regex.search(t) 13

Visa resultat av en sökning >> t = 'Bill och Bull' >> regex = re.compile(r'[a-z]+') >> matchobj = regex.search(t) search() returnerar första match som ett objekt >> print matchobj.group(0) ill returnerar den matchande strängen 14

Reguljära uttryck i Python raw-strängar (r' ') I Python kompileras reguljära uttryck. Både Pythons parser och parsern för modulen re ger särskild (men olika) betydelse åt symbolen '\'. För att det reguljära uttrycket säkert ska tolkas som sådant används raw-strängar, som man får genom att skriva r framför strängen (Pythonparsern blockeras). 15

Skapa ett reguljärt uttryck med compile() re.compile(r'regexp', Flaggor) r'...' ange regexp som en raw-sträng två flaggor re.u UNICODE: ger \w, \b m.fl. en tolkning enligt Unicode re.i IGNORECASE skiljer inte på stora och små bokstäver 16

Hitta alla matchande strängar >> t = 'Bill och Bull' >> regex = re.compile(r'[a-z]+') >> matchlist = regex.finditer(t) finditer() returnerar en lista med objekt >> for m in matchlist: print m.group(0) Vad returneras? 17

Gruppering av mönster - () >> t = 'bill och bull' >> rx = re.compile(r'([a-z]+) ([a-z]+)') >> matchlist = rx.finditer(t) >> for m in matchlist: a = m.group(0) # bill och b = m.group(1) # bill c = m.group(2) # och 18

Substitutioner >> t = 'bill och bull' >> rx = re.compile(r'[iu]') >> u = rx.sub(r'e', t) u är nu 'bell och bell' 19

Uppmärkning av text med sub >> t = 'Bill och Bull' >> rx = re.compile(r'([a-z][a-z]+)') >> u = rx.sub(r'<namn>\1</namn>', t) u är nu <NAMN>Bill</NAMN> och <NAMN>Bill</NAMN> 20

Flera substitutioner i samma skript >> t = 'Bill, Bull och Bell.' >> rx1 = re.compile(r'[a-z][a-z]+') >> rx2 = re.compile(r'([,\.])) >> t = rx1.sub(r'namn', t) >> t = rx2.sub(r' \1', t) t är nu 'NAMN, NAMN och NAMN.' 21

Lab 1: skriptskelett: lab1_script.py Fast del (ändra inte) import re import codecs with codecs.open("webbtext.txt", 'rb', encoding='utf- 8') as infile: webbtext = infile.read() infile.close() 22

Lab 1: skriptskelett: lab1_script.py Det finns två redigerbara delar. Den första utför sökningar: Ändra här! regex = re.compile(r'reguljärt uttryck', re.u) results = regex.finditer(webbtext) for result in results: print(result.group(0)) 23

Lab 1: skriptskelett: lab1_script.py Det finns två redigerbara delar. Den andra utför substitutioner: Ändra här! regex = re.compile(r'reguljärt uttryck', re.l) ny_text = regex.sub(r'ersättningsuttryck', webbtext) print(ny_text) och här! 24

Lab 1: anrop av script >> python3 lab1_script.py Ändra i skripten med valfri editor. Spara lösningarna för alla uppgifter på samma dokument, som blir redovisningen. Ge varje lösning lämplig rubrik på formen Uppgift N: 25

Lab 1: krav G: 8 uppgifter med korrekt lösning. VG: 12 uppgifter (= alla) med korrekt lösning. 26

Teckenkodning Om man blandar teckenkodningar kan man få problem med svenska tecken: Allvarligt problem regexparna matchar inte Estetiskt problem å, ä, ö skrivs ut på annat sätt (t.ex. hexadecimalt) Teckenkodningar kan blandas utan att man tänker på det, t.ex. om man sparar en fil via sin webbläsare. 27