繁体   English   中英

R:在阅读文本中使用 quanteda 语料库时遇到问题

[英]R: having trouble using quanteda corpus with readtext

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

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

例如,当使用这个简单的语句时: 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") 中的错误:没有适用于应用于类“c('readtext','data.frame')”的对象的“tokens”方法

回应 2:

现在我得到了这两条错误信息,我最初也得到了,所以我开始使用corpus_frame()

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

另外:警告消息:不推荐使用“语料库”。 改用“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)

我明白了:

token_internal(texts(x), ...) 中的错误:...列表不包含 3 个元素另外:警告消息:removePunctremoveNumbers 已弃用; 改用 remove_punctremove_numbers

所以我相应地改变了它(使用remove_punctremove_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 ,实际生成矩阵。 非常感谢您的帮助!

澄清情况:

corpus包的 0.9.1 版本有一个名为corpus的函数。 quanteda还有一个名为corpus的函数。 为了避免两个包之间的名称冲突,在 0.9.2 版本中, corpus corpus函数被弃用corpus_frame命名为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函数。

好的,您收到此错误是因为(如错误消息所述)没有用于 readtext 对象类的tokens()方法,它是 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 的语料库)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM