Finden von Ngrammen in R und Vergleichen von Ngrammen über Korpora hinweg

Ich fange gerade mit dem TM-Paket in R an, bitte entschuldige mich für die große alte Textwand. Ich habe ein ziemlich großes Korpus sozialistischer / kommunistischer Propaganda erstellt und möchte neu geprägte politische Begriffe (mehrere Wörter, z. B. "Kampf-Kritik-Transformationsbewegung") extrahieren.

Dies ist eine zweistufige Frage, eine in Bezug auf meinen Code und eine in Bezug darauf, wie ich weitermachen soll.

Schritt 1: Zu diesem Zweck wollte ich zuerst einige gängige Ngramme identifizieren. Aber ich stecke schon sehr früh fest. Folgendes habe ich getan:

library(tm)
library(RWeka)

a  <-Corpus(DirSource("/mycorpora/1965"), readerControl = list(language="lat")) # that dir is full of txt files
summary(a)  
a <- tm_map(a, removeNumbers)
a <- tm_map(a, removePunctuation)
a <- tm_map(a , stripWhitespace)
a <- tm_map(a, tolower)
a <- tm_map(a, removeWords, stopwords("english")) 
a <- tm_map(a, stemDocument, language = "english") 
# everything works fine so far, so I start playing around with what I have
adtm <-DocumentTermMatrix(a) 
adtm <- removeSparseTerms(adtm, 0.75)

inspect(adtm) 

findFreqTerms(adtm, lowfreq=10) # find terms with a frequency higher than 10

findAssocs(adtm, "usa",.5) # just looking for some associations  
findAssocs(adtm, "china",.5)

# ... and so on, and so forth, all of this works fine

Der Korpus, den ich in R lade, funktioniert gut mit den meisten Funktionen, die ich darauf abstelle. Ich hatte keine Probleme damit, TDMs aus meinem Korpus zu erstellen, häufige Wörter, Assoziationen, Wortwolken usw. zu finden. Aber wenn ich versuche, Identifizierungs-Ngramme zu verwenden, benutze ich den in der Anleitung beschriebenen Ansatztm FAQIch mache anscheinend einen Fehler mit dem tdm-Konstruktor:

# Trigram

TrigramTokenizer <- function(x) NGramTokenizer(x, 
                                Weka_control(min = 3, max = 3))

tdm <- TermDocumentMatrix(a, control = list(tokenize = TrigramTokenizer))

inspect(tdm)

Ich erhalte folgende Fehlermeldung:

Error in rep(seq_along(x), sapply(tflist, length)) : 
invalid 'times' argument
In addition: Warning message:
In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'

Irgendwelche Ideen? Ist "a" nicht die richtige Klasse / das richtige Objekt? Ich bin verwirrt. Ich nehme an, dass hier ein grundlegender Fehler vorliegt, aber ich sehe es nicht. :(

Schritt 2: Dann würde ich gerne Ngramme identifizieren, die deutlich überrepräsentiert sind, wenn ich den Korpus mit anderen Korpusse vergleiche. Zum Beispiel könnte ich meinen Korpus mit einem großen englischen Standardkorpus vergleichen. Oder ich erstelle Untergruppen, die ich miteinander vergleichen kann (z. B. sowjetische oder chinesische kommunistische Terminologie). Haben Sie Vorschläge, wie ich das machen soll? Welche Skripte / Funktionen sollte ich mir ansehen? Nur ein paar Ideen oder Hinweise wären toll.

Danke für Ihre Geduld!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage