我目前很难找到与使用文本挖掘在R中创建句子词矩阵相关的任何内容。
我正在使用tm包,我唯一能找到的就是转换为tdm或dtm。
我只使用一个excel文件,我只对文本挖掘中的一列感兴趣。那一列中有大约1200行。我想创建一个行(句子) - 术语矩阵。我想创建一个矩阵,告诉我每行(句子)中单词的频率。
我想创建一个1和0的矩阵,我可以在以后运行PCA分析。
在我的情况下,dtm没有帮助,因为因为我只使用一个文件,所以行数是1,列是整个文档中单词的频率。
相反,如果有意义,我想将句子视为文件。从那里,我想要一个矩阵,每个句子中的单词频率。谢谢!
答案 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
来实现这一点。希望这有用!