文本挖掘:获得句子矩阵

时间:2017-10-23 17:38:24

标签: r text-mining

我目前很难找到与使用文本挖掘在R中创建句子词矩阵相关的任何内容。

我正在使用tm包,我唯一能找到的就是转换为tdm或dtm。

我只使用一个excel文件,我只对文本挖掘中的一列感兴趣。那一列中有大约1200行。我想创建一个行(句子) - 术语矩阵。我想创建一个矩阵,告诉我每行(句子)中单词的频率。

我想创建一个1和0的矩阵,我可以在以后运行PCA分析。

在我的情况下,dtm没有帮助,因为因为我只使用一个文件,所以行数是1,列是整个文档中单词的频率。

相反,如果有意义,我想将句子视为文件。从那里,我想要一个矩阵,每个句子中的单词频率。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用text2vec时,您只需将列的内容作为字符向量提供给tokenizer函数 - 请参阅下面的示例。

关于您的下游分析,我不建议在计数数据/整数值上运行PCA,PCA不是针对此类数据设计的。您应该在dtm上应用标准化,tfidf权重等,以便在将其提供给PCA之前将其转换为连续数据,或者以其他方式应用对应分析。

library(text2vex)

docs <- c("the coffee is warm",
          "the coffee is cold",
          "the coffee is hot",
          "the coffee is warm",
          "the coffee is hot",
          "the coffee is perfect")


#Generate document term matrix with text2vec    
tokens = docs %>%
  word_tokenizer()

it = itoken(tokens
            ,ids = paste0("sent_", 1:length(docs))
            ,progressbar = FALSE)

vocab = create_vocabulary(it)

vectorizer = vocab_vectorizer(vocab)

dtm = create_dtm(it, vectorizer, type = "dgTMatrix")

答案 1 :(得分:-1)

无法添加评论,所以这里有一个建议:

# Read Data from file using fread (for .csv from data.table package) 
dat <- fread(filename, <add parameters as needed - col.namess, nrow etc>)
counts <- sapply(row_start:row_end, function(z) str_count(dat[z,.(selected_col_name)],"the"))

这将为您在所选行感兴趣的列中显示所有“the”。如果它适用于所有行,您也可以使用apply。或其他嵌套函数用于不同的变体。请记住,您需要检查低位/大写字母 - 您可以使用tolower来实现这一点。希望这有用!