这是发布的另一个问题的新版本,现在有一个可重现的示例。
我正在尝试将文档特征矩阵从 29117 条推文转换为 R 中的数据帧,但出现错误
“asMethod(object) 中的错误:Cholmod 错误‘问题太大’位于文件 ../Core/cholmod_dense.c,第 105 行”
dfm 的大小约为 21MB,有 29117 行和 78294 个特征(推文中的单词按列分为 1 或 0,具体取决于该单词是否出现在推文中)
##generel info;
memory.size(max=TRUE)
# [1] 11418.75
sessionInfo()
# R version 3.6.1 (2019-07-05)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 10 x64 (build 18362)
##install packages, load librarys
# install.packages(c("quanteda", "devtools"))
# devtools::install_github("quanteda/quanteda.corpora")
library("quanteda")
library(RJSONIO)
library(data.table)
library(jsonlite)
library(dplyr)
library(glmnet)
##load data, convert to a dataframe, convert to a dfm
baseurl <- "https://raw.githubusercontent.com/alexlitel/congresstweets/master/data/"
d0 <- fromJSON(paste0(baseurl, "2019-10-07.json"), flatten = …Run Code Online (Sandbox Code Playgroud) 我的团队正在使用R中的Quanteda软件包对中等大小的文本(成千上万个单词)进行一些主题建模.我想在主题建模过程之前将单词缩减为单词词干,这样我就是不计算不同主题的同一个词的变化.
唯一的问题是词干算法留下了一些不是真正单词的词."幸福"源于"幸福","安排"源于"阿朗",等等.所以,在我想象主题建模的结果之前,我想恢复词干以完成单词.
通过阅读StackOverflow上的一些先前的线程,我从TM包中找到了一个函数stemCompletion(),它至少可以实现这一点.它似乎工作得相当好.
但是当我将它应用于文档文本矩阵中的术语向量时,stemCompletion()总是替换字符向量的名称,而不是字符本身.这是一个可重复的例子:
# Set up libraries
library(janeaustenr)
library(quanteda)
library(tm)
# Get first 200 words of Mansfield Park
words <- head(mansfieldpark, 200)
# Build a corpus from words
corpus <- quanteda::corpus(words)
# Eliminate some words from counting process
STOPWORDS <- c("the", "and", "a", "an")
# Create a document text matrix and do topic modeling
dtm <- corpus %>%
quanteda::dfm(remove_punct = TRUE,
remove = STOPWORDS) %>%
quanteda::dfm_wordstem(.) %>% # Word stemming takes place here
quanteda::convert("topicmodels")
# Word stems …Run Code Online (Sandbox Code Playgroud) 我迫切需要.我有一个语料库,我已经转换成一种共同的语言,但有些单词没有正确地转换成英语.因此,我的语料库有非ASCII字符,例如"(U + 00F8)".
我正在使用Quanteda并使用以下代码导入了我的文本:
EUCorpus <- corpus(textfile(file="/Users/RiohBurke/Documents/RStudio/PROJECT/*.txt"), encodingFrom = "UTF-8-BOM")
Run Code Online (Sandbox Code Playgroud)
我的语料库由166个文档组成.以这种方式将文档导入R中,对于我摆脱这些非ASCII字符的最佳方法是什么?
我正在使用自然语言处理进行短信挖掘.我用quantedapackage来生成文档特征矩阵(dfm).现在我想使用卡方检验进行特征选择.我知道已经有很多人问过这个问题了.但是,我找不到相关的代码.(答案只是提供了一个简短的概念,如下所示:https://stats.stackexchange.com/questions/93101/how-can-i-perform-a-chi-square-test-to-do-feature-selection- in-r)
我了解到我可以chi.squared在FSelector包中使用,但我不知道如何将此函数应用于dfm类对象(trainingtfidf如下).(在手册中显示,它适用于预测变量)
谁能给我一个提示?我很感激!
示例代码:
description <- c("From month 2 the AST and total bilirubine were not measured.", "16:OTHER - COMMENT REQUIRED IN COMMENT COLUMN;07/02/2004/GENOTYPING;SF- genotyping consent not offered until T4.", "M6 is 13 days out of the visit window")
code <- c(4,3,6)
example <- data.frame(description, code)
library(quanteda)
trainingcorpus <- corpus(example$description)
trainingdfm <- dfm(trainingcorpus, verbose = TRUE, stem=TRUE, toLower=TRUE, removePunct= TRUE, removeSeparators=TRUE, language="english", ignoredFeatures = stopwords("english"), removeNumbers=TRUE, ngrams …Run Code Online (Sandbox Code Playgroud) Quanteda 包提供了稀疏文档特征矩阵 DFM,其方法包含removeFeatures。我试图dfm(x, removeFeatures="\\b[a-z]{1-3}\\b")删除太短的单词以及dfm(x, keptFeatures="\\b[a-z]{4-99}\\b")保留足够长的单词但不起作用,基本上做同样的事情,即删除太短的单词。
如何从 Quanteda DFM 对象中删除正则表达式匹配?
例子。
myMatrix <-dfm(myData, ignoredFeatures = stopwords("english"),
stem = TRUE, toLower = TRUE, removeNumbers = TRUE,
removePunct = TRUE, removeSeparators = TRUE, language = "english")
#
#How to use keptFeatures/removeFeatures here?
#Instead of RemoveFeatures/keptFeatures methods, I tried it like this but not working
x<-unique(gsub("\\b[a-zA-Z0-9]{1,3}\\b", "", colnames(myMatrix)));
x<-x[x!=""];
mmyMatrix<-myMatrix;
colnames(mmyMatrix) <- x
Run Code Online (Sandbox Code Playgroud)
样本 DFM
myData <- c("a aothu oat hoah huh huh huhhh h h h n", …Run Code Online (Sandbox Code Playgroud) 由于在quanteda中没有现成的波兰语停用词,我想使用自己的列表.我把它作为一个由空格分隔的列表在文本文件中.如果需要,我还可以准备一个由新行分隔的列表.
如何从语料库中删除自定义的长字停用词列表?堵塞之后怎么办?
我尝试过创建各种格式,转换为字符串向量
stopwordsPL <- as.character(readtext("polish.stopwords.txt",encoding = "UTF-8"))
stopwordsPL <- read.txt("polish.stopwords.txt",encoding = "UTF-8",stringsAsFactors = F))
stopwordsPL <- dictionary(stopwordsPL)
Run Code Online (Sandbox Code Playgroud)
我也尝试在语法中使用这样的单词向量
myStemMat <-
dfm(
mycorpus,
remove = as.vector(stopwordsPL),
stem = FALSE,
remove_punct = TRUE,
ngrams=c(1,3)
)
dfm_trim(myStemMat, sparsity = stopwordsPL)
Run Code Online (Sandbox Code Playgroud)
要么
myStemMat <- dfm_remove(myStemMat,features = as.data.frame(stopwordsPL))
Run Code Online (Sandbox Code Playgroud)
什么都行不通.我的词汇出现在语料库和分析中.应用自定义停用词的正确方法/语法应该是什么?
我尝试使用R、jiebaR和语料库生成一个词云并获取中文语音的词频,但无法制作语料库。这是我的代码:
library(jiebaR)
library(stringr)
library(corpus)
cutter <- worker()
v36 <- readLines('v36.txt', encoding = 'UTF-8')
seg_x <- function(x) {str_c(cutter[x], collapse = '')}
x.out <- sapply(v36, seg_x, USE.NAMES = FALSE)
v36.seg <- x.out
v36.seg
library(quanteda)
corpus <- corpus(v36.seg) #Error begins here.
summary(corpus, showmeta = TRUE, 1)
texts(corpus)[1]
tokens(corpus, what = 'fasterword')[1]
tokens <- tokens(v36.seg, what = 'fasterword')
dfm <- dfm(tokens)
dfm
Run Code Online (Sandbox Code Playgroud)
我的文本文件包含以下段落:
当我创建语料库时出现错误。R 返回:
Error in corpus.default(v36.seg) :
corpus() only works on character, corpus, Corpus, data.frame, kwic objects.
Run Code Online (Sandbox Code Playgroud)
我不明白为什么文本有问题。如果您能帮我解决问题,我将不胜感激。谢谢。
我试图通过R中的三元组生成所有unigrams的列表,最终制作一个包含所有单个单词,bigrams和trigrams的列的文档短语矩阵.
我希望找到一个简单的包装,但没有成功.我最终得到了RWeka,下面的代码和输出,但不幸的是,这种方法会丢弃所有2或1个字符的unigrams.
这可以修复,还是人们知道另一条路?谢谢!
TrigramTokenizer <- function(x) NGramTokenizer(x,
Weka_control(min = 1, max = 3))
Text = c( "Ab Hello world","Hello ab", "ab" )
tt = Corpus(VectorSource(Text))
tdm <- TermDocumentMatrix( tt,
control = list(tokenize = TrigramTokenizer))
inspect(tdm)
# <<TermDocumentMatrix (terms: 6, documents: 3)>>
# Non-/sparse entries: 7/11
# Sparsity : 61%
# Maximal term length: 14
# Weighting : term frequency (tf)
# Docs
# Terms 1 2 3
# ab hello 1 0 0
# ab hello world 1 0 0 …Run Code Online (Sandbox Code Playgroud) 我有一个dfmSparse对象(大,2.1GB),它被标记化并使用ngrams(unigrams,bigrams,trigrams和fourgrams),我想将它转换为数据框或数据表对象的列:内容和频率.
我试图取消列出......但没有奏效.我是NLP的新手,我不知道使用的方法,我没有想法,也没有在这里或谷歌找到解决方案.
有关数据的一些信息:
>str(tokfreq)
Formal class 'dfmSparse' [package "quanteda"] with 11 slots
..@ settings :List of 1
.. ..$ : NULL
..@ weighting : chr "frequency"
..@ smooth : num 0
..@ ngrams : int [1:4] 1 2 3 4
..@ concatenator: chr "_"
..@ Dim : int [1:2] 167500 19765478
..@ Dimnames :List of 2
.. ..$ docs : chr [1:167500] "character(0).content" "character(0).content" "character(0).content" "character(0).content" ...
.. ..$ features: chr [1:19765478] "add" "lime" "juice" "tequila" ...
..@ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用这些包quanteda,caret并根据经过训练的样本对文本进行分类.作为试运行,我想比较的内置的朴素贝叶斯分类器quanteda与的那些caret.但是,我似乎caret无法正常工作.
这是一些复制代码.首先是quanteda侧面:
library(quanteda)
library(quanteda.corpora)
library(caret)
corp <- data_corpus_movies
set.seed(300)
id_train <- sample(docnames(corp), size = 1500, replace = FALSE)
# get training set
training_dfm <- corpus_subset(corp, docnames(corp) %in% id_train) %>%
dfm(stem = TRUE)
# get test set (documents not in id_train, make features equal)
test_dfm <- corpus_subset(corp, !docnames(corp) %in% id_train) %>%
dfm(stem = TRUE) %>%
dfm_select(pattern = training_dfm,
selection = "keep")
# train model on sentiment
nb_quanteda <- textmodel_nb(training_dfm, …Run Code Online (Sandbox Code Playgroud)