首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将一个大的标记化的dfm转换成R中的矩阵?

如何将一个大的标记化的dfm转换成R中的矩阵?
EN

Stack Overflow用户
提问于 2020-08-05 07:18:46
回答 1查看 301关注 0票数 0

我有一个维度为2656242 x 630566的大标记dfm。我想把它转换成矩阵,但是对它的任何操作都会给出以下错误

asMethod(object)中的错误:文件./Core/ Cholmod _dense.c中的cholmod错误“问题太大”,第105行

到目前为止,我的代码如下:

代码语言:javascript
复制
Booker_PreSale = Samp2 %>% filter(Booking_Status=="Booker" & Pre_Post_Sale=="Pre-Sale")
Non_Booker_PreSale = Samp2 %>% filter(Booking_Status=="Non-Booker" & Pre_Post_Sale=="Pre-Sale")
data = rbind(Booker_PreSale,Non_Booker_PreSale)
data = data[,c(5,2)]
data = na.omit(data)
data$Booking_Status = as.factor(data$Booking_Status)
data$TextLength = nchar(as.character(data$comments))
    
library(caret)
set.seed(32984)
indexes = createDataPartition(data$Booking_Status,times = 1,
                              p=0.7,list = FALSE)

train = data[indexes,]
test = data[-indexes,]

library(quanteda)

train_tokens = tokens(as.character(train$comments), what = "word", 
                      remove_numbers = TRUE, remove_punct = TRUE,
                      remove_symbols = TRUE, remove_hyphens = TRUE)

train_tokens = tokens_tolower(train_tokens)
train_tokens = tokens_select(train_tokens, stopwords(), 
                              selection = "remove")

train_tokens = tokens_wordstem(train_tokens, language = "english")

train_tokens_dfm = dfm(train_tokens, tolower = FALSE)
train_tokens_matrix = as.matrix(train_tokens_dfm[,c(1:500)])

我不能再继续下去了。想办法解决这个问题需要一些帮助。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-08-05 08:32:58

看起来你的dfm太大了。因此,首先问问自己是否真的需要将dfm对象转换为矩阵。如果您想要拟合一个以您的标记化文档作为输入的模型(例如,一个主题模型),您很可能不需要将dfm对象转换为一个矩阵!

如果不显式地需要矩阵,我建议首先将dfm对象转换为非quanteda格式;这可以使用

non_dfm <- quanteda::convert(train_tokens_dfm)

然后,可以使用dfm_list<-non_dfm$vocab将dfm内容提取为列表列表。每个list元素与一个文档相关联,包含两行:第一行给出令牌的索引,第二行是该标记在文档中出现的次数。因此,您的信息与文档功能矩阵中包含的信息完全相同。

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

https://stackoverflow.com/questions/63260215

复制
相关文章

相似问题

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