在阅读了我的语料库后,在使用不同的后续语句时,我得到了相同的错误:
UseMethod中的错误(“文本”):对于“c(语料库_帧,‘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”):不适用于类"c('readtext',‘data.frame’)中的对象的“令牌化”方法 UseMethod中的错误(“令牌”):没有适用于类"c('readtext',‘data.frame’)对象的‘令牌’的方法
响应2:
现在我得到这两条错误消息作为回报,这也是我最初得到的,所以我开始使用corpus_frame()
UseMethod中的错误(“令牌”):没有将“令牌”应用于类“c(‘语料库_框架’,‘data.frame’)的对象的适用方法 此外:警告信息:“语料库”被废弃。用“corpus_frame”代替。见“帮助”(“不推荐”)
是否需要指定“标记化”或任何其他步骤仅应用于“text”列,而不应用于整个数据集?
响应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,ngram= 1:2):未识别的文本筛选器属性:'drop_numbers‘
删除drop_numbers = TRUE
后,实际生成矩阵。非常感谢你的帮助!
发布于 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),或者做
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-10 13:20:42
好的,您将得到此错误,因为(正如错误消息所述),没有针对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的语料库)。
https://stackoverflow.com/questions/46671013
复制相似问题