2017-07-26 58 views
0

我正在尝试创建语料库,但是我希望在文档中组合2个连续单词,我不想要单个单词的语料库。通过在r中组合词语创建语料库

我正在使用下面的脚本。有没有一种方法可以创建语料库“文档”,这将在每个文档中包含合并的2个连续词汇?请指教。

library(plyr) 
library(tm) 
library(e1071) 

setwd("C:/Assignment/Assignment-Group-Prediction/IPM") 

training<- read.csv("Data.csv",header=T,na.strings=c("")) 

Res_Desc_Train <- subset(training,select=c("Group","Description")) 

##Step 1 : Create Document Matrix 

docs <- Corpus(VectorSource(Res_Desc_Train$Description)) 
docs <-tm_map(docs,content_transformer(tolower)) 

#remove potentially problematic symbols 
toSpace <- content_transformer(function(x, pattern) { return (gsub(pattern, " ", x))}) 
removeSpecialChars <- function(x) gsub("[^a-zA-Z0-9 ]","",x) 
docs <- tm_map(docs, toSpace, "/") 
docs <- tm_map(docs, toSpace, "-") 
docs <- tm_map(docs, toSpace, ":") 
docs <- tm_map(docs, toSpace, ";") 
docs <- tm_map(docs, toSpace, "@") 
docs <- tm_map(docs, toSpace, "\\(") 
docs <- tm_map(docs, toSpace, ")") 
docs <- tm_map(docs, toSpace, ",") 
docs <- tm_map(docs, toSpace, "_") 
docs <- tm_map(docs, content_transformer(removeSpecialChars)) 
docs <- tm_map(docs, content_transformer(tolower)) 
docs <- tm_map(docs, removeWords, stopwords("en")) 
docs <- tm_map(docs, removePunctuation) 
docs <- tm_map(docs, stripWhitespace) 
docs <- tm_map(docs, removeNumbers) 
+0

您可能还希望尝试tidytext包,这是更容易比TM封装(恕我直言)工作,并具有二元特征。 – lawyeR

回答

1

的的tmFAQ回答您的问题直接:

我可以使用双字母组,而不是单个令牌的一个术语文档矩阵?

是的。包NLP提供了计算可用于构造相应标记器的n元组的功能。例如: -

library("tm") 
data("crude") 

BigramTokenizer <- 
function(x) 
    unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE) 

tdm <- TermDocumentMatrix(crude, control = list(tokenize = BigramTokenizer)) 
inspect(removeSparseTerms(tdm[, 1:10], 0.7)) 
+0

非常感谢您的帮助。是的,我能够使用您建议的bigram tokenizer soutions来生成语料库。 – user3734568

+0

我很高兴它的工作原理。不要忘记标记答案是正确的! –

相关问题