Project Crane (racismo de crisis y evaluación narrativa) tiene como objetivo apoyar a los investigadores y organizaciones antirracistas que deseen usar algoritmos de análisis de texto de vanguardia para estudiar cómo los eventos específicos afectan el discurso de odio en línea y las narrativas racistas . Crane Toolbox es un paquete de Python : una vez instalado, las herramientas en Crane están disponibles como funciones que los usuarios pueden usar en sus programas de Python o directamente a través de su terminal. Crane se dirige a los usuarios con programación básica pero sin habilidades de aprendizaje automático .
Skip a Start-start

Volver arriba
El racismo de crisis y la evaluación narrativa , o grúa para abreviar, nacieron durante el desafío de resiliencia, un hackathon impulsado por Covid19. Durante nueve semanas, un equipo interdisciplinario compuesto por estudiantes y diseñadores profesionales, programadores e investigadores de informática desarrolló un sitio web prototipo para el monitoreo en tiempo real de la retórica racista vinculada a la pandemia Covid19 . El proyecto fue propuesto por Gianluca Stringhini, Universidad de Boston, luego de su trabajo sobre la aparición temprana del comportamiento sinófobico en línea durante la pandemia Covid19 (SARS-CoV-2). Los lectores pueden encontrar más detalles sobre el enfoque adoptado para el desafío de resiliencia en la página de Devpost correspondiente y la rama de legacato de resistencia-desafío de este repositorio.
Mientras realizamos una revisión de la literatura, notamos que pocos artículos sobre el monitoreo del habla de odio en línea tenían un enfoque de investigación de sociología y herramientas recientes de procesamiento del lenguaje natural. La literatura parece estar dividida principalmente en documentos metodológicos con el objetivo de desarrollar nuevas herramientas de aprendizaje automático para detectar y caracterizar el racismo, y los enfoques de investigación de sociología tradicionales, tanto cualitativas como cuantitativas, que no aprovechan al máximo los datos y los métodos de análisis disponibles.
Somos conscientes de que esto se debe en parte a la dificultad de reunir equipos interdisciplinarios de campos muy diferentes, y en parte a la naturaleza bastante joven y precaria de la detección automatizada del discurso de odio.
Nuestras experiencias durante el hackathon nos llevan a creer que estos problemas podrían aliviarse de alguna manera al proporcionar a los investigadores de ciencias sociales herramientas fáciles de usar aprovechando los métodos de análisis y detección y análisis de discursos de odio actuales.
Crane Toolbox está diseñado para apoyar a los investigadores y organizaciones antirracistas en el estudio de cómo los eventos específicos afectan el discurso de odio en línea y las narrativas racistas . Los algoritmos de análisis de texto de vanguardia evolucionan rápidamente, y su propagación a menudo se limita al campo dedicado de la investigación en ciencias de la computación. Crane Toolbox envuelve algunos de esos métodos, que se ajustan a preguntas típicas de ciencias sociales, en herramientas fáciles de usar que no requieren habilidades de aprendizaje automático .
Crane Toolbox es un paquete Python . Una vez instalados, los usuarios pueden llamar a sus funciones en sus scripts de Python o usar las herramientas que proporciona directamente a través de su terminal. Esas herramientas se organizan en varios subackages llamados módulos. Cada módulo corresponde a un paso en la tubería de análisis general.
La primera versión de Crane Toolbox proporciona herramientas y documentación para que los usuarios filtren y formaten los datos que han extraído de Twitter (módulo de importación ), lo prepare para el análisis (módulo de preprocesamiento ), realice los análisis de su elección ( módulo de análisis ) y obtenga una representación gráfica básica de los resultados (módulo de visualización ).
Volver arriba
Esta sección es para programadores experimentados que desean sumergirse de cabeza en el fondo. Si no tienes idea de lo que estamos hablando allí, ¡no huyas gritos! Aunque la longitud de la sección de documentación del paquete podría hacerlo un poco desalentador, lo escribimos con los no especialistas en mente, por lo que debe encontrar todas las instrucciones y consejos que necesita para usar la caja de herramientas de Crane.
pip install cranetoolbox El primer paso es transformar sus datos en nuestro formato de intercambio de datos común, un archivo CSV de tres columnas. Utilizamos el módulo crane-import para realizar este paso. Toma archivos fuente que contienen un solo objeto JSON Tweet por línea y los transforma en un archivo CSV liviano. Los parámetros disponibles se detallan en la sección Módulo de importación.
crane-import --source-folder ./my_source --output-folder ./my_outputEs importante limpiar los datos de texto antes del análisis de datos. Proporcionamos una herramienta CLI para realizar este paso, con varias opciones de preprocesamiento. Los parámetros disponibles se detallan en la sección Módulo de preprocesamiento.
crane-preprocess ./my_output ./my_preproc_outputActualmente proporcionamos una sola herramienta de análisis estadístico que realiza un análisis de frecuencia básico en el conjunto de datos utilizando un conjunto proporcionado de palabras clave. Los formatos de entrada requeridos y los parámetros disponibles se detallan en la sección Módulo de análisis.
crane-analysis-quanti ./my_preproc_output keywords.json quanti_results.csvVolver arriba
Esta sección se divide en dos partes: una primera que describe cómo instalar Crane Toolbox y ejecutar sus herramientas, ya sea en modo de línea de comandos en un terminal o mediante llamadas de función en los scripts de Python; y un segundo que da detalles sobre cada módulo, en particular formato de datos y elección de parámetros.
Los usuarios avanzados pueden encontrar información adicional sobre el contenido de cada módulo en la documentación del código.
Para instalar correctamente Crane Toolbox, necesitará:
Se recomienda encarecidamente algunos conocimientos básicos en programación y líneas de comandos , pero el valiente y los estudios pueden optar por continuar sin él.
Si la lista anterior está clara para usted, omita las instrucciones de instalación. De lo contrario, lea los siguientes párrafos para preparar su entorno.
El terminal es una interfaz en la que puede escribir y ejecutar comandos basados en texto. Puede encontrar una explicación más detallada aquí e imágenes de cómo se ve una terminal aquí.
Un terminal ya está instalado en su computadora. Si está utilizando un sistema operativo basado en UNIX (ya sea MACOSX o una distribución de Linux ), se llama Terminal y vive con sus otras aplicaciones. Si está utilizando un sistema operativo de Windows, se llama símbre del sistema y se puede encontrar en su menú Inicio. Para Windows 8 y 10, se encuentra en la carpeta del sistema de Windows .
Para ejecutar un comando en el terminal, simplemente escribalo y presione Entrar.
Python 3 es un lenguaje de programación.
El proceso de instalación depende de su sistema operativo. Las instrucciones básicas se pueden encontrar en el sitio web oficial de Python, pero fácilmente encontrará guías más detalladas en Internet.
Pip es un administrador de paquetes: le ayuda a descargar los paquetes de Python y actualizarlos cuando sea necesario.
Las instrucciones básicas para su instalación se pueden encontrar en su sitio web oficial. Se usa ampliamente para que las guías paso a paso y otros recursos se encuentren fácilmente en Internet.
pip3 en su lugar. Puede verificar qué versión de pip se usa ejecutando pip --version en su terminal ( python -m pip --version para usuarios de Windows).
Recomendamos encarecidamente instalar Crane Toolbox con pip . Ejecute pip install cranetoolbox en una terminal. El comando puede llevar algo de tiempo porque pip también instalará automáticamente todos los paquetes de Python requeridos para que Crane Toolbox se ejecute. Puede verificar la lista de dependencias en la [página PYPI de Crane Toolbox] (enlace a la página PYPI).
Crane Toolbox también se puede instalar manualmente desde el código fuente disponible en este repositorio.
El modo de línea de comando es el método más fácil de usar este paquete, permite al usuario ejecutar rápidamente todas las partes del paquete y producir estadísticas utilizables en un período de tiempo muy corto.
Hay tres comandos de CLI diferentes disponibles en la caja de herramientas, son crane-import , crane-preprocess y crane-analysis-quanti . En orden, manejan la importación/transformación de datos sin procesar en un formato CSV estándar, preprocesando esos datos en un formato utilizable y finalmente calculan las frecuencias diarias de palabras clave dadas.
Para obtener detalles sobre los parámetros proporcionados en cada herramienta CLI, verifique la documentación detallada a continuación.
Este paquete ha sido escrito con reutilización en mente. Si bien las herramientas CLI son más fáciles de usar como herramientas independientes, Crane Toolbox se puede importar y utilizar dentro de otro proyecto de Python. Todas las funciones están disponibles para el usuario a través del uso estándar del paquete Python. Además, una sola función de alto nivel corresponde a cada herramienta CLI para que los usuarios puedan llamar fácilmente su tubería deseada directamente desde Python.
Se puede acceder al módulo de importación desde el punto de entrada de la línea de comandos crane-import .
El objetivo de este módulo es transformar los datos RAW de Twitter JSON en algo más manejable y liviano para su uso por el resto de la tubería. Este no es un paso requerido y podría ser realizado manualmente por el usuario o ya se ha realizado a través de alguna otra herramienta, ya que los datos se pasan entre módulos como archivos.
Este módulo puede procesar una gran cantidad de archivos grandes (múltiples gigabyte) sin depender en gran medida del intercambio o el uso de la memoria. Esto se logra leyendo archivos por fragmentos (el usuario puede especificar el número de líneas en las opciones), así como escribiendo en fragmentos. Esto asegura que solo una cierta cantidad de datos se mantenga en la memoria en cualquier momento dado.
Además, elimina los datos de tweets adicionales que no son necesarios para la tubería de análisis, reduciendo el tamaño del archivo y aumentando el rendimiento de los pasos posteriores en este paquete.
El módulo intentará leer cualquier archivo en la carpeta especificada, independientemente de la extensión, el nombre, etc. Admite cualquier formato de archivo basado en texto (.json, .csv, .txt). Además, puede manejar archivos tar comprimidos y tratar múltiples archivos o carpetas en un archivo de alquitrán determinado.tar.gz o formatos similares.
Independientemente del tipo de archivo exacto, los datos siempre deben almacenarse con un tweet del objeto JSON por línea , utilizando n como el carácter de fin de línea.
El módulo concatinará todos los archivos en un solo archivo CSV con las siguientes columnas:
| identificación | texto | creado_at |
|---|---|---|
| Identificación única de tweet | Tweet de texto completo | marca de tiempo de tweet |
El archivo CSV no tiene encabezados , separadores de coma y cotizaciones dobles opcionales para texto.
La columna de texto se selecciona dinámicamente dependiendo de si el tweet tiene más de 140 caracteres o no, para obtener más información sobre los tweets extendidos, consulte la documentación oficial sobre tweets extendidos
Si el archivo de salida ya existe, se agregará al archivo existente. En el caso de que no exista, creará uno nuevo, utilizando la ruta predeterminada ("./filtered_data.csv") si no se especifica ninguno.
El paquete de importación se puede utilizar como una herramienta de línea de comandos y admite varias opciones diferentes.
--source-folder la carpeta o archivo de origen para escanear archivos/archivos para procesar.--output-folder la carpeta para guardar la salida. La carpeta especificada debe existir. Predeterminado a ./ .--output-name El nombre, incluida la extensión, del archivo de salida. El valor predeterminado a output.csv .--text-name El nombre en el campo de texto, caso de este campo tiene un nombre diferente.--date-name El nombre en el campo Create_AT, caso de este campo tiene un nombre diferente.--id-name El nombre de identificación del nombre de identificación, este campo tiene un nombre diferente.--tweet-language El idioma de los tweets guardado en el archivo. Basado en el campo de idioma en el objeto JSON. El valor predeterminado es en .--max-lines-in-memory El número máximo de líneas que se mantendrán en la memoria. Esto se puede ajustar para optimizar el rendimiento o en las máquinas que tienen memoria limitada. El valor predeterminado a 50000 .--retweets usa este indicador para incluir retweets en el conjunto de salida. El valor predeterminado a falseUn ejemplo completo para el punto de entrada de la línea de comandos:
crane-import --source-folder tweets/november --output-folder mydataset/data --max-lines-in-memory 2000 --output-name dataset.csv Se puede acceder a la tubería de preprocesamiento desde el punto de entrada de la línea de comandos crane-preprocess .
El preprocesamiento propuesto está adaptado de Effrosynidis et al. (2017), utilizando las técnicas 9, 0, 1, 3, 5 y 7 y 4.
El conjunto de datos dado como el primer argumento posicional puede ser una carpeta de archivos CSV o un solo archivo CSV. Cada archivo CSV debe contener 3 columnas (ID de entrada, debe ser único, int; texto del tweet, cadena; marca de tiempo: cadena de marca de tiempo), sin encabezados , separadores de comas y citas dobles opcionales para el texto.
| identificación | texto | creado_at |
|---|---|---|
| Identificación única de tweet | Tweet de texto completo | marca de tiempo de tweet |
En orden y para una cadena dada, lo hará:
u002c ),-url ,-mention ,-hashtag ,punct ,-num . Los hashtags están segmentados, es decir, se separan en palabras, utilizando el paquete WordSegment.
El conjunto de datos procesado se guarda en la carpeta dada como el segundo argumento posicional. Si no existe, se creará la carpeta. Para cada archivo de entrada se genera un archivo procesado. Los nombres de los archivos se generan agregando "_PRECUPCISE" al nombre del archivo de entrada correspondiente. Cada archivo CSV contiene 4 columnas (ID de entrada, debe ser único, int; texto original del tweet, cadena; texto preprocesado del tweet, cadena ; marca de tiempo: cadena de marca de tiempo), sin encabezados , separadores de coma y citas dobles opcionales para el texto.
| identificación | Original_text | Clean_text | creado_at |
|---|---|---|---|
| Identificación única de tweet | Tweet de texto completo | texto preprocesado de tweet | marca de tiempo de tweet |
La tubería tiene dos argumentos posicionales obligatorios y cinco argumentos opcionales:
-url o --remove-url Use esta bandera para eliminar las URL de los tweets en lugar de reemplazarlas con 'URL'.-mention o --remove-mentions usan este indicador para eliminar las menciones de usuario '@userhandle' de los tweets en lugar de reemplazarlos con 'atuser'.-hashtag o --segment-hashtags usa esta bandera para segmentar hashtags en lugar de simplemente eliminar el carácter '#' anterior.-punct o --remove-punctuation Use este indicador para eliminar todos los guiones de esperanza de puntuación, en lugar de reemplazar símbolos repetidos y nuevas líneas.-num o --remove-numbers usan esta bandera para eliminar todos los números de los tweets en lugar de reemplazarlos con su versión de texto.Un ejemplo completo para el punto de entrada de la línea de comandos:
crane-preprocess mydataset/data mydataset/preprocessedData -punctActualmente, el módulo de análisis solo ofrece una tubería de análisis cuantitativo simple para calcular la frecuencia diaria de las palabras clave dadas.
Esta tubería de análisis es accesible desde el punto de entrada de la línea de comandos crane-analysis-quanti .
Calcula la frecuencia diaria de palabras clave dadas en un conjunto de datos. Permite variantes de palabras clave. Por ejemplo, las ocurrencias de "niños" y "boyz" se pueden contar juntos.
El conjunto de datos dado como el primer argumento posicional puede ser una carpeta de archivos CSV o un solo archivo CSV. Cada archivo CSV debe contener 4 columnas (ID de entrada, debe ser único, int; texto original del tweet, cadena; texto preprocesado del tweet, cadena; marca de tiempo: cadena de marca de tiempo), sin encabezados , separadores de coma y citas dobles opcionales para el texto. Se supone que el texto preprocesado es más bajo.
| identificación | Original_text | Clean_text | creado_at |
|---|---|---|---|
| Identificación única de tweet | Tweet de texto completo | texto preprocesado de tweet | marca de tiempo de tweet |
Las palabras clave se definen en un diccionario JSON donde las claves son la variante principal para cada palabra clave y los valores son listas de variantes. Todas las palabras clave deben ser cadenas más bajas. Por ejemplo:
{
"color" : [
" colour " ,
" color "
],
"chinese" : [
" chinese " ,
" chineze " ,
" chines "
]
}La salida es un archivo CSV con una columna de fecha de día (formato "%y-%m-%d"), una columna Total_Count con el número total diario de tweets en el conjunto de datos, una columna [palabra clave] _count para cada palabra clave (su variante principal se usa para nombrar la columna) con el número diario de tweets que contiene una variante de la variante de la clave y una palabra clave] _freq se usa para nombrar la columna) con el número diario de tweets que contiene al menos una variante de la clave clave y una palabra clave] _freq en la columna para el número de la columna) con el número de tweets de la variante que se usa al menos la variante de la tecla y una palabra clave] _freq para nombrar la columna) con la variedad de tweet. Nombra la columna) con la frecuencia diaria de tweets que contienen al menos una variante de la palabra clave.
Por ejemplo, para las palabras clave establecidas dadas anteriormente:
| día | Total_Count | COLOR_COUNT | Chino_Count | color_freq | chino_freq |
|---|---|---|---|---|---|
| fecha | Número diario de tweets | Número diario de tweets con "color" o una variante | Número diario de tweets con "chino" o una variante | frecuencia diaria de tweets con "color" o una variante | frecuencia diaria de tweets con "chino" o una variante |
La tubería tiene tres argumentos posicionales obligatorios y un argumento opcional:
-d o una cadena --date-format Definición del formato de fechas en el conjunto de datos. El incumplimiento es %A %B %D %H: %M: %S %Z %Y ".Un ejemplo completo para el punto de entrada de la línea de comandos:
crane-analysis-quanti mydataset/preprocessedData keywords.json quanti_results.csv -d " %d %b %a %h:%M:%S %z %Y " Aún no se ha implementado
Volver arriba
¡Agradecemos todas las contribuciones! Si tiene preguntas, una solicitud de función o algunos comentarios, utilice la función de problemas de GitHub.
La página de problemas funciona más bien como su buena página de foro antiguo, con muchas características adicionales específicas para la programación y el versiones Git. GitHub les proporciona una guía detallada, pero aquí están los conceptos básicos:
Puede enviar solicitudes de extracción de problemas abiertos. En particular, los problemas etiquetados como "de ayuda", generalmente son cosas con las que el equipo central está luchando. Estas son las pautas que le pedimos que siga al contribuir a la base de código.
Si desea involucrarse más (revisar las relaciones públicas, planificar nuevas características, investigar métodos de aprendizaje automático, hacer una investigación de usuarios, ...), puede unirse al equipo central mediante el correo electrónico a Bolduc2 (AT) Hotmail (DOT) FR para que se incorporen. Damos la bienvenida a los desarrolladores, por supuesto, pero también a los diseñadores, investigadores de todos los campos académicos, escritores técnicos ...
Hemos elegido incorporar a las personas en privado en lugar de compartir todos nuestros recursos en el repositorio por dos razones. Primero, queríamos que fuera más fácil para los usuarios que no están acostumbrados a los proyectos de código abierto para encontrar lo que necesitan. En segundo lugar, algunos de nuestros recursos contienen información privada de la investigación de usuarios.
Volver arriba
https://crane-toolbox.github.io/#/ es un sitio web prototipo construido durante el Hackathon del desafío de resiliencia, en un intento de cuantificar y caracterizar el impacto de la pandemia Covid19 en el discurso de odio sinófobico en línea. Lo dejamos en línea como un ejemplo muy básico del tipo de análisis de datos que podría llevarse a cabo con Crane Toolbox.
No planeamos en este momento. Debido a la composición del equipo, hemos decidido enfocar nuestros esfuerzos en Crane Toolbox, donde creemos que podemos marcar la diferencia.
Lacapeliere | Gianluca stringhini ? | Marko Shiva Pavlovic | Claudio Catterina | Svetlanamd ? ? ? ? | Ian | Paul Han |
Kelly ? ? | Gabriel Ribeiro | Isaac | Tomáš Lokša | Judith Van Stegeren |
Llave de emoji
Este proyecto sigue la especificación de todos los contribuyentes. ¡Contribuciones de cualquier tipo bienvenido!
La lista de contribuyentes de Hackathon para la primera fase del proyecto se puede encontrar en la página Crane Devpost.
¡Sí! Echa un vistazo a la sección contribuyente.
Python es un lenguaje de programación muy común para las tareas de análisis de datos. Los paquetes son complementos instalables al idioma básico de Python. En términos generales, un módulo es un archivo con código Python.
Dicho esto, si no está familiarizado con Python, es posible que desee experimentar con él antes de usar Crane Toolbox.
Utilice la página de problemas de este repositorio. Consulte la sección contribuyente para obtener más detalles.
Crane Toolbox se distribuye bajo GNU Affero General Public License v3.0.
Puede usarlo como desee, siempre que respete los requisitos de la licencia: incluya una licencia y un aviso de derechos de autor, indique los cambios que realizó, divulga su fuente (este repositorio) y distribuye su código bajo la misma licencia. Tenga en cuenta que no somos responsables de cualquier uso que haga de este código, y no proporcionamos garantía.
Enlace a este repositorio.
El intercambio de conjuntos de datos de tweets está restringido por los términos del desarrollador de Twitter. No podrá encontrar conjuntos de datos disponibles públicamente con tweets Content, sino más bien conjuntos de datos de ID de tweets. Esos pueden hidratarse , usando por ejemplo Hydrator.
A partir de ahí, realmente depende de su tema de investigación y preguntas. Algunos son muy sensibles al tiempo, otros son menos. Si el suyo no es muy sensible al tiempo, pruebe su suerte con un motor de búsqueda regular. Algunos requieren un conjunto de datos ingenuo , representante del flujo de información completo de Twitter. En este caso, su mejor opción es colaborar con un equipo de investigación que realiza análisis frecuentes en el contenido de Twitter. Probablemente mantengan un flujo en funcionamiento para recopilar el 1% de los datos diarios de Twitter. Otros requieren un conjunto de datos que ya se haya filtrado para palabras clave o usuarios específicos. Si ese es su caso, pruebe su suerte con un motor de búsqueda regular. Si no necesita datos históricos, también puede iniciar su propia transmisión de Twitter para recopilar exactamente los datos que desea.
Estamos trabajando para incluir varios formatos de entrada estándar en nuestro módulo de importación . Si no es compatible con su formato de datos, póngase en contacto y haremos todo lo posible para incluir soporte para TI en Crane Toolbox o guiarlo para transformarlo en uno de nuestros formatos compatibles.
Tal vez no lo sepamos, tal vez no tuvimos tiempo de implementarlo todavía, tal vez elegimos no incluirlo por una razón dada. Póngase en contacto para contarnos al respecto. (A menos que sea un método propietario con una tarifa de uso).