我正在学习如何使用R中的tm包,因此请耐心等待,对于这篇大段文字,我很抱歉。我已经创建了一个相当大的社会主义/共产主义宣传语料库,并希望提取新的政治术语(多个词,例如“斗争-批判-改造运动”)。
这是一个两步问题,一个涉及我的代码到目前为止,另一个涉及我接下来该怎么做。
第一步:为了实现这一点,我想首先识别一些常见的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构造器方面犯了一些错误:
# 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。例如,我可以将我的语料库与一个大型标准英语语料库进行比较,或者我可以创建子集并将它们相互比较(例如苏联与中国共产党的术语)。您有任何建议如何完成此操作吗?我应该查找哪些脚本/函数?只是一些思路或指针就很好了。
感谢您的耐心!
matrix <- create_matrix(corpus,ngramLength=3)
。 - Markus Doptions(mc.cores=1)
- marbel