Project Crane (racisme de crise et évaluation narrative) vise à soutenir les chercheurs et les organisations antiracistes qui souhaitent utiliser des algorithmes d'analyse de texte de pointe pour étudier comment des événements spécifiques ont un impact sur les discours de haine en ligne et les récits racistes . Crane Toolbox est un package Python : une fois installé, les outils de Crane sont disponibles en fonction que les utilisateurs peuvent utiliser dans leurs programmes Python ou directement via leur terminal. Crane cible les utilisateurs avec une programmation de base mais pas de compétences en apprentissage automatique .
Sauter pour démarrer rapidement

Retour en haut
Le racisme de crise et l'évaluation narrative , ou grue pour faire court, est né pendant le défi de résilience, un hackathon axé sur le Covid19. Au cours de neuf semaines, une équipe interdisciplinaire composée d'étudiants et de concepteurs professionnels, de programmeurs et de chercheurs en informatique a développé un site Web prototype pour le suivi en temps réel de la rhétorique raciste liée à la pandémie Covid19 . Le projet a été proposé par Gianluca Stringhini, Université de Boston, à la suite de son travail sur l'émergence précoce de comportements sinophobes en ligne pendant la pandémie de Covid19 (SARS-COV-2). Les lecteurs peuvent trouver plus de détails sur l'approche adoptée pour le défi de résilience sur la page DevPost correspondante et la branche de la résilience-déficit-légel de ce référentiel.
En faisant une revue de la littérature, nous avons remarqué que peu d'articles sur le suivi de la parole en ligne de la haine avaient à la fois une approche de recherche en sociologie et des outils récents de traitement du langage naturel. La littérature semble être principalement divisée en articles méthodologiques visant à développer de nouveaux outils d'apprentissage automatique pour détecter et caractériser le racisme, et les approches traditionnelles de recherche en sociologie, à la fois qualitatives et quantitatives, qui ne profitent pas pleinement des méthodes de données et d'analyse disponibles.
Nous sommes conscients que cela est dû en partie à la difficulté de rassembler des équipes interdisciplinaires de domaines très différents, et en partie à la nature plutôt jeune et précaire de la détection automatisée des discours de haine.
Nos expériences pendant le hackathon nous ont amené à croire que ces problèmes pourraient être quelque peu atténués en fournissant aux chercheurs en sciences sociales des outils conviviaux en tirant parti des méthodes actuelles de détection et d'analyse de discours de haine actuelles.
Crane Toolbox est conçu pour soutenir les chercheurs et les organisations antiracistes pour étudier comment des événements spécifiques ont un impact sur les discours de haine en ligne et les récits racistes . Les algorithmes d'analyse de texte de pointe évoluent rapidement et leur propagation est souvent limitée au domaine dédié de la recherche en informatique. La boîte à outils Crane enveloppe certaines de ces méthodes, qui s'adaptent aux questions typiques des sciences sociales, dans des outils conviviaux qui ne nécessitent aucune compétence d'apprentissage automatique .
Crane Toolbox est un package Python . Une fois installés, les utilisateurs peuvent appeler ses fonctions dans leurs scripts Python ou utiliser les outils qu'il fournit directement via leur terminal. Ces outils sont organisés dans plusieurs sous-packages appelés modules. Chaque module correspond à une étape du pipeline d'analyse générale.
La première version de Crane Toolbox fournit des outils et de la documentation pour que les utilisateurs puissent filtrer et formater les données qu'ils ont extraites de Twitter (module d'importation ), la préparer à l'analyse (module de prétraitement ), effectuer l'analyse (ES) de leur choix ( module d'analyse ) et obtenir une représentation graphique de base des résultats (module de visualisation ).
Retour en haut
Cette section est destinée aux programmeurs expérimentés qui souhaitent plonger la tête la première dans la profondeur. Si vous n'avez aucune idée de ce dont nous parlons là-dedans, ne vous enfuis pas en criant! Bien que la longueur de la section de documentation du package puisse le rendre un peu intimidant, nous l'avons écrit avec des non-spécialistes à l'esprit, vous devriez donc trouver toutes les instructions et les conseils dont vous avez besoin pour utiliser la boîte à outils Crane.
pip install cranetoolbox La première étape consiste à transformer vos données en notre format d'échange de données commun, un fichier CSV à trois colonnes. Nous utilisons le module crane-import pour effectuer cette étape. Il prend des fichiers source qui contiennent un seul objet JSON Tweet par ligne et les transforment en un fichier CSV léger. Les paramètres disponibles sont détaillés dans la section du module d'importation.
crane-import --source-folder ./my_source --output-folder ./my_outputIl est important de nettoyer les données de texte avant l'analyse des données. Nous fournissons un outil CLI pour effectuer cette étape, avec plusieurs options de prétraitement. Les paramètres disponibles sont détaillés dans la section du module de prétraitement.
crane-preprocess ./my_output ./my_preproc_outputNous fournissons actuellement un seul outil d'analyse statistique qui effectue une analyse de fréquence de base sur l'ensemble de données à l'aide d'un ensemble de mots clés à condition. Les formats d'entrée requis et les paramètres disponibles sont détaillés dans la section du module d'analyse.
crane-analysis-quanti ./my_preproc_output keywords.json quanti_results.csvRetour en haut
Cette section est divisée en deux parties: une première décrivant comment installer la boîte à outils Crane et exécuter ses outils, soit en mode ligne de commande dans un terminal ou via des appels de fonction dans des scripts Python; et un second donnant des détails sur chaque module, dans le format de données particulier et le choix des paramètres.
Les utilisateurs avancés peuvent trouver des informations supplémentaires sur le contenu de chaque module dans la documentation du code.
Afin d'installer avec succès la boîte à outils Crane, vous aurez besoin:
Certaines connaissances de base en programmation et lignes de commande sont fortement recommandées , mais les courageux et les studieux peuvent choisir de procéder sans.
Si la liste ci-dessus est claire pour vous, passez aux instructions d'installation. Sinon, lisez les paragraphes suivants pour préparer votre environnement.
Le terminal est une interface dans laquelle vous pouvez taper et exécuter des commandes basées sur du texte. Vous pouvez trouver une explication plus détaillée ici et des photos de ce à quoi ressemble un terminal ici.
Un terminal est déjà installé sur votre ordinateur. Si vous utilisez un système d'exploitation basé sur UNIX ( MacOSX ou une distribution Linux ), il est bien nommé terminal et vit avec vos autres applications. Si vous utilisez un système d'exploitation Windows, il est nommé invite de commande et peut être trouvé dans votre menu Démarrer. Pour Windows 8 et 10, il est situé dans le dossier Système Windows .
Pour exécuter une commande dans le terminal, tapez-le simplement et appuyez sur Entrée.
Python 3 est un langage de programmation.
Le processus d'installation dépend de votre système d'exploitation. Des instructions de base peuvent être trouvées sur le site officiel de Python, mais vous trouverez facilement des guides plus détaillés sur Internet.
PIP est un gestionnaire de packages: il vous aide à télécharger des packages Python et à les mettre à jour si nécessaire.
Des instructions de base pour son installation sont disponibles sur son site officiel. Il est largement utilisé, donc des guides étape par étape et d'autres ressources se trouvent facilement sur Internet.
pip3 . Vous pouvez vérifier quelle version de pip est utilisée en exécutant pip --version dans votre terminal ( python -m pip --version pour les utilisateurs de Windows).
Nous recommandons fortement d'installer une boîte à outils de grue à l'aide de pip . Exécutez pip install cranetoolbox dans un terminal. La commande peut prendre un certain temps car pip installera également automatiquement tous les packages Python requis pour que la boîte à outils Crane s'exécute. Vous pouvez cocher la liste des dépendances sur la [page PYPI de la boîte à outils Crane] (lien vers la page PYPI).
La boîte à outils Crane peut également être installée manuellement à partir du code source disponible dans ce référentiel.
Le mode de ligne de commande est la méthode la plus simple d'utilisation de ce package, il permet à l'utilisateur d'exécuter rapidement toutes les parties du package et de produire des statistiques utilisables en très peu de temps.
Il existe trois commandes CLI différentes disponibles dans la boîte à outils, ce sont crane-import , crane-preprocess et crane-analysis-quanti . Dans l'ordre, ils gèrent l'importation / transformation des données brutes en un format CSV standard, prétraitement ces données en format utilisable et enfin calculant les fréquences quotidiennes des mots clés donnés.
Pour les détails sur les paramètres fournis sous chaque outil CLI, veuillez consulter la documentation détaillée ci-dessous.
Ce package a été écrit en pensant à la réutilisation. Bien que les outils CLI soient plus faciles à utiliser en tant qu'outils autonomes, la boîte à outils Crane peut être importée et utilisée dans un autre projet Python. Toutes les fonctions sont disponibles pour l'utilisateur via une utilisation standard du package Python. De plus, une seule fonction de haut niveau correspond à chaque outil CLI afin que les utilisateurs puissent facilement appeler leur pipeline souhaité directement à partir de Python.
Le module d'importation est accessible à partir du point d'entrée de la ligne de commande crane-import .
L'objectif de ce module est de transformer les données RAW Twitter JSON en quelque chose de plus gérable et léger à utiliser par le reste du pipeline. Ce n'est pas une étape requise et pourrait être effectué manuellement par l'utilisateur ou a déjà été effectué via un autre outil car les données sont passées entre les modules sous forme de fichiers.
Ce module peut traiter un grand nombre de grands fichiers (plusieurs gigaoctets) sans s'appuyer fortement sur l'échange ou l'utilisation de la mémoire. Ceci est accompli en lisant des fichiers par morceaux (l'utilisateur peut spécifier le nombre de lignes dans les options) ainsi que par l'écriture en morceaux. Cela garantit que seule une certaine quantité de données est maintenue en mémoire à un moment donné.
De plus, il supprime des données de tweet supplémentaires qui ne sont pas nécessaires pour le pipeline d'analyse, réduisant la taille du fichier et augmentant les performances des étapes ultérieures de ce package.
Le module tentera de lire n'importe quel fichier dans le dossier spécifié, quelle que soit l'extension, le nom, etc. Il prend en charge n'importe quel format de fichier textuel (.json, .csv, .txt). De plus, il peut gérer les archives tar compressées et traiter plusieurs fichiers ou dossiers dans une archive TAR donnée.tar.gz ou similaire n'est pris en charge.
Quel que soit le type de fichier exact, les données doivent toujours être stockées avec un tweet d'objet JSON par ligne , en utilisant n comme caractère de fin de ligne.
Le module concatera tous les fichiers en un seul fichier CSV avec les colonnes suivantes:
| identifiant | texte | créé_at |
|---|---|---|
| ID unique du tweet | Tweet en texte intégral | Timestamp de tweet |
Le fichier CSV n'a ni en-têtes , séparateurs de virgules et citations doubles en option pour le texte.
La colonne de texte est sélectionnée dynamiquement selon que le tweet est supérieur à 140 caractères ou non, pour plus d'informations sur les tweets étendus, voir la documentation officielle sur les tweets étendus
Si le fichier de sortie existe déjà, il ajoutera au fichier existant. Dans le cas où il n'existe pas, il en créera un nouveau, en utilisant le chemin par défaut ("./filtered_data.csv") si aucun n'est spécifié.
Le package d'importation peut être utilisé comme outil de ligne de commande et prend en charge plusieurs options différentes.
--source-folder le dossier source ou le fichier pour analyser les fichiers / archives pour traiter.--output-folder le dossier pour enregistrer la sortie. Le dossier spécifié doit exister. Par défaut ./ .--output-name du nom, y compris l'extension, du fichier de sortie. Par défaut est output.csv .--text-name le nom du champ de texte, cas ce champ a un nom différent.--date-name du nom sur le champ Created_at, Case Ce champ a un nom différent.--id-name du champ ID, Case Ce champ a un nom différent.--tweet-language La langue des tweets enregistrés dans le fichier. Basé sur le champ de langue dans l'objet JSON. Par défaut à en .--max-lines-in-memory le nombre maximum de lignes qui seront maintenues en mémoire. Cela peut être ajusté pour optimiser les performances ou sur les machines qui ont une mémoire limitée. Par défaut est à 50000 .--retweets Utilisez ce drapeau pour inclure des retweets dans l'ensemble de sortie. Par défaut est falseUn exemple complet pour le point d'entrée de ligne de commande:
crane-import --source-folder tweets/november --output-folder mydataset/data --max-lines-in-memory 2000 --output-name dataset.csv Le pipeline de prétraitement est accessible à partir du point d'entrée de la ligne de commande crane-preprocess .
Le prétraitement proposé est adapté d'Effrosynidis et al. (2017), en utilisant les techniques 9, 0, 1, 3, 5 et 7 et 4.
L'ensemble de données donné comme premier argument de position peut être un dossier de fichiers CSV ou un seul fichier CSV. Chaque fichier CSV doit contenir 3 colonnes (ID de l'entrée, doit être unique, int; texte du tweet, chaîne; horodatage: chaîne d'horodatage), pas d'en-têtes , séparateurs de virgules et citations doubles en option pour le texte.
| identifiant | texte | créé_at |
|---|---|---|
| ID unique du tweet | Tweet en texte intégral | Timestamp de tweet |
Dans l'ordre et pour une chaîne donnée, il sera:
u002c ),-url est spécifié,-mention est spécifiée,-hashtag est spécifié,punct est spécifié,-num est spécifié. Les hashtags sont segmentés, c'est-à-dire séparés en mots, en utilisant le package WordSegment.
L'ensemble de données traité est enregistré dans le dossier donné comme deuxième argument de position. S'il n'existe pas, le dossier sera créé. Pour chaque fichier d'entrée, un fichier traité est généré. Les noms de fichiers sont générés par apprentissage "_preprocessed" au nom du fichier d'entrée correspondant. Chaque fichier CSV contient 4 colonnes (ID de l'entrée, doit être unique, int; texte original du tweet, chaîne; texte prétraité du tweet, chaîne ; horodatage: chaîne d'horodatage), pas d'en-têtes , séparateurs de virgule et citations doubles en option pour le texte.
| identifiant | original_text | clean_text | créé_at |
|---|---|---|---|
| ID unique du tweet | Tweet en texte intégral | Texte prétraité du tweet | Timestamp de tweet |
Le pipeline a deux arguments positionnels obligatoires et cinq arguments facultatifs:
-url ou --remove-url Utilisez ce drapeau pour supprimer les URL des tweets au lieu de les remplacer par «URL».-mention ou --remove-mentions Utilisez ce drapeau pour supprimer les mentions de l'utilisateur «@userhandle» des tweets au lieu de les remplacer par «Atuser».-hashtag ou --segment-hashtags Utilisez ce drapeau pour segmenter les hashtags au lieu de simplement supprimer le caractère «#» précédent.-punct ou --remove-punctuation Utilisez ce drapeau pour supprimer toutes les ponctuations attendez des traits d'essais, au lieu de remplacer les symboles répétés et les nouvelles lignes.-num ou --remove-numbers Utilisez ce drapeau pour supprimer tous les numéros des tweets au lieu de les remplacer par leur version de texte.Un exemple complet pour le point d'entrée de ligne de commande:
crane-preprocess mydataset/data mydataset/preprocessedData -punctActuellement, le module d'analyse n'offre qu'un pipeline d'analyse quantitatif simple pour calculer la fréquence quotidienne des mots clés donnés.
Ce pipeline d'analyse est accessible à partir du point d'entrée de la ligne de commande crane-analysis-quanti .
Il calcule la fréquence quotidienne des mots clés donnés dans un ensemble de données. Il permet des variantes de mots clés. Par exemple, les occurrences de "garçons" et de "boyz" peuvent être comptées ensemble.
L'ensemble de données donné comme premier argument de position peut être un dossier de fichiers CSV ou un seul fichier CSV. Chaque fichier CSV doit contenir 4 colonnes (ID de l'entrée, doit être unique, int; texte d'origine du tweet, chaîne; texte prétraité du tweet, chaîne; horodatage: chaîne d'horodatage), pas d'en-têtes , séparateurs de virgule et citations doubles en option pour le texte. Le texte prétraité est supposé être un cas inférieur.
| identifiant | original_text | clean_text | créé_at |
|---|---|---|---|
| ID unique du tweet | Tweet en texte intégral | Texte prétraité du tweet | Timestamp de tweet |
Les mots clés sont définis dans un dictionnaire JSON où les clés sont la variante principale de chaque mot-clé et les valeurs sont des listes de variantes. Tous les mots clés doivent être des chaînes de cas inférieures. Par exemple:
{
"color" : [
" colour " ,
" color "
],
"chinese" : [
" chinese " ,
" chineze " ,
" chines "
]
}La sortie est un fichier CSV avec une colonne de date de jour (format "% y-% m-% d"), une colonne totale_count avec le nombre total quotidien de tweets dans l'ensemble de données, une colonne [mot-clé] _Count pour chaque mot-clé (sa variante principale est utilisée pour nommer la colonne) avec le nombre quotidien de tweets contenant au moins un variant de la variante principale et une colonne [mot clé] _ Colnums pour chaque variante de la variante principale et une colonne clé] La variante est utilisée pour nommer la colonne) avec la fréquence quotidienne des tweets contenant au moins une variante du mot-clé.
Par exemple, pour les mots clés définis ci-dessus:
| jour | total_count | color_count | chinois_count | color_freq | chinois_freq |
|---|---|---|---|---|---|
| date | Nombre quotidien de tweets | Nombre quotidien de tweets avec "couleur" ou une variante | Nombre quotidien de tweets avec "chinois" ou une variante | Fréquence quotidienne de tweets avec "couleur" ou une variante | Fréquence quotidienne des tweets avec "chinois" ou une variante |
Le pipeline a trois arguments de position obligatoires et un argument facultatif:
-d ou --date-format String définissant le format des dates dans l'ensemble de données. La valeur par défaut est% a% b% d% h:% m:% s% z% y ".Un exemple complet pour le point d'entrée de ligne de commande:
crane-analysis-quanti mydataset/preprocessedData keywords.json quanti_results.csv -d " %d %b %a %h:%M:%S %z %Y " Pas encore implémenté
Retour en haut
Nous accueillons toutes les contributions! Si vous avez des questions, une demande de fonctionnalité ou des commentaires, veuillez utiliser la fonctionnalité des problèmes de GitHub.
La page des problèmes fonctionne plutôt comme votre bonne ancienne page Forum, avec de nombreuses fonctionnalités supplémentaires spécifiques à la programmation et au versioning GIT. Github fournit un guide détaillé pour eux, mais voici les bases:
Vous êtes invités à soumettre des demandes de traction pour les problèmes ouverts. En particulier, les problèmes étiquetés "-raités par l'aide" sont généralement des choses avec lesquelles l'équipe principale est en difficulté. Voici les directives que nous vous demandons de suivre lors de la contribution à la base de code.
Si vous souhaitez vous impliquer davantage (en revue PRS, en planifiant de nouvelles fonctionnalités, en recherchant des méthodes d'apprentissage automatique, en faisant des recherches sur les utilisateurs, ...), vous pouvez rejoindre l'équipe principale en envoyant un e-mail à Bolduc2 (at) Hotmail (DOT) FR à intégrer. Nous accueillons des développeurs, bien sûr, mais aussi des concepteurs, des chercheurs de tous les domaines académiques, des écrivains techniques ...
Nous avons choisi d'intégrer les gens en privé au lieu de partager toutes nos ressources dans le dépôt pour deux raisons. Tout d'abord, nous voulions faciliter la recherche de projets open source plus facilement pour trouver ce dont ils ont besoin. Deuxièmement, certaines de nos ressources contiennent des informations privées de la recherche sur les utilisateurs.
Retour en haut
https://crane-toolbox.github.io/#/ est une création de site Web prototype pendant le hackathon du défi de résilience, dans le but de quantifier et de caractériser l'impact de la pandémie Covid19 sur le discours de haine sinophobe en ligne. Nous l'avons laissé en ligne comme un exemple très basique du type d'analyse des données qui pourrait être effectué avec une boîte à outils Crane.
Nous ne prévoyons pas pour le moment. En raison de la composition de l'équipe, nous avons décidé de concentrer nos efforts sur Crane Toolbox, où nous pensons que nous pouvons faire une différence.
Lachapeliere | Gianluca Stringhini ? | Marko Shiva Pavlovic | Claudio Catterina | Svetlanamd ? ? ? ? | Ian | Paul Han |
Kelly ? ? | Gabriel Ribeiro | Isaac | Tomáš Lokša | Judith Van Stegeren |
Clé emoji
Ce projet suit les spécifications de tous les contributeurs. Contributions de toute nature bienvenue!
La liste des contributeurs de hackathon pour la première phase du projet se trouve sur la page Crane DevPost.
Oui! Consultez la section contributive.
Python est un langage de programmation très courant pour les tâches d'analyse des données. Les packages sont des modules complémentaires installables à la langue Python de base. En gros, un module est un fichier avec du code Python.
Cela dit, si vous ne connaissez pas entièrement Python, vous voudrez peut-être l'expérimenter avant d'utiliser la boîte à outils Crane.
Veuillez utiliser la page des problèmes de ce dépôt. Consultez la section contributive pour plus de détails.
La boîte à outils Crane est distribuée sous la licence publique générale GNU Affero V3.0.
Vous pouvez l'utiliser comme vous le souhaitez à condition de respecter les exigences de licence: inclure une licence et un avis de droit d'auteur, énoncer les modifications que vous avez apportées, divulguer votre source (ce repo) et distribuer votre code sous la même licence. Veuillez noter que nous ne sommes pas responsables de toute utilisation que vous faites de ce code, et nous ne fournissons aucune garantie.
Veuillez créer un lien vers ce dépôt.
Le partage des ensembles de données de tweets est limité par les termes du développeur Twitter. Vous ne pourrez pas trouver des ensembles de données accessibles au public avec du contenu Tweets, mais plutôt des ensembles de données d'identification de tweet. Ceux-ci peuvent être hydratés , en utilisant par exemple l'hydrateur.
De là, cela dépend vraiment de votre sujet de recherche et de vos questions. Certains sont très sensibles au temps, certains sont moins. Si les vôtres ne sont pas très sensibles au temps, tentez votre chance avec un moteur de recherche régulier. Certains nécessitent un ensemble de données naïf , représentatif du flux d'informations complet de Twitter. Dans ce cas, votre meilleur pari est de collaborer avec une équipe de recherche effectuant des analyses fréquentes sur le contenu Twitter. Ils gardent probablement un flux en cours d'exécution pour collecter 1% des données quotidiennes Twitter. D'autres nécessitent un ensemble de données qui a déjà été filtré pour des mots clés ou des utilisateurs spécifiques. Si tel est votre cas, tentez votre chance avec un moteur de recherche régulier. Si vous n'avez pas besoin de données historiques, vous pouvez également démarrer votre propre flux Twitter pour collecter exactement les données que vous désirez.
Nous travaillons à inclure plusieurs formats d'entrée standard à notre module d'importation . Si votre format de données n'est pas pris en charge, veuillez nous contacter et nous ferons de notre mieux pour inclure la prise en charge de celui-ci dans Crane Toolbox ou vous guider pour le transformer en l'un de nos formats pris en charge.
Peut-être que nous ne le savons pas, peut-être que nous n'avons pas encore eu le temps de le mettre en œuvre, peut-être que nous choisissons de ne pas l'inclure pour une raison donnée. Veuillez nous contacter pour nous en parler. (Sauf s'il s'agit d'une méthode propriétaire avec des frais d'utilisation.)