首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何应用培训文档中的术语--术语矩阵( dtm ) --测试dtm(既包括unigram,也包括bigram)?

如何应用培训文档中的术语--术语矩阵( dtm ) --测试dtm(既包括unigram,也包括bigram)?
EN

Stack Overflow用户
提问于 2018-09-06 15:00:26
回答 1查看 411关注 0票数 0

我正在训练一种简单的文本分类方法,对1,000个训练样本进行分类,并对未见的测试数据(约500,000次观察)进行预测。

当我只使用unigram时,脚本运行得很好。但是,我不知道如何使用control = list(dictionary=Terms(dtm_train_unigram)),因为我有两个独立的文档术语矩阵(一个用于unigram,一个用于bigram,参见下面):

代码语言:javascript
复制
  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))))

为了确保测试集具有与培训集相同的术语,我使用以下函数:

代码语言:javascript
复制
corpus_test <- VCorpus(VectorSource(test_set))
dtm_test <- DocumentTermMatrix(corpus_test, control = list(dictionary=Terms(dtm_train_unigram), wordLengths = c(3,20)))

如何将dtm_train_unigramdtm_train_bigram的术语提供给dtm_test?

  1. 在分别创建dtm_train_unigramdtm_train_bigram之后,我是否可以将它们合并到一个dtm中(就像目前所做的那样)?
  2. 我是否可以简化我的两步托卡器函数,以便我只创建一个具有单位图和二进制图的dtm?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-06 15:18:32

回答你的问题:

tm的正式文档说明了以下用于组合事物的内容。

将多个语料库合并为一个语料库,将多个文档合并成一个语料库,将多个术语文档矩阵合并成单个语料库,或者将多个词频向量组合成一个术语文档矩阵。

就你的情况而言,这就是1的答案:

代码语言:javascript
复制
my_dtms <- c(dtm_train_unigram, dtm_train_bigram)

但这确实导致文件数量翻了一番,但事实并非如此。

因此,我们到了第2点,您可以从NLP包中创建一个令牌程序,该包处理的n-gram实例不止一个:

代码语言:javascript
复制
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克。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52207021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档