R:在使用带有readtext

时间:2017-10-10 15:56:54

标签: r corpus quanteda

使用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篇报纸文章,包括一些元数据,如出版日期。

查看截图。 corpus

为什么我每次都会收到此错误?非常感谢您的帮助!

回复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_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后,实际生成矩阵。非常感谢你的帮助!

2 个答案:

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