Skip to content
Tutorial: Regular Expressions i Open Refine
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
images
README.md
merge-xml-files.py

README.md

Korl-url till den här sidan: http://bit.ly/regexp-tutorial

Data: Samtliga anföranden i riksdagen, september 2013-mars 2014

Skript för att slå ihop XML-filer: https://github.com/jensfinnas/refine-regex-tutorial/blob/master/merge-xml-files.py

Open Refine

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:

  1. Välj vilken dela av datan du vill jobba med genom att applicera ett facet (filter).
  2. Applicera en funktion (ofta genom att klicka på en kolumnrubrik och välj Edit column).

Importera data

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.

Exportera till Excel

Välj Export > Excel. Öppna den fil som laddas ner.

Export

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

Export

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.

Export

Reguljära uttryck

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.

Steg 1: Definiera tecknet

^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.
\sMellanslag
\SIcke-mellanslag
\dSiffra
\DIcke-siffra

Definiera antal tecken

*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: http://www.tutorialspoint.com/python/python_reg_expressions.htm

Exempel

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.
		<code>– Jag är mycket nöjd över våra samtal, säger Bildt.</code>
	</td>
</tr>
<tr>
	<td>Sök partiförkortningar</td>
	<td><code>\([A-Ö]{1,2}\)</code></td>
	<td>
		Carl Bildt, 64, <code>(M)</code>, Fredrik Reinfeldt, 48, <code>(M)</code> och Annie Lööf, 30, <code>(C)</code> möttes i Rosenbad den 12.3.2014.
	</td>
</tr>

Övning:

Regex101 Gå till http://regex101.com/#python

Klistra in texten från http://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 (http://).

Reguljära uttryck i Open Refine

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.

Skriv regex

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.

Partifilter

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

  1. ^ början på en rad
  2. \S{3,4} tre eller fyra tecken som inte är mellanslag.
  3. talman följt av mellanslag talman.
  4. () 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)

Formatera datum korrekt

Klicka på kolumnen anforande - dok_datum och välj sedan Edit column > Add column based on this column. Formatera datum korrekt

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. Filtrera på datum

Filtrera på ett parti eller annan kategori

Klicka på anforande - parti och välj Facet > Text facet. Filtrera på parti

Vi kan nu välja att endast visa anföranden från ett visst parti från en viss tid.

You can’t perform that action at this time.