1

在使用 Quanteda 包阅读我的语料库后,在使用各种后续语句时出现相同的错误:

UseMethod(“texts”)中的错误:没有适用于“文本”的适用方法应用于类“c('corpus_frame','data.frame')”)的对象。

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

我用这段代码阅读了语料库:

`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]并且不会产生错误。

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

token <- tokenize(text.corpus, removePunct=TRUE, removeNumbers=TRUE, ngrams 
= 1:2)
tokens(text.corpus)

产量:

UseMethod(“tokenize”)中的错误:没有适用于“tokenize”的方法应用于“c('readtext','data.frame')”类的对象

UseMethod(“tokens”)中的错误:没有适用于“tokens”的适用方法应用于类“c('readtext','data.frame')”的对象

回应 2:

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

UseMethod(“tokens”)中的错误:没有适用于“tokens”的适用方法应用于“c('corpus_frame','data.frame')”类的对象

此外:警告消息:“语料库”已弃用。改用“corpus_frame”。查看帮助(“已弃用”)

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

回应 3:

谢谢你,帕特里克,这确实澄清了我,让我更进一步。运行时:

# 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(texts(x), ...) 中的错误:... 列表不包含 3 个元素此外:警告消息:removePunctremoveNumbers 已弃用;改用 remove_punctremove_numbers

所以我相应地改变了它(使用remove_punctand remove_numbers),现在代码运行良好。

或者,我也试过这个:

# 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, ngrams = 1:2) 中的错误:无法识别的文本过滤器属性:“drop_numbers”

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

4

2 回答 2

1

澄清情况:

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

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

library(corpus)
library(quanteda)

而不是其他顺序。


现在,如果您想使用quanteda对文本进行标记,请遵循 Ken 的回答中给出的建议:

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

如果您想使用语料库包,请改为

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函数。

于 2017-10-12T14:22:40.850 回答
0

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

你要这个:

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 Perry 的语料库)。

于 2017-10-10T21:20:42.483 回答