首页 > 解决方案 > 从 df 创建一个语料库,包括文档名称

问题描述

我正在使用 readtext 包将所有文本文件读入 df 。

df <- readtext(directory, "*.txt")

.txt 文件存储在带有doc_id(文档名称)和文本(内容)的 df 中。

在我升级到最新版本的 quanteda 之前,doc_id当我使用以下方法创建语料库时,它被存储在语料库对象中:

corpus <- corpus(df)

但是现在这不再起作用了,语料库对象的'documents'-df只存储'texts'-values,而不是-valuesdoc_id了。

我如何回到我doc_id的语料库对象中?

标签: rquanteda

解决方案


这是因为我们在 v1.2.0 之前修复了一个错误。从 data.frame 构建语料库时,文档 id 需要一些字段,默认情况下这是readtext doc_id

如果您还希望它作为文档变量,您可以这样做。首先,我从readtext包的系统文件中读取了一些文本,作为可重现的示例。

library("readtext")
library("quanteda")

packageVersion("readtext")
## [1] ‘0.50’
packageVersion("quanteda")
## [1] ‘1.2.0’

df <- readtext(paste0(DATA_DIR, "txt/EU_manifestos/*.txt"), encoding = "LATIN1")
df
## readtext object consisting of 17 documents and 0 docvars.
## # data.frame [17 × 2]
## doc_id                  text                
## <chr>                   <chr>               
## 1 EU_euro_2004_de_PSE.txt "\"PES · PSE \"..." 
## 2 EU_euro_2004_de_V.txt   "\"Gemeinsame\"..." 
## 3 EU_euro_2004_en_PSE.txt "\"PES · PSE \"..." 
## 4 EU_euro_2004_en_V.txt   "\"Manifesto\n\"..."
## 5 EU_euro_2004_es_PSE.txt "\"PES · PSE \"..." 
## 6 EU_euro_2004_es_V.txt   "\"Manifesto\n\"..."

当我们由此创建语料库时,我们看不到文档变量。

crp <- corpus(df)
crp
## data frame with 0 columns and 17 rows

但是添加它们很简单:

docvars(crp, "doc_id") <- df$doc_id
head(docvars(crp))
##                                          doc_id
## EU_euro_2004_de_PSE.txt EU_euro_2004_de_PSE.txt
## EU_euro_2004_de_V.txt     EU_euro_2004_de_V.txt
## EU_euro_2004_en_PSE.txt EU_euro_2004_en_PSE.txt
## EU_euro_2004_en_V.txt     EU_euro_2004_en_V.txt
## EU_euro_2004_es_PSE.txt EU_euro_2004_es_PSE.txt
## EU_euro_2004_es_V.txt     EU_euro_2004_es_V.txt

请注意,强烈建议您不要通过其 data.frame 元素访问语料库对象的内部df$documents。将来会使用访问器docvars()和替换器,但语料库的内部结构可能会发生变化。docvars()<-


推荐阅读