![](/img/trans.png)
[英]How to load multiple JSON files into a quanteda corpus using readtext?
[英]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_punct
和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
,实际生成矩阵。 非常感谢您的帮助!
澄清情况:
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.