| Bokstavspar - frekvens | E-post |
|
För att lite grand knyta ihop påsen kring artiklarna Textbehandling och Graphviz - en fallstudie, tänkte jag avsluta med ett script som använder sig av kommandona awk, sed, tr, sort, head, uniq samt programmen dot, och eog. Det sistnämnda är 'Eye Of Gnome', en bildvisare. Vill du använda en annan så ändra variabeln 'IV' till det du vill ha. Här följer ett exempel på hur scriptet används. Rader som inleds med # är mina kommenter. Rader som inleds med $ är kommandon att skriva in i terminalen. Det förutsätts att bash-filen 'pairs' gjorts exekverbar (sudo chmod u+x pairs) och att katalogen där det ligger finns i $PATH. $ gedit ~/.bashrc Sedan läggs raden nedan till... export PATH=$PATH:$HOME/bin/ ...och filen sparas åter till ämnet...Nedan visas ett exempel på hur pairs används: # skapa pair-filen $ pairs -p strindberg_roda_rummet_kap1.vim >res.p # kolla frekvensen av bokstavspar där den andra bokstaven # utgör prefix till 'v' $ pairs -qp res.p v Resultatet blir detta:
# kolla frekvensen av bokstavspar där den andra bokstaven # utgör suffix till 'v' $ pairs -qs res.p v Och det ser ut såhär:
Scriptet i sin helhet nedan: #!/bin/bash # image viewer IV=eog function count() { CNT=`awk '{c+=$1} END {print c}' $PF` echo "digraph letter {" >dotfile.dot } function turnPng() { dot dotfile.dot -Tpng >dotfile.png echo "ok" $IV dotfile.png } case "$1" in "-p") TXT=$2 sed 's/[^a-zåäöA-ZÅÄÖ ]//g' ${TXT} | \ tr 'A-ZÅÄÖ' 'a-zåäö' | \ sed 's/\(.\)/\1\n\1/g' | sed '/\w\w/!d' | \ sort | uniq -c | sort -nr echo "ok" exit 0 ;; "-qp") PF=$2 LETTER=$3 count cat $PF | grep " .${LETTER}" | \ head -n 5 | \ awk '{printf("'${LETTER}' -> %s \ [label=\"%.1f\"]\n"),$2,100*($1/'${CNT}')}' >>\ dotfile.dot echo "}" >> dotfile.dot turnPng exit 0 ;; "-qs") PF=$2 LETTER=$3 count cat $PF | grep " ${LETTER}." | \ head -n 5 | \ awk '{printf("'${LETTER}' -> %s \ [label=\"%.1f\"]\n"),$2,100*($1/'${CNT}')}' >>\ dotfile.dot echo "}" >> dotfile.dot turnPng exit 0 ;; *) echo "unknown command" echo "-------------------------------" echo "# to build a pair-file" echo "pairs -p <textfile> > <p-file>" echp "" echo "# query letter prefix" echo "pairs -qp <p-file> <letter>" echo "" echo "# query letter suffix" echo "pairs -qs <p-file> <letter>" exit 0 ;; esac Jag hade ett tag problem med att få in variabeln $CNT i awk:s printf-sats. Den kunskap jag hämtade in iom detta problem är att strängar i bash kan brytas och återupptas - något jag inte kände till tidgare. EDIT:Ett litet tillägg: "-lp") PF=$2 LETTER=$3 cat $PF | grep ' .'${LETTER} exit 0 ;; "-ls") PF=$2 LETTER=$3 cat $PF | grep ' '${LETTER}'.' exit 0 ;;De nya kommandona används på följande sätt: # skapa pair-fil $ pairs -p strindberg.txt >pairs.p # visa graf över suffix till bokstaven 'f' $ pairs -qs pairs.p f # skapa letter-fil för suffix till bokstaven 'f' $ pairs -ls pairs.p >pairs_s.l # visa samma graf fast endast baserad på # förekomster av suffix till bokstaven 'f' (f.) $ pairs -qs pairs_s.l f Nu går det att se att 'fö' (36,0%) är mer än dubbelt så frekvent som 'fr'(17,2%), och att 'fa' har en frekvens av 9,0% bland bokstavspar i texten som inleds med 'f'. Läs mer om frekvensanalys av bokstäver
Kommentarer (1)
![]() Skriv kommentar
|
|||
| < Föregående | Nästa > |
|---|





