Строительство корпуса в Quanteda, сохраняя при этом удостоверение личности - PullRequest
1 голос
/ 23 января 2020

У меня есть набор данных, в котором у меня есть несколько текстов на пользователя. Я хочу создать корпус всех этих документов с помощью Quanteda, но не теряя возможности связывать различные тексты с соответствующим пользователем.

Я дам вам пример кода, который поможет вам понять немного больше, где Я терплю неудачу.

df <- data.frame('ID'=c(1,1,2), 'Text'=c('I ate apple', "I don't like fruits", "I swim in the dark"), stringsAsFactors = FALSE)
df_corpus <- corpus(df$Text, docnames =df$ID)
corpus_DFM <- dfm(df_corpus, tolower = TRUE, stem = FALSE)
print(corpus_DFM)

Это приводит к

Document-feature matrix of: 3 documents, 10 features (60.0% sparse).
3 x 10 sparse Matrix of class "dfm"
     features
docs  i ate apple don't like fruits swim in the dark
  1   1   1     1     0    0      0    0  0   0    0
  1.1 1   0     0     1    1      1    0  0   0    0
  2   1   0     0     0    0      0    1  1   1    1
> 

Но я хотел бы получить в кадре данных, который выглядит так в моей матрице функций документа


Document-feature matrix of: 3 documents, 10 features (60.0% sparse).
3 x 10 sparse Matrix of class "dfm"
       features
docs    id  i ate apple don't like fruits swim in the dark
  text1 1   1   1     1     0    0      0    0  0   0    0
  text2 1   1   0     0     1    1      1    0  0   0    0
  text3 2   1   0     0     0    0      0    1  1   1    1
> 

Есть ли способ автоматизировать этот процесс с помощью Quanteda. Я хотел бы изменить столбец docs объекта dfm, но я не знаю, как получить к нему доступ.

Любая помощь будет приветствоваться!

Спасибо.

1 Ответ

1 голос
/ 23 января 2020

Проблема здесь в том, что вы задаете имена документов как «ID», но имена документов должны быть уникальными. Вот почему функция конструктора корпуса присваивает 1, 1.1, 2 вашим именам документов на основе неуникального идентификатора.

Решение? Пусть corpus() назначит имена документов и сохранит ID как документ (переменная документа). Проще всего сделать это, введя data.frame в corpus(), который вызывает метод data.frame, чем символьный метод для corpus(). (См.? Корпус.)

Измените свой код на:

> df_corpus <- corpus(df, text_field =  "Text")
> corpus_DFM <- dfm(df_corpus, tolower = TRUE, stem = FALSE)
> print(corpus_DFM)
Document-feature matrix of: 3 documents, 10 features (60.0% sparse).
3 x 10 sparse Matrix of class "dfm"
       features
docs    i ate apple don't like fruits swim in the dark
  text1 1   1     1     0    0      0    0  0   0    0
  text2 1   0     0     1    1      1    0  0   0    0
  text3 1   0     0     0    0      0    1  1   1    1
> 
> docvars(corpus_DFM, "ID")
[1] 1 1 2

Это позволяет вам легко рекомбинировать ваш dfm по пользователю, если вы хотите:

> dfm_group(corpus_DFM, groups = "ID")
Document-feature matrix of: 2 documents, 10 features (45.0% sparse).
2 x 10 sparse Matrix of class "dfm"
    features
docs i ate apple don't like fruits swim in the dark
   1 2   1     1     1    1      1    0  0   0    0
   2 1   0     0     0    0      0    1  1   1    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...