我正在训练一种简单的文本分类方法,对1,000个训练样本进行分类,并对未见的测试数据(约500,000次观察)进行预测。
当我只使用unigram时,脚本运行得很好。但是,我不知道如何使用control = list(dictionary=Terms(dtm_train_unigram)),因为我有两个独立的文档术语矩阵(一个用于unigram,一个用于bigram,参见下面):
UnigramTokenizer <- function(x) unlist(lapply(NLP::ngrams(words(x), 1), paste, collapse = " "), use.names = FALSE)
dtm_train_unigram <- DocumentTermMatrix(processed_dataset, control = list(tokenize = UnigramTokenizer, wordLengths=c(3,20), bounds = list(global = c(4,Inf))))
BigramTokenizer <- function(x) unlist(lapply(NLP::ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE)
dtm_train_bigram <- DocumentTermMatrix(processed_dataset, control = list(tokenize = BigramTokenizer, wordLengths=c(6,20), bounds = list(global = c(7,Inf))))为了确保测试集具有与培训集相同的术语,我使用以下函数:
corpus_test <- VCorpus(VectorSource(test_set))
dtm_test <- DocumentTermMatrix(corpus_test, control = list(dictionary=Terms(dtm_train_unigram), wordLengths = c(3,20)))如何将dtm_train_unigram和dtm_train_bigram的术语提供给dtm_test?
dtm_train_unigram和dtm_train_bigram之后,我是否可以将它们合并到一个dtm中(就像目前所做的那样)?谢谢!
发布于 2018-09-06 15:18:32
回答你的问题:
tm的正式文档说明了以下用于组合事物的内容。
将多个语料库合并为一个语料库,将多个文档合并成一个语料库,将多个术语文档矩阵合并成单个语料库,或者将多个词频向量组合成一个术语文档矩阵。
就你的情况而言,这就是1的答案:
my_dtms <- c(dtm_train_unigram, dtm_train_bigram)但这确实导致文件数量翻了一番,但事实并非如此。
因此,我们到了第2点,您可以从NLP包中创建一个令牌程序,该包处理的n-gram实例不止一个:
my_tokenizer <- function(x) unlist(lapply(NLP::ngrams(words(x), 1:2), paste, collapse = " "), use.names = FALSE)注意向量1:2 ngram函数。把这个改为1,2,3克,或2:3,仅仅2和3克。
https://stackoverflow.com/questions/52207021
复制相似问题