www.mamboteam.com
aptitude : me and my debian - a work in progress  
Startsida
2008-09-05
 
 
Huvudmeny
Startsida
debian
bash
Forum
Användarmeny
tidigare material
nyheter
grafik
BadVista
Logga in





Glömt ditt lösenord?
graphviz - en fallstudie  E-post

ImageEtt snyggt släktträd över Bamse-ätten eller förbindelsen mellan ord i romanen 'To kill a mockingbird' kan man fixa med graphviz. För att åstadkomma det förstnämnda är allt som krävs att man installerar 'graphviz' (sudo apt-get install graphviz); klistrar in koden nedan i en fil och döper den till bamse.dot

 
digraph bamse {
{AnnaCilla Amadeus HilmaJohanna AugustaBeata JohanHilmer Maivor}
Brumhilda -> Maivor
{Okänd1 Grizzly Okänd2 Viktoria Hebbe Brummenlufs Lisen}
AnnaCilla -> Okänd1
AnnaCilla -> Grizzly
AnnaCilla -> Okänd2
AnnaCilla -> Viktoria
AugustaBeata -> Hebbe
JohanHilmer -> Hebbe
Maivor -> Lisen
{Texas Bamse Brummelisa}
Okänd1 -> Texas
Viktoria -> Bamse
Hebbe -> Bamse
Brummenlufs -> Brummelisa
Lisen -> Brummelisa
{Snarkbjörn Brum Teddy NalleMaja Brumma}
Texas -> Snarkbjörn
Bamse -> Brum
Bamse -> Teddy
Bamse -> NalleMaja
Bamse -> Brumma
Brumelisa -> Brum
Brumelisa -> Teddy
Brumelisa -> NalleMaja
Brumelisa -> Brumma
}

För att bygga en PNG-fil av DOT-filen öppnar man en terminal; går till den katalog där dot-filen ligger och skriver:

$ dot bamse.dot -Tpng >bamse.png

Öppna PNG-filen i din favorit-bildgranskare.

Ett intressantare experiment

Jag har 'To kill a mockingbird' som textfil. Det vore

  1. intressant att studera ordpar
  2. få det grafiskt

Sagt och gjort! Först använde jag 'sed' för att rensa allt utom bokstäver - läs Textbehandling för mer information om det.
Nu behöver jag omvandla texten till ett format där jag räkna orddubletter. Exempel:

Här ska räknas dubletter
 
blir till:
 
Här ska
ska räknas
räknas dubletter

Så jag öppnar filen i vim och utför följande kommandon (de som inleds med '#' är mina kommentarer)

 
# dubblerar vartannat ord
:%s/\(\w*\) \(w*\)/\1 \2 \2/g
 
# inför radbrytning efter vartannat ord
:%s/\(w*\) \(\w*\) \(\w*\)/\1 \2\r\3/g
 
# raderar ensamma ord
:%s/^\w*$//g
 
# raderade tomma rader
:g/^$/d
 
# sparar och avslutar
:wq

Sedan är det dags att sortera listan och räkna dubletter...

 
sort mockingbird.txt | uniq -c | sort -nr >word_pairs.dot

Sedan måste filen få det format som 'graphviz' vill ha.
Exempel:

 
digraph ord_dubletter{
ord1 -> ord2
}

Det handlar bara om att byta ut mellanslag mellan ord mot ' -> ' och omsluta rasket med 'digrap orddubletter {' och '}'.

Att skapa en graf över förbindelsen mellan alla ord i romanen gjorde att min dator rapporterade 'out of memory', så jag nöjde mig med de 250 vanligaste (första). Well, sedan är det bara att skapa PNG-bilden: dot word_pairs.dot -Tpng >mockingbird.png

Resultatet finns att beskåda här.

Ytterligare ett exempel

Vilka tal är jämnt delbara med vilka mellan 2-20? Hur ser det ut grafiskt?

delare.dot

digraph delare {
4-> 2
6-> {2 3}
8-> {2 4}
9-> 3
10-> {2 5}
12-> {2 3 4 6}
14-> {2 7}
15-> {3 5}
16-> {2 4 8}
18-> {2 3 6 9}
20-> {2 4 5 10}
}

(primtal, samt delbarhet med sig själv borttaget)

Titta på PNG-filen.

Läs mer om graphviz
 
Kommentarer (0)Add Comment

Skriv kommentar

busy
 
< Föregående   Nästa >
 
Top! Top!