2015-07-18 51 views
0

在检查用(Twitter的数据)tmTermDocumentMatrix创建一个术语文档矩阵,我发现很多话是什么样的:如何从四重字母的单词清理语料库?

aaa         0 
    aaaa        0 
    aaaaaand       0 
    aaaagggghhhh      0 
    aaas        0 
    aaawww        1 

removeWords, stopwords预处理,但我也想去掉单词重复四次或更多次。我如何在tm_map中做到这一点?

+0

只是一个想法,但不是删除的话,你可能只是删除多余的字母 - 这样你就不会丢弃数据。任何重复的更多3次以上可以删除多余的字母。棘手的部分是决定你是否应该保持2或1,但并不是每个英文字母都有一个双字母。你知道吗? – justanotherbrain

+0

嗯,当然,但我认为目前我只想删除“奇怪”的单词,看看模型的结局。我怎样才能做到这一点? – TMOTTM

+0

在r,我真的不能帮助。我花了我所有的时间与C/C++和Python。尽管我不认为这应该太难。您可以扫描文档中的三联字母并删除单词。有人可以纠正我,但我不认为你能比线性时间复杂性好得多。 – justanotherbrain

回答

0

您只想选择与正则表达式匹配的术语,并相应地为TermDocumentMatrix对象设置子集。所以,你的例子:

require(tm) 
txt <- "aaa aaaa aaaaaand aaaagggghhhh aaas aaawww" 
tdm <- TermDocumentMatrix(VCorpus(VectorSource(txt))) 
as.matrix(tdm[grep("(\\w)\\1{3,}", Terms(tdm)), ]) 
##    Docs 
## Terms   1 
## aaaa   1 
## aaaaaand  1 
## aaaagggghhhh 1 

在正则表达式,\\1是“逆向引用”,指的是什么括号(\\w)之间表达\\w,它代表所有文字字符抓获。 (注意:你的问题说有任何两个字母但是如果你的意思是任何两个字符,只需要替换(.)。){3,}要求三个或更多与反向引用组中捕获的字符相同。结果:正则表达式匹配包含重复四次或更多次的相同字母的任何术语。

注意:这里使用as.matrix()只是为了在控制台上显示对象,以便我们可以看到剩下的术语。

相关问题