Korl-url till den här sidan: https://bit.ly/regexp-tutorial
Data: Samtliga anföranden i riksdagen, september 2013-mars 2014
- XML: https://docs.google.com/file/d/0B4jPWc7pGzlMUXhJOUhhSWJYcXc (28 MB)
- Excel-format: https://jplusplus.se/u/grav14/anforanden_2013-mars2014.xls (22 MB)
- Excel-sampel: https://dl.dropboxusercontent.com/u/15955488/anf-randen_2013-mars2014-xml_sample.xls (190 kB, 100 rader)
Skript för att slå ihop XML-filer: https://github.com/jensfinnas/refine-regex-tutorial/blob/master/merge-xml-files.py
Open Refine (som tidigare hette Google Refine) är att gratisverktyg för att tvätta och bearbeta data. Med Open Refine kan du bland annat:
- Identifiera och harmonisera stavningsvariationer (till exempel "Ericsson Ab", "Ericsson", "Ericson" => "Ericsson")
- Använda externa API:er för att komplettera ditt dataset. Till exempel genom att anropa en geokodare som gör om adresser till longituder och latituder.
- Köra reguljära uttryck.
- Jobba med stora mängder data.
Open Refine är framför allt användbart när man jobbar med textdata. Om du har numerisk data och vill göra beräkningar är det vanligen enklare att använda Excel eller något annat kalkylprogram.
Varje databearbetning i Refine består av två steg:
- Välj vilken dela av datan du vill jobba med genom att applicera ett facet (filter).
- Applicera en funktion (ofta genom att klicka på en kolumnrubrik och välj Edit column).
Ladda ner en av datafilerna länkade högst upp i det här dokumentet.Välj Create Project > This Computer
och ange den fil du precis laddat ner.
Välj Export > Excel. Öppna den fil som laddas ner.
Skapa en ny kolumn till höger om kolumnen anforande - anforandetext
. För att söka i texten använd formeln =FIND("sökord", CELLREFERENS)
.
Den här koden returnerar ett felmeddelande om den inte hittar nån match. Annars en siffra (som anger på vilken plats ordet förekommer). Kopiera formeln neråt genom hela datasetet.
Välj Data > Filter och filtrera bort alla värdefel.
Reguljära uttryck (regular expression, regex, regexp) är en syntax för att göra avancerade mönstersökningar i textsträngar. Vi kan till exempel söka efter alla personnummer, webbadresser, akademiska titlar och så vidare. Reguljära uttyck går att tillämpa i de flesta programmeringsspråk.
^ | Början av en sträng |
$ | Slutet av en sträng |
. | Vilket tecken som helst |
[ ] | Matchar något av tecknen inom klammern. Till exempel [aoueiyåäö] matchar en vokal, [a-ö] en liten bokstav mellan a och ö och E-H en stor bokstav mellan E och H. |
\s | Mellanslag |
\S | Icke-mellanslag |
\d | Siffra |
\D | Icke-siffra |
* | Hur många tecken som helst av föregående. |
{3} | Matchar exakt tre tecken. |
{3,5} | Matchar exakt tre-fem tecken. |
{3,} | Matchar tre tecken eller fler. |
Komplett lista över funktioner: https://www.tutorialspoint.com/python/python_reg_expressions.htm
Exempeltext:
Carl Bildt, 64, (M), Fredrik Reinfeldt, 48, (M) och Annie Lööf, 30, (C) möttes i Rosenbad den 12.3.2014.
– Jag är mycket nöjd över våra samtal, säger Bildt.
Sök årtal | \d{4} eller \d\d\d\d |
Carl Bildt, 64, (M), Fredrik Reinfeldt, 48, (M) och Annie Lööf, 30, (C) möttes i Rosenbad den 12.3.2014 . |
Sök ålder | , (\d{1,2}), |
Carl Bildt, 64 , (M), Fredrik Reinfeldt, 48 , (M) och Annie Lööf, 30 , (C) möttes i Rosenbad den 12.3.2014. |
Sök citat | –.*$ |
Carl Bildt, 64, (M), Fredrik Reinfeldt, 48, (M) och Annie Lööf, 30, (C) möttes i Rosenbad den 12.3.2014.
|
Gå till https://regex101.com/#python
Klistra in texten från https://jensfinnas.github.io/refine-regex-tutorial/data/tweets.txt
- Hitta alla siffror
- Hitta alla Twitter-namn (@jensfinnas)
- Hitta alla hashtaggar (#XXXXX).
- Hitta alla url:ar (https://).
Se till att du inte har några aktiva facets. Klicka på anforande - anforandetext och välj Edit column > Add column based on this column. Applicera följande kod. Välj Jython som språk den här gången.
import re
return re.findall("([Ll]andsbygd)",value)
Vi har nu skapat en ny kolumn som innehåller ordet "landsbygd" eller "Landsbygd" om det ingick i anförandet. Vi kan nu applicera ett text facet på den här kolumnen och på partikolumnen för att se vilka partier som använder det här ordet mest.
Här är ett exempel på ett lite mera avancerat reguljärt uttryck.
import re
return re.findall("^(\S{3,4}) talman",value)[0]
Här söker vi efter
^
början på en rad\S{3,4}
tre eller fyra tecken som inte är mellanslag.talman
följt av mellanslag talman.()
anger att det är bara ordet inom parentesen som vi vill fånga in.
Med return re.findall("^(\S{3,4}) talman",value)[0]
returnerar vi den första träffen. Med return len(re.findall("^(\S{3,4}) talman",value))
returnerar vi alla träffar.
Vi kan också skriva mera avancerade sökningar. Här är till exempel en som loopar genom ett antal sökord (i det här fallet svordomar) och returnerar alla träffar, seprerade med kommatecken.
import re
matches = []
expressions = [" ([Ff]an) ", "([Jj]ävl)", "([Ss]atan)"]
for regex in expressions:
matches = matches + re.findall(regex,value)
return ",".join(matches)
Klicka på kolumnen anforande - dok_datum och välj sedan Edit column > Add column based on this column.
Applicera följande kod: value.toDate()
.
Vi kan nu filtrera på datum. Klicka på den nya kolumnen Datum (eller vad du valde att kalla den) och välj Facet > Timeline facet.
Klicka på anforande - parti och välj Facet > Text facet.
Vi kan nu välja att endast visa anföranden från ett visst parti från en viss tid.