问题描述
我在运行之前编写的相同脚本时遇到问题。那时,当我在 readtext 对象上应用 quanteda::corpus 时,它返回了一个“语料库”和“列表”类对象。但是当我运行相同的脚本时,它现在返回“语料库”和“角色”类对象。这会影响后续代码。这可能是什么原因,我该如何解决这个问题?
脚本如下:
txt <- readtext("C:/Users/aerol/Desktop/txt_sample")
corpus_txt <- corpus(txt) %>%
corpus_reshape(to = "sentences")
docvars(corpus_txt,"Treaty") <- corpus_txt$documents$`_document`
docvars(corpus_txt,"Year") <- as.integer(stri_sub(corpus_txt$documents$`_document`,-9,-6))
文件是国际条约。所有文件名都采用相同的格式,它们包含条约名称和签署年份。我正在提取这些。
当时语料库txt的类是“语料库”“列表”:
> class(corpus_txt)
[1] "corpus" "list"
但现在:
> class(corpus_txt)
[1] "corpus" "character"
> packageVersion("quanteda")
[1] ‘2.1.2’
而且我无法像以前那样从语料库中提取信息。因为我从去年 10 月就开始研究这个,所以我应该一直使用相同的版本。
非常感谢。
解决方法
我们在 v2 中更改了语料库内部结构,在文档中警告用户不应直接访问语料库内部结构两年后,否则他们的代码可能无法在未来的主要版本下运行。
来自https://github.com/quanteda/quanteda/blob/master/NEWS.md#quanteda-20:
quanteda 2.0 引入了一些重大变化,详情请见此处。
-
新的语料库对象结构。
语料库对象的内部结构已经过重新设计,现在基于字符向量,其中包含元数据和系统数据 属性。这些都已更新以与现有提取器一起使用 和替换功能。如果您之前使用过这些,那么您 甚至不应该注意到变化。 Docvars 现在单独处理 从文本中,以与 docvars 处理标记相同的方式 对象。
来自?corpus
:
对于 quanteda >= 2.0,这是一个特殊分类的字符向量。它 有许多附加属性,但您不应访问这些 直接属性,特别是如果您是另一个包作者。采用 取而代之的是提取器和替换功能,否则您的代码是 不仅会更丑,而且可能会破裂 语料库对象的内部结构发生变化。使用访问器和 替换功能确保未来的代码操作语料库 对象将继续工作。
解决方案?使用 docnames(corpus_txt)
。