标签: quanteda

Cholmod 错误“问题太大”到底意味着什么?将 dfm 转换为 df 时出现问题

这是发布的另一个问题的新版本,现在有一个可重现的示例。

我正在尝试将文档特征矩阵从 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)

memory r dfm dataframe quanteda

7
推荐指数
1
解决办法
2万
查看次数

R中的词干完成取代了名称,而不是数据

我的团队正在使用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)

r topic-modeling tm quanteda

6
推荐指数
1
解决办法
260
查看次数

在R中使用Quanteda时,从文本语料库中删除非ASCII字符的最佳方法是什么?

我迫切需要.我有一个语料库,我已经转换成一种共同的语言,但有些单词没有正确地转换成英语.因此,我的语料库有非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字符的最佳方法是什么?

nlp r corpus tm quanteda

5
推荐指数
1
解决办法
1996
查看次数

使用卡方检验在文档特征矩阵中进行特征选择

我正在使用自然语言处理进行短信挖掘.我用quantedapackage来生成文档特征矩阵(dfm).现在我想使用卡方检验进行特征选择.我知道已经有很多人问过这个问题了.但是,我找不到相关的代码.(答案只是提供了一个简短的概念,如下所示:https://stats.stackexchange.com/questions/93101/how-can-i-perform-a-chi-square-test-to-do-feature-selection- in-r)

我了解到我可以chi.squaredFSelector包中使用,但我不知道如何将此函数应用于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)

r text-mining feature-selection quanteda fselector

5
推荐指数
1
解决办法
1555
查看次数

R:从 Quanteda DFM、稀疏文档特征矩阵、对象中删除正则表达式?

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)

regex r matrix sparse-matrix quanteda

5
推荐指数
1
解决办法
423
查看次数

Quanteda:如何删除我自己的单词列表

由于在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 text-mining quanteda

5
推荐指数
1
解决办法
3145
查看次数

读取txt中文时出错:corpus()仅适用于字符、语料库、语料库、data.frame、kwic对象

我尝试使用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 corpus text-mining stringr quanteda

5
推荐指数
1
解决办法
811
查看次数

在R中通过三卦产生所有单词unigrams

我试图通过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)

text-processing r tm rweka quanteda

4
推荐指数
1
解决办法
5379
查看次数

将Quanteda包中的dfmSparse转换为R中的数据帧或数据表

我有一个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)

nlp r dataframe data.table quanteda

4
推荐指数
1
解决办法
2220
查看次数

Quanteda的朴素贝叶斯与插入符号:结果截然不同

我正在尝试使用这些包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)

r supervised-learning text-classification r-caret quanteda

4
推荐指数
1
解决办法
289
查看次数