Visualisation en nuage de mots avec Oracle

La représentation en nuage de mots-clés est très répandue pour donner une impression de l’importance relative – en terme de fréquence d’apparition – des termes au sein de données textuelles. Ici, j’exploite les informations du modèle de classification Bayésienne construit dans le billet « Classification Bayésienne Naïve avec Oracle » pour extraire les mots les plus utilisés par catégorie.

Le détail du modèle est accessible via la fonction DBMS_DATA_MINING.GET_MODEL_DETAILS_NB. Il s’agit d’une fonction PIPELINE dont le champ (nested table) CONDITIONALS permet d’obtenir les probabilités conditionnelles des différents termes. Cette information peut ensuite être utilisée comme indicateur de popularité des mots au sein d’une catégorie:

C’est le principe des la vue suivante qui extrait les 40 mots les plus « populaires » de la catégorie Polars:

SQL> CREATE OR REPLACE VIEW mots_freq_polar
  2  AS
  3          SELECT attribute_subname mot,
  4                 ROUND (100 * conditional_probability, 1) freq
  5            FROM TABLE (DBMS_DATA_MINING.GET_MODEL_DETAILS_NB ('BOOKS_NB')) a,
  6                 TABLE (a.conditionals) b
  7           WHERE     INSTR (attribute_str_value, '[') = 0
  8                 AND target_attribute_str_value = 'polar'
  9        ORDER BY conditional_probability DESC
 10     FETCH FIRST 40 ROWS ONLY;

View created.

SQL> 
SQL> column mot format a30
SQL> SELECT *
  2    FROM mots_freq_polar
  3  FETCH FIRST 10 ROWS ONLY;

MOT                                  FREQ
------------------------------ ----------
ENQUÊTE                              24.3
BIEN                                 21.9
FEMME                                21.4
VIE                                  18.8
MORT                                 18.1
ANS                                    18
DEUX                                 15.9
ROMAN                                15.8
JEUNE                                14.6
POLICE                               14.5

10 rows selected.

SQL>

 

Pour générer le graphique, j’utilise ici Oracle Data Visualisation Desktop qui dispose d’une visualisation « Nuage de mots-clés »:

NuageMotsDVD

 

Dans un cadre plus général, il est possible d’obtenir un décompte des termes à partir d’une source textuelle à l’aide de la procédure CTX_DOC.TOKENS appliquée à un index textuel (ctxsys.context).

Exemple:

SQL> CREATE TABLE polar_tab (book_id PRIMARY KEY, extrait)
  2  AS
  3     SELECT ROWNUM book_id, a.extrait
  4       FROM train_set_books a
  5      WHERE categorie = 'polar';

Table created.

SQL>
SQL> CREATE INDEX POLAR_IDXTXT
  2     ON polar_tab (extrait)
  3     INDEXTYPE IS ctxsys.context
  4        PARAMETERS ('LEXER BOOKS_NB_LEXER WORDLIST BOOKS_NB_WORDLIST STOPLIST BOOKS_STOPLIST SYNC(MANUAL)');

Index created.

SQL>
SQL> CREATE TABLE polar_tokens
  2  (
  3     QUERY_ID   NUMBER,
  4     TOKEN      VARCHAR2 (64),
  5     OFFSET     NUMBER,
  6     LENGTH     NUMBER
  7  );

Table created.

SQL>
SQL> BEGIN
  2     FOR rec IN (SELECT *
  3                   FROM polar_tab)
  4     LOOP
  5        ctx_doc.tokens ('POLAR_IDXTXT',
  6                        rec.book_id,
  7                        'POLAR_TOKENS',
  8                        rec.book_id);
  9     END LOOP;
 10  END;
 11  /

PL/SQL procedure successfully completed.

SQL>
SQL> COMMIT;

Commit complete.

SQL>
SQL> set pages 30
SQL>      SELECT token, COUNT (*) cnt
  2         FROM polar_tokens
  3     GROUP BY token
  4     ORDER BY 2 DESC
  5  FETCH FIRST 15 ROWS ONLY;

TOKEN                                                                   CNT
---------------------------------------------------------------- ----------
BIEN                                                                   1765
JEUNE                                                                  1744
ENQUÊTE                                                                1715
DEUX                                                                   1710
FEMME                                                                  1637
VIE                                                                    1587
HOMME                                                                  1537
ANS                                                                    1404
MORT                                                                   1318
ROMAN                                                                  1200
MONDE                                                                  1088
POLICE                                                                 1004
VILLE                                                                   930
AFFAIRE                                                                 914
JOUR                                                                    908

15 rows selected.

SQL>

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

six × = eighteen