无法访问版本 >= 2 中的 quanteda 语料库数量

问题描述

我在运行之前编写的相同脚本时遇到问题。那时,当我在 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 引入了一些重大变化,详情请见此处。

  1. 新的语料库对象结构。

    语料库对象的内部结构已经过重新设计,现在基于字符向量,其中包含元数据和系统数据 属性。这些都已更新以与现有提取器一起使用 和替换功能。如果您之前使用过这些,那么您 甚至不应该注意到变化。 Docvars 现在单独处理 从文本中,以与 docvars 处理标记相同的方式 对象。

来自?corpus

对于 quanteda >= 2.0,这是一个特殊分类的字符向量。它 有许多附加属性,但您不应访问这些 直接属性,特别是如果您是另一个包作者。采用 取而代之的是提取器和替换功能,否则您的代码是 不仅会更丑,而且可能会破裂 语料库对象的内部结构发生变化。使用访问器和 替换功能确保未来的代码操作语料库 对象将继续工作。

解决方案?使用 docnames(corpus_txt)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...