使用Quanteda软件包阅读我的语料库后,在使用各种后续语句时出现同样的错误:
UseMethod(“texts”)中的错误:对于“c('corpus_frame','data.frame')”的对象应用“text”没有适用的方法。“
例如,使用此简单语句时: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(“标记”)中的错误: 适用于“c('readtext','data.frame')”对象的“令牌”没有适用的方法“
回应2:
现在我得到了这两个错误消息,我最初也得到了,所以我开始使用corpus_frame()
UseMethod(“令牌”)中的错误:“令牌”没有适用的方法 应用于类“c('corpus_frame','data.frame')”
的对象此外:警告消息:'corpus'已弃用。 请改用“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(文本(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
后,实际生成矩阵。非常感谢你的帮助!
答案 0 :(得分: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
函数。
答案 1 :(得分:0)
好的,您收到此错误是因为(如错误消息所述)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的语料库)。