Создать корпус из df, включая имена документов - PullRequest
0 голосов
/ 05 мая 2018

Я читаю все свои текстовые файлы в df с пакетом readtext.

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

Файлы .txt сохраняются в формате df с doc_id (название документа) и текстом (содержимое).

Прежде чем я обновился до последней версии Quanteda, doc_id был сохранен в объекте корпуса, когда я создал свой корпус с помощью:

corpus <- corpus(df)

Но теперь это больше не работает, «Documents» -DF объекта корпуса хранит только «текстовые» значения, но не doc_id -значения больше.

Как мне вернуть мой doc_id в мой корпус?

1 Ответ

0 голосов
/ 05 мая 2018

Это из-за ошибки , которую мы исправили до v1.2.0. При построении корпуса из data.frame, для идентификатора документа требуется какое-то поле, и по умолчанию это 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()<- будут работать в будущем, но внутренние органы корпуса могут измениться.

...