Cette page sert au suivi des projets de l'UMR ICAR mobilisant TXM.

Dans la mesure où cette page est actuellement publique, il est recommandé de veiller à maintenir un niveau d'anonymat raisonnable. (merci de nous contacter si cette page doit évoluer vers plus de confidentialité)

Pour éditer cette page, il suffit d'être abonné à la liste de diffusion 'txm-users'.

Analyse de tweets #CharlieHebdo

Descriptif du projet

Projet suivi avec CP : expérimentation sur un corpus de tweets.

Importation du corpus 'charlie' dans TXM

La première expérimentation repose sur le corpus 'charlie' composé des tweets français du 7 au 14 janvier.

La source du corpus prend la forme d'autant de fichiers CSV que de jours de tweets sélectionnés du 7 janvier au 14 janvier.

Ces fichiers sont le résultat d'un export CSV d'un SGBD contenant les tweets.

Il est possible d'obtenir une version d'export XML plutôt que CSV.

Le corpus final est plus grand :

  • d'autres jours
  • d'autres langues que le français

Le statut de la propriété intellectuelle de ce corpus n'est pas défini → il faut le maintenir confidentiel jusqu'à nouvel ordre.

Workflow d'import

L'idée est d'utiliser les étapes suivantes :

  • A) la macro CSV2XML sert à passer du format CSV au format XML, que TXM sait importer, et qui contient toutes les informations originales du tableau CSV. Elle transforme le tableau de tweets pour chaque jour en un fichier texte encodé en XML, chaque tweet étant encodé avec ses propriétés avec des balises XML
  • B) on ajoute au répertoire de sources XML un petit fichier 'metadata.csv' pour coder la date de chaque 'texte' (permettra de faire facilement une partition par jours)
  • C) on réalise l'import dans TXM avec le module d'import XML/w+CSV en utilisant le modèle de langue TreeTagger 'frp' (français parlé)
    • dans l'édition de 'texte', chaque tweet sera séparé dans sa propre page

Adaptation de la macro CSV2XMLMacro.groovy

Les premiers tests d'import on montré deux difficultés :

  • 1) le corpus a une taille flirtant avec les limites de TXM 0.7.7 (>50-100 millions de mots)
  • 2) il y a énormément de re-tweets ce qui pose des questions de méthode quantitative et participe au volume

La macro CSV2XML d'origine peut transformer n'importer quel tableau CSV vers un format XML en vue d'un import dans TXM avec le module XML/w+CSV.

La particularité d'un tableau de re-tweets m'a fait développer cette macro pour qu'elle gère spécifiquement le cas des re-tweets et également procède à divers pré-traitements.

Analyse des retweets

J'ai ajouté un nouveau paramètre à la macro :

  • filterRetweets : oui/non. 'oui' signifiant il faut considérer le tableau CSV comme un tableau de tweets et il faut filtrer les re-tweets.
Identification des re-tweets

Comme les tableaux d'export fournis ne contiennent pas de colonne indiquant si un tweet est un re-tweet ou pas, produit notamment par l'appui sur un bouton 're-tweet' (datasift peut fournir ce genre d'informations), j'ai développé lors de la transformation l'analyse des préfixes de la forme :

  • “RT @motClé : <contenu du tweet>” (re-tweet, de profondeur 1)
  • “RT @motClé : RT @motClé : <contenu du tweet>” (re-tweet de re-tweet : re-tweet de profondeur 2)
  • “RT @motClé : RT @motClé : <contenu du tweet>” (re-tweet de profondeur 3)
  • etc.
Re-codage des re-tweets

Les re-tweets sont filtrés en distinguant la profondeur de re-tweet (le nombre de personnes adressées en préfixe du tweet). On produit donc dans le corpus les types de tweets suivants :

  • tweet direct (profondeur 0), sans préfixe 'RT @QuelquUn : …' dans le contenu du tableau CSV
  • re-tweet de profondeur 1, avec un préfixe initial 'RT @QuelquUn : …' dans le contenu du tableau CSV
  • re-tweet de profondeur 2, avec un préfixe initial 'RT @QuelquUn : RT @QuelquUndAutre : …' dans le contenu du tableau CSV
  • re-tweet de profondeur 3, avec un préfixe initial 'RT @QuelquUn : RT @QuelquUndAutre : RT @ÉventuellementQuelquUndAutre : …' dans le contenu du tableau CSV
  • etc.

Pour chaque niveau de profondeur d'un re-tweet il n'y a pas répétition du tweet dans le corpus XML (contenu qui suit le préfixe et métadonnées). Donc 500 re-tweets de profondeur 1 d'un même tweet ne seront représentés que par un seul tweet dans le XML.

Ceci limite fortement la duplication. Par exemple, pour le 7 janvier, les cinq re-tweets les plus populaires sont de profondeur 1 (ce ne sont que des re-tweets directs), ils apparaissent resp. 796, 569, 556, 333 et 261 fois. Ce sont :

freq	depth	content
796	1	La plus belle des photos d'aujourd'hui.\n#NotAfraid\nUn pays uni. http://t.co/k9STr3ILKB
569	1	Meilleure photo publiée du rassemblement à Paris #CharlieHebdo #NotAfraid #NotInMyName http://t.co/krBIT2RW3i
556	1	Rassemblement spontané place de la République #JeSuisCharlie #CharlieHebdo #NotAfraid http://t.co/WKjP8O0cAR
333	1	#Reims maintenant \n#CharlieHebdo http://t.co/HWut9E8UFb
261	1	Ils voulaient mettre à genoux la France, ils l'ont mise debout. #CharlieHebdo http://t.co/4T0uI4sF2h
/WKjP8O0cAR

Les préfixes de re-tweet sont retirés du contenu des tweets encodés en XML (note : on pourrait les laisser).

La propriété 'retweetdepth' de la structure correspondant aux tweets code la profondeur de re-tweet (j'ai l'impression qu'il y a un décalage de 1 du niveau de profondeur : 0 pour 1, 1 pour 2, etc.).

Un tweet XML correspondant à une série de re-tweets d'un même niveau de profondeur n'encode pas encore le nombre de tweets correspondants (celà nécessite une double passe des tweets que je n'ai pas implémentée).

Statistiques des re-tweets

Pour préserver l'information concernant les re-tweets, pour chaque fichier de journée j'ai produit un tableau TSV indépendant nommé '<nom fichier du jour>-retweets.csv' de tous les re-tweets du jour avec leur fréquence, leur profondeur et leur contenu (cf exemple ci-dessus). Ces fichiers sont des fichiers annexes des sources XML à analyser avec un tableur.

Traitements complémentaires

Noms de colonnes comprenant des caractères souligné '_'

Les noms de colonnes des tweets exportés comprenant des caractères souligné '_' qui gênent l'import et l'analyse avec TXM, j'ai fait transformer à la volée tous les '_' par des '-' lors de la transformation.

Nom de colonne 'text'

La macro utilise les noms de colonnes à la fois pour récupérer les contenus textuels dans le CSV et pour nommer les balises qui les codent dans le résultat XML. Par exemple, le contenu d'une colonne appelée 'source' est encodé dans le XML par un élément '<source>…</source>'.

Malheureusement, l'export CSV des tweets contient une colonne nommée 'text', Or, cette balise est réservée par le contrat actuel de l'import de TXM qui considère cette balise comme délimitant les unités documentaires. Donc comme une colonne nommée 'text' produisait une balise '<text>….</text>' en sortie, le XML produit était incohérent pour l'import TXM car il contenait deux niveaux imbriqués de balies '<text>' (celle globale de chaque fichier CSV et celles de chaque tweet). J'ai donc ajouté une vérification du nom des colonnes à l'écriture et remplacé toute génération de balise '<text>' pour un contenu de colonne par une balise '<txmtext>'.

Morphologie particulières de certains 'mots'

En cas de conversion d'un tableau de tweets, j'ai ajouté une étape de pré-tokenization des :

  • '@tag'
  • '#tag'
  • URLs 'http://...'

très présents dans les tweets, pour améliorer l'indexation lexicale ultérieure et faciliter leur repérage dans TXM.

Filtrage de certains caractères bruts

Les fichiers CSV exportés depuis le SGBD comprenant des caractères non représentables en XML (caractères de contrôle), j'ai ajouté une étape de suppression de ces caractères.

Version 1 du corpus français du 7 au 14 janvier

Une premmière version du corpus de nom CHARLIE.txm a été produite avec le module d'import XML/w+CSV.

encodage des tweets

Les tweets sont encodés par la structure 'tweet' avec des propriétés correspondant à leurs métadonnées.

encodage des mots

Les mots sont lemmatisés avec le modèle Perceo.

éditions

Elle ne contient pas les éditions car elles prennent trop de volume et leur intérêt est limité vue la longueur des tweets.

concordances

Les contextes de concordances sont réglés pour ne pas dépasser les limites de tweets.



Retour à la liste des projets.

public/umr_icar.txt · Dernière modification: 2015/10/10 14:27 par slh@ens-lyon.fr