首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R:在阅读文本中使用quanteda语料库有困难

R:在阅读文本中使用quanteda语料库有困难
EN

Stack Overflow用户
提问于 2017-10-10 07:56:54
回答 2查看 3K关注 0票数 1

在阅读了我的语料库后,在使用不同的后续语句时,我得到了相同的错误:

UseMethod中的错误(“文本”):对于“c(语料库_帧,‘data.frame’)”类的对象,没有适用的“文本”方法。

例如,当使用这个简单的语句:texts(mycorpus)[2]时,我的实际目标是创建一个dfm (它提供了与上面相同的错误消息)。

我阅读语料库时有这样的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`mycorpus < corpus_frame(readtext("C:/Users/renswilderom/Documents/Stuff Im 
working on at the moment/Newspaper articles DJ/test data/*.txt", 
docvarsfrom="filenames", dvsep="_", docvarnames=c("Date of Publication", 
"Length LexisNexis"), encoding = "UTF-8-BOM"))`

我的数据集包含50篇报纸文章,包括一些元数据,如出版日期。

见截图。

为什么每次我都会犯这个错误?非常感谢您的帮助!

响应1:

当只使用readtext()时,我会更进一步,而texts(text.corpus)[1]不会产生错误。

但是,当标记化时,同样的错误再次发生,因此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
token <- tokenize(text.corpus, removePunct=TRUE, removeNumbers=TRUE, ngrams 
= 1:2)
tokens(text.corpus)

产量:

UseMethod中的错误(“tokenize”):不适用于类"c('readtext',‘data.frame’)中的对象的“令牌化”方法 UseMethod中的错误(“令牌”):没有适用于类"c('readtext',‘data.frame’)对象的‘令牌’的方法

响应2:

现在我得到这两条错误消息作为回报,这也是我最初得到的,所以我开始使用corpus_frame()

UseMethod中的错误(“令牌”):没有将“令牌”应用于类“c(‘语料库_框架’,‘data.frame’)的对象的适用方法 此外:警告信息:“语料库”被废弃。用“corpus_frame”代替。见“帮助”(“不推荐”)

是否需要指定“标记化”或任何其他步骤仅应用于“text”列,而不应用于整个数据集?

响应3:

谢谢你,帕特里克,这确实澄清了我的意思,也让我有了进一步的了解。运行此程序时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Quanteda - corpus way
readtext("C:/Users/renswilderom/Documents/Stuff Im working on at the moment/Newspaper articles DJ/test data/*.txt",
         docvarsfrom = "filenames", dvsep = "_", 
         docvarnames = c("Date of Publication", "Length LexisNexis", "source"), 
         encoding = "UTF-8-BOM")  %>%
  corpus() %>%
  tokens(removePunct = TRUE, removeNumbers = TRUE, ngrams = 1:2)

我明白了:

Tokens_internal中的错误(文本(X),.):列表不包含另外3个元素:警告消息:不推荐使用removePunctremoveNumbers;使用remove_punctremove_numbers代替

因此,我相应地更改了它(使用remove_punctremove_numbers),现在代码运行良好。

或者,我也尝试过这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Corpus - term_matrix way
readtext("C:/Users/renswilderom/Documents/Stuff Im working on at the moment/Newspaper articles DJ/test data/*.txt",
         docvarsfrom = "filenames", dvsep = "_", 
         docvarnames = c("Date of Publication", "Length LexisNexis", "source"), 
         encoding = "UTF-8-BOM")  %>%
  term_matrix(drop_punct = TRUE, drop_numbers = TRUE, ngrams = 1:2)

这就产生了这个错误:

Term_matrix中的错误(.,drop_punct = TRUE,drop_numbers = TRUE,ngram= 1:2):未识别的文本筛选器属性:'drop_numbers‘

删除drop_numbers = TRUE后,实际生成矩阵。非常感谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-12 06:22:40

为澄清情况:

语料库包的0.9.1版本有一个名为corpus的函数。quanteda还有一个名为corpus的函数。为了避免两个包之间的名称冲突,语料库 corpus函数被废弃,并在0.9.2版中重命名为corpus_frame;它在0.9.3版中被删除。

为了避免与quanteda的名称冲突,可以将语料库升级到CRAN上的最新版本(0.9.3),或者做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(corpus)
library(quanteda)

而不是其他命令。

现在,如果您想使用quanteda来标记您的文本,请按照Ken的回答中的建议:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
readtext("C:/Users/renswilderom/Documents/Stuff Im working on at the moment/Newspaper articles DJ/test data/*.txt",
     docvarsfrom = "filenames", dvsep = "_", 
     docvarnames = c("Date of Publication", "Length LexisNexis"), 
     encoding = "UTF-8-BOM"))  %>%
    corpus() %>%
    tokens(remove_punct = TRUE, remove_numbers = TRUE, ngrams = 1:2)

如果您的目标是逐项获取文档计数矩阵,则可能需要使用dfm函数而不是tokens函数。

如果您想使用语料库包,请执行以下操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
readtext("C:/Users/renswilderom/Documents/Stuff Im working on at the moment/Newspaper articles DJ/test data/*.txt",
     docvarsfrom = "filenames", dvsep = "_", 
     docvarnames = c("Date of Publication", "Length LexisNexis"), 
     encoding = "UTF-8-BOM"))  %>%
    term_matrix(drop_punct = TRUE, drop_number = TRUE, ngrams = 1:2)

根据您想要做的事情,您可能希望使用term_stats函数而不是term_matrix函数。

票数 1
EN

Stack Overflow用户

发布于 2017-10-10 13:20:42

好的,您将得到此错误,因为(正如错误消息所述),没有针对readtext对象类的tokens()方法,这是data.frame的一个特殊版本。(注意:tokenize()是旧的、过时的语法,将在下一个版本中删除--使用tokens()。)

你想要这个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library("quanteda")
library("readtext")
readtext("C:/Users/renswilderom/Documents/Stuff Im working on at the moment/Newspaper articles DJ/test data/*.txt",
         docvarsfrom = "filenames", dvsep = "_", 
         docvarnames = c("Date of Publication", "Length LexisNexis"), 
         encoding = "UTF-8-BOM"))  %>%
    corpus() %>%
    tokens(removePunct = TRUE, removeNumbers = TRUE, ngrams = 1:2)

这是您省略的corpus()步骤。corpus_frame()来自不同的包(我的朋友Patrick的语料库)。

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

https://stackoverflow.com/questions/46671013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文