Anmelden Registrieren

Badges

Follow Peter Bouda on Google Plus

Feeds

Neueste BlogeinträgeBlog

Korpus nach Informanten zerteilen mit R

Bearbeitet am Mittwoch, 16. März 2011, 11:39 Uhr von pbouda

Wenn man von “normalen” Skriptsprachen wie Perl und Python zur “Statistikerskriptsprache R”"http://www.r-project.org/ kommt, dann steht man häufig vor einfachen Problemen wie der Ochs vorm Berg. Hat man aber erst einmal eine Lösung gefunden, dann überrascht einen doch immer wieder die Mächtigkeit von R.

Mein Problem war Folgendes: Für einen korpuslinguistischen Verteilungstest brauchte ich zwei Datenstrukturen. Zum ersten das Korpus als Vektor mit seinen Tokens; zum zweiten einen Vektor mit Zahlen, die jeweils die Größe der einzelnen “Stücke” des Korpus bestimmten sollten. Über diese Stücke wurde dann der Verteilungstest ausgeführt, um zu bestimmen, wie “gut” (oder “schlecht”) ein Token in den einzelnen Korpusteilen verteilt ist. Da ich einen Korpus für gesprochene Sprache hatte, wollte ich natürlich das Korpus in die entsprechenden Stücke der Informanten zerteilen und jeweils die Anzahl der Tokens für jeden Informant in den zweiten Vektor schreiben.

Das Korpus war zunächst ein “data frame” mit folgendem Aufbau:

> head(data)
TOKEN INFORMANT GENDER AGE EDUCATION
0                       o     C11-3      M  53         A
1                    nome     C11-3      M  53         A
2                       ?     C11-3      M  53         A
3 asdrúbal da silva david     C11-3      M  53         A
4              cinquenta      C11-3      M  53         A
5                      e      C11-3      M  53         A

Ich hatte also schon einmal zwei Spalten für die Tokens und die Informanten. Damit ergibt sich der erste Vektor für meinen Verteilungstest, das gesamte Korpus, schon einmal folgendermaßen:

> corpus = data$TOKEN
> head(corpus)
[1] o                       nome                    ?                      
[4] asdrúbal da silva david cinquenta               e                      
11381 Levels: ? / . # a a/ à a=acabar a=adélia a=admissão a aparecer ... < 

Die Anzahl der Tokens pro Informant kann man auch recht schnell zählen, man macht einfach eine Tabelle über die Informanten:

>head(table(data$INFORMANT))

C11-1 C11-2 C11-3 C11-4 C11-6 C11-7 
7520  8054  6328  4158  6053  4886 

Mein Hauptproblem war nun, einen zweiten Vektor zu bekommen mit der Zahl der Tokens pro Informant, und zwar genau in der Reihenfolge, in der die Informanten auch im Korpus abgebildet sind. Nach etwas rumprobieren ergab sich folgende Lösung:

> corpus.part.sizes<-as.vector(table(data$INFORMANT)[unique(data$INFORMANT)])
> head(corpus.part.sizes)
[1]  6328  7520  6053  8054  4158 10647

Es gibt wahrscheinlich elegantere Lösungen, aber für mich tuts, und stolz das hinbekommen zu haben bin ich auch bisserl. Vor vier Wochen noch habe ich solch Korpusbearbeitung mit Python gemacht, und erst hinterher mit R die statistische Auswertung. Aber R macht das schon einen Tick eleganter.