我开始使用 R 中的 tm 包,所以请多多包涵,并为文字的大墙道歉。我创建了一个相当大的社会主义/共产主义宣传语料库,并想提取新创造的政治术语(多个词,例如“斗争-批评-改造运动”)。
这是一个两步的问题,一个是关于我目前的代码,一个是关于我应该如何继续。
第 1 步:为此,我想首先识别一些常见的 ngram。但我很早就被卡住了。这是我一直在做的事情:
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
我加载到 R 中的语料库可以很好地与我扔给它的大多数功能一起使用。从我的语料库创建 TDM、查找常用词、关联、创建词云等,我没有遇到任何问题。但是,当我尝试使用tm FAQ中概述的方法来识别 ngram 时,我显然在 tdm-constructor 上犯了一些错误:
# Trigram
TrigramTokenizer <- function(x) NGramTokenizer(x,
Weka_control(min = 3, max = 3))
tdm <- TermDocumentMatrix(a, control = list(tokenize = TrigramTokenizer))
inspect(tdm)
我收到此错误消息:
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'
有任何想法吗?“a”不是正确的类/对象吗?我很困惑。我认为这里有一个根本性的错误,但我没有看到它。:(
第 2 步:然后,当我将语料库与其他语料库进行比较时,我想识别出显着过多的 ngram。例如,我可以将我的语料库与大型标准英语语料库进行比较。或者我创建可以相互比较的子集(例如苏联与中国共产党的术语)。你有什么建议我应该如何去做吗?我应该研究的任何脚本/功能?只是一些想法或指示会很棒。
谢谢你的耐心!