juba / rainette

R implementation of the Reinert text clustering method
https://juba.github.io/rainette/
53 stars 7 forks source link

Comment utiliser les résultats de rainette dans d'autres analyses, notamment factorielles (AFC et ACM) #22

Closed JacquesAntoine closed 1 year ago

JacquesAntoine commented 1 year ago

Bonjour,

Dans un premier temps, j'ai utilisé IramuteQ pour explorer des corpus textuels.

J'ai découvert le paquet rainette (et quanteda) et me suis piqué au jeu de voir plus en détail les procédures R sous-jacentes à celles proposées par IramuteQ (par ailleurs remarquable).

Je ne suis pas parvenu à reproduire les analyses factorielles souvent utilisées en lien avec les classifications de Reinert (AFC et ACM), comme celles présentées dans l'article de Claire Tissot que vous citez dans votre vignette.

Auriez-vous quelques pistes à me proposer sur la procédure à suivre.

Avec mes félicitations pour cette impressionnante librairie et mes remerciements anticipés, Jacques-Antoine

juba commented 1 year ago

Bonjour,

Voici un petit exemple qui applique rainette sur un corpus d'exemple de quanteda, et ensuite réalise deux analyses des correspondances en utilisant FactoMineR :

J'utilise l'interface d'explor pour visualiser les résultats de ces analyses mais d'autres outils peuvent être employés également.

J'espère que ça pourra vous être utile.

# Packages
library(tidyverse)
library(quanteda)
library(rainette)
library(FactoMineR)
library(explor)

# Example corpus
corpus <- data_corpus_inaugural
corpus <- split_segments(corpus)

tok <- corpus |>
  tokens(remove_punct = TRUE) |>
  tokens_tolower() |>
  tokens_remove(stopwords("en"))
dtm <- dfm(tok) |>
  dfm_trim(min_docfreq = 20)

# Reinert clustering
res <- rainette(dtm, k = 5, min_segment_size = 15, min_split_members = 20)
groups <- cutree(res, k = 5)

# CA analysis of terms vs groups
d <- dfm_group(dtm, groups)
d <- convert(d, "data.frame") |> select(-doc_id)
ca <- CA(d)
explor(ca)

# MCA of groups and other docvar variables
docvars(dtm, "period") <- cut(
  docvars(dtm, "Year"), 
  breaks = c(1789, 1920, 1950, 1980, 2021), 
  include.lowest = TRUE
)
d2 <- docvars(dtm) |>
  select(Party, period) |>
  mutate(
    groupe = factor(groups)
  )
acm <- MCA(d2)
explor(acm)