O Project Crane (racismo de crise e avaliação narrativa) visa apoiar pesquisadores e organizações anti-racistas que desejam usar algoritmos de análise de texto de última geração para estudar como eventos específicos afetam o discurso de ódio on-line e narrativas racistas . Crane Toolbox é um pacote Python : uma vez instalado, as ferramentas em Crane estão disponíveis como funções que os usuários podem usar em seus programas Python ou diretamente através de seu terminal. O Crane tem como alvo os usuários com programação básica, mas sem habilidades de aprendizado de máquina .
Pule para o início rápido

De volta ao topo
O racismo de crise e a avaliação narrativa , ou guindaste , nasceu durante o desafio de resiliência, um hackathon orientado pela Covid19. Durante nove semanas, uma equipe interdisciplinar composta por estudantes e designers profissionais, programadores e pesquisadores de ciência da computação desenvolveu um site de protótipo para monitoramento em tempo real da retórica racista ligada à pandemia Covid19 . O projeto foi proposto por Gianluca Stringhini, Universidade de Boston, após seu trabalho sobre o surgimento precoce do comportamento sinofóbico on-line durante a pandemia CoVID19 (SARS-COV-2). Os leitores podem encontrar mais detalhes sobre a abordagem adotada para o Desafio de Resiliência na página de DevPost correspondente e o ramo de perseguição de resiliência e desafio deste repositório.
Ao fazer a revisão da literatura, notamos que poucos trabalhos sobre monitoramento de discursos de ódio on -line tinham uma abordagem de pesquisa sociológica e ferramentas recentes de processamento de linguagem natural. A literatura parece estar dividida principalmente em artigos metodológicos, com o objetivo de desenvolver novas ferramentas de aprendizado de máquina para detectar e caracterizar o racismo e as abordagens tradicionais de pesquisa em sociologia, qualitativas e quantitativas, que não aproveitam ao máximo os métodos de dados e análise disponíveis.
Estamos cientes de que isso se deve em parte à dificuldade de reunir equipes interdisciplinares de campos muito diferentes e, em parte, à natureza bastante jovem e precária da detecção automatizada de discursos de ódio.
Nossas experiências durante o hackathon nos levaram a acreditar que essas questões podem ser um pouco aliviadas, fornecendo aos pesquisadores de ciências sociais que estão amigando as ferramentas que aproveitam o mais robusto dos métodos atuais de detecção e análise de discursos de ódio.
A Crane Toolbox foi projetada para apoiar pesquisadores e organizações anti-racistas no estudo de como eventos específicos afetam o discurso de ódio on-line e as narrativas racistas . Os algoritmos de análise de texto de última geração evoluem rapidamente, e sua propagação é frequentemente limitada ao campo dedicado da pesquisa em ciências da computação. A Crane Toolbox envolve alguns desses métodos, que se encaixam em perguntas típicas das ciências sociais, em ferramentas amigáveis que não requerem habilidades de aprendizado de máquina .
Crane Toolbox é um pacote Python . Depois de instalado, os usuários podem chamar suas funções em seus scripts Python ou usar as ferramentas que ele fornece diretamente através do terminal. Essas ferramentas são organizadas em vários sub-pacotes chamados módulos. Cada módulo corresponde a uma etapa no pipeline de análise geral.
A primeira versão da Crane Toolbox fornece ferramentas e documentação para os usuários filtrarem e formatarem os dados que eles extraíram do Twitter (módulo de importação ), preparam -os para análise (módulo de pré -processamento ), realize as análises de sua escolha ( módulo de análise ) e obtenha uma representação gráfica básica dos resultados (módulo de visualização ).
De volta ao topo
Esta seção é para programadores experientes que desejam mergulhar de cabeça no fundo do fundo. Se você não tem ideia do que estamos falando lá, por favor, não fuja gritando! Embora a duração da seção de documentação do pacote possa torná-la um pouco assustadora, nós a escrevemos com não especialistas em mente, para encontrar todas as instruções e conselhos necessários para usar a caixa de ferramentas Crane.
pip install cranetoolbox A primeira etapa é transformar seus dados em nosso formato de troca de dados comuns, um arquivo CSV de três colunas. Usamos o módulo crane-import para executar esta etapa. Ele leva arquivos de origem que contêm um único objeto JSON Tweet por linha e os transforma em um arquivo CSV leve. Os parâmetros disponíveis são detalhados na seção de módulos de importação.
crane-import --source-folder ./my_source --output-folder ./my_outputÉ importante limpar os dados de texto antes da análise dos dados. Fornecemos uma ferramenta CLI para executar esta etapa, com várias opções de pré -processamento. Os parâmetros disponíveis são detalhados na seção de módulos de pré -processamento.
crane-preprocess ./my_output ./my_preproc_outputAtualmente, fornecemos uma única ferramenta de análise estatística que executa uma análise básica de frequência no conjunto de dados usando um conjunto fornecido de palavras -chave. Os formatos de entrada necessários e os parâmetros disponíveis são detalhados na seção Módulo de análise.
crane-analysis-quanti ./my_preproc_output keywords.json quanti_results.csvDe volta ao topo
Esta seção é dividida em duas partes: uma primeira descrevendo como instalar a Crane Toolbox e executar suas ferramentas, no modo de linha de comando em um terminal ou através de chamadas de função nos scripts Python; e um segundo fornecendo detalhes sobre cada módulo, em particular o formato de dados e a opção de parâmetros.
Usuários avançados podem encontrar informações adicionais sobre o conteúdo de cada módulo na documentação do código.
Para instalar com sucesso a Crane Toolbox, você precisará:
Algum conhecimento básico em programação e linhas de comando é fortemente recomendado , mas os corajosos e os estudiosos podem optar por prosseguir sem.
Se a lista acima estiver clara para você, pule para as instruções de instalação. Caso contrário, leia os parágrafos a seguir para preparar seu ambiente.
O terminal é uma interface na qual você pode digitar e executar comandos baseados em texto. Você pode encontrar uma explicação mais detalhada aqui e fotos de como é um terminal aqui.
Um terminal já está instalado no seu computador. Se você estiver usando um sistema operacional baseado em UNIX ( Macosx ou uma distribuição Linux ), ele é nomeado terminal adequadamente e vive com seus outros aplicativos. Se você estiver usando um sistema operacional do Windows, ele é nomeado prompt de comando e poderá ser encontrado no menu Iniciar. Para o Windows 8 e 10, ele está localizado na pasta do sistema Windows .
Para executar um comando no terminal, basta digitar -o e pressionar Enter.
Python 3 é uma linguagem de programação.
O processo de instalação depende do seu sistema operacional. As instruções básicas podem ser encontradas no site oficial do Python, mas você encontrará facilmente guias mais detalhados na Internet.
O PIP é um gerenciador de pacotes: ajuda a baixar pacotes Python e atualizá -los quando necessário.
As instruções básicas para sua instalação podem ser encontradas em seu site oficial. É amplamente utilizado para que os guias passo a passo e outros recursos sejam facilmente encontrados na Internet.
pip3 . Você pode verificar qual versão do pip é usada executando pip --version no seu terminal ( python -m pip --version para usuários do Windows).
Recomendamos fortemente a instalação da caixa de ferramentas Crane usando pip . Execute pip install cranetoolbox em um terminal. O comando pode levar algum tempo, porque pip também instalará automaticamente todos os pacotes Python necessários para que a Crane ToolBox seja executada. Você pode verificar a lista de dependências na [Página Pypi da Crane Toolbox] (link para a página Pypi).
A caixa de ferramentas Crane também pode ser instalada manualmente a partir do código -fonte disponível neste repositório.
O modo de linha de comando é o método mais fácil de usar este pacote, ele permite ao usuário executar rapidamente todas as partes do pacote e produzir estatísticas utilizáveis em um período muito curto de tempo.
Existem três comandos diferentes da CLI disponíveis na caixa de ferramentas, eles são crane-import , crane-preprocess e crane-analysis-quanti . Para lidar com os dados brutos de importação/transformação em um formato CSV padrão, pré -processando esses dados em um formato utilizável e finalmente calculando as frequências diárias das palavras -chave especificadas.
Para obter detalhes sobre os parâmetros fornecidos em cada ferramenta da CLI, verifique a documentação detalhada abaixo.
Este pacote foi escrito com reutilização em mente. Embora as ferramentas da CLI sejam mais fáceis de usar como ferramentas independentes, a Crane Toolbox pode ser importada e usada em outro projeto Python. Todas as funções estão disponíveis para o usuário através do uso padrão do pacote Python. Além disso, uma única função de alto nível corresponde a cada ferramenta da CLI para que os usuários possam chamar facilmente o pipeline desejado diretamente do Python.
O módulo de importação é acessível a partir do ponto de entrada da linha de comando crane-import .
O objetivo deste módulo é transformar dados brutos do Twitter JSON em algo mais gerenciável e leve para uso pelo restante do pipeline. Esta não é uma etapa necessária e pode ser executada manualmente pelo usuário ou já foi feita por meio de outra ferramenta, pois os dados são passados entre os módulos como arquivos.
Este módulo pode processar um grande número de arquivos grandes (múltiplos gigabyte) sem depender muito do uso de troca ou memória. Isso é realizado através da leitura de arquivos por pedaços (o usuário pode especificar o número de linhas nas opções), além de escrever em pedaços. Isso garante que apenas uma certa quantidade de dados seja mantida na memória a qualquer momento.
Além disso, ele remove os dados extras de tweet que não são necessários para o pipeline de análise, reduzindo o tamanho do arquivo e aumentando o desempenho das etapas posteriores neste pacote.
O módulo tentará ler qualquer arquivo na pasta especificada, independentemente da extensão, nome, etc. Ele suporta qualquer formato de arquivo baseado em texto (.json, .csv, .txt). Além disso, ele pode lidar com arquivos tar comprimidos e tratar vários arquivos ou pastas em um determinado arquivo alcatrão.tar.gz ou formatos similares é suportado.
Independentemente do tipo de arquivo exato, os dados sempre devem ser armazenados com um tweet de objeto JSON por linha , usando n como o caractere de fim de linha.
O módulo concatenará todos os arquivos em um único arquivo CSV com as seguintes colunas:
| eu ia | texto | criado_at |
|---|---|---|
| ID exclusivo de tweet | Tweet de texto completo | Timestamp de Tweet |
O arquivo CSV não possui cabeçalhos , separadores de vírgula e citações duplas opcionais para texto.
A coluna de texto é selecionada dinamicamente, dependendo se o tweet tiver mais de 140 caracteres ou não, para obter mais informações sobre tweets estendidos, consulte a documentação oficial sobre tweets estendidos
Se o arquivo de saída já existir, ele anexará ao arquivo existente. No caso de não existir, criará um novo, usando o caminho padrão ("./Filtered_Data.csv") se nenhum for especificado.
O pacote de importação pode ser usado como uma ferramenta de linha de comando e suporta várias opções diferentes.
--source-folder A pasta ou arquivo de origem para digitalizar arquivos/arquivos para processar.--output-folder a pasta para salvar a saída. A pasta especificada deve existir. Padrões para ./ .--output-name O nome, incluindo extensão, do arquivo de saída. Padrões para output.csv .--text-name O nome do campo de texto, caso este campo tem um nome diferente.--date-name O nome Create_at Field, Case Este campo tem um nome diferente.--id-name O nome do campo de identificação, case, este campo tem um nome diferente.--tweet-language O idioma dos tweets salvos no arquivo. Com base no campo de idiomas no objeto JSON. Padrões para en .--max-lines-in-memory O número máximo de linhas que serão mantidas na memória. Isso pode ser ajustado para otimizar o desempenho ou em máquinas com memória limitada. Padrão para 50000 .--retweets Use este sinalizador para incluir retweets no conjunto de saída. Padrões para falseUm exemplo completo para o ponto de entrada da linha de comando:
crane-import --source-folder tweets/november --output-folder mydataset/data --max-lines-in-memory 2000 --output-name dataset.csv O pipeline de pré-processamento é acessível a partir do ponto de entrada da linha de comando crane-preprocess .
O pré -processamento proposto é adaptado de Effrosynidis et al. (2017), usando técnicas 9, 0, 1, 3, 5 e 7 e 4.
O conjunto de dados fornecido como o primeiro argumento posicional pode ser uma pasta de arquivos CSV ou um único arquivo CSV. Cada arquivo CSV deve conter 3 colunas (ID da entrada, deve ser exclusivo, int; texto do tweet, String; Timestamp: string de timestamp), sem cabeçalhos , separadores de vírgula e cotações duplas opcionais para texto.
| eu ia | texto | criado_at |
|---|---|---|
| ID exclusivo de tweet | Tweet de texto completo | Timestamp de Tweet |
Em ordem e para uma determinada string, ela será:
u002c ),-url for especificado,-mention for especificado,-hashtag for especificado,punct for especificado,-num for especificado. As hashtags são segmentadas, ou seja, separadas em palavras, usando o pacote WordSigment.
O conjunto de dados processado é salvo na pasta fornecida como o segundo argumento posicional. Se não existir, a pasta será criada. Para cada arquivo de entrada, um arquivo processado é gerado. Os nomes dos arquivos são gerados anexando "_preproceded" ao nome do arquivo de entrada correspondente. Cada arquivo CSV contém 4 colunas (ID da entrada, deve ser exclusivo, int; texto original do tweet, string; texto pré -processado do tweet, string ; timestamp: string de timestamp), sem cabeçalhos , separadores de vírgula e citações duplas opcionais para texto.
| eu ia | original_text | limpo_text | criado_at |
|---|---|---|---|
| ID exclusivo de tweet | Tweet de texto completo | Texto pré -processado de tweet | Timestamp de Tweet |
O oleoduto possui dois argumentos posicionais obrigatórios e cinco argumentos opcionais:
-url ou --remove-url Use este sinalizador para remover URLs dos tweets em vez de substituí -los por 'URL'.-mention OU --remove-mentions Use este sinalizador para remover o usuário mencionado '@UserHandle' dos tweets em vez de substituí -los por 'atuser'.-hashtag ou --segment-hashtags usam esse sinalizador para segmentar hashtags em vez de simplesmente remover o caractere '#' anterior.-punct ou --remove-punctuation Use este sinalizador para remover todas as pontuações Espere hífens, em vez de substituir os símbolos e linhas recém -nascidas repetidas.-num ou --remove-numbers Use este sinalizador para remover todos os números dos tweets em vez de substituí -los por sua versão de texto.Um exemplo completo para o ponto de entrada da linha de comando:
crane-preprocess mydataset/data mydataset/preprocessedData -punctAtualmente, o módulo de análise oferece apenas algum pipeline de análise quantitativa simples para calcular a frequência diária de palavras -chave especificadas.
Este pipeline de análise é acessível a partir do ponto de entrada da linha de entrada crane-analysis-quanti .
Ele calcula a frequência diária de palavras -chave especificadas em um conjunto de dados. Permite variantes de palavras -chave. Por exemplo, ocorrências de "meninos" e "boyz" podem ser contadas juntas.
O conjunto de dados fornecido como o primeiro argumento posicional pode ser uma pasta de arquivos CSV ou um único arquivo CSV. Cada arquivo CSV deve conter 4 colunas (ID da entrada, deve ser exclusivo, int; texto original do tweet, string; texto pré -processado do tweet, string; timestamp: string de timestamp), sem cabeçalhos , separadores de vírgula e cotações duplas opcionais para texto. Presume-se que o texto pré-processado seja mais baixo.
| eu ia | original_text | limpo_text | criado_at |
|---|---|---|---|
| ID exclusivo de tweet | Tweet de texto completo | Texto pré -processado de tweet | Timestamp de Tweet |
As palavras -chave são definidas em um dicionário JSON, onde as teclas são a variante principal para cada palavra -chave e os valores são listas de variantes. Todas as palavras-chave devem ser strings de baixo caso. Por exemplo:
{
"color" : [
" colour " ,
" color "
],
"chinese" : [
" chinese " ,
" chineze " ,
" chines "
]
}The output is a CSV file with a day date column (format "%Y-%m-%d"), a total_count column with the daily total number of tweets in the dataset, a [keyword]_count column for each keyword (its main variant is used to name the column) with the daily number of tweets containing at least one variant of the keyword and a [keyword]_freq column for each keyword (its main A variante é usada para nomear a coluna) com a frequência diária de tweets contendo pelo menos uma variante da palavra -chave.
Por exemplo, para as palavras -chave definidas acima:
| dia | total_count | color_count | Chinês_count | color_freq | Chinês_freq |
|---|---|---|---|---|---|
| data | Número diário de tweets | Número diário de tweets com "cor" ou uma variante | Número diário de tweets com "chinês" ou uma variante | Frequência diária de tweets com "cor" ou uma variante | Frequência diária de tweets com "chinês" ou uma variante |
O pipeline tem três argumentos posicionais obrigatórios e um argumento opcional:
-d ou --date-format que define o formato das datas no conjunto de dados. O padrão é %a %b %d %h: %m: %s %z %y ".Um exemplo completo para o ponto de entrada da linha de comando:
crane-analysis-quanti mydataset/preprocessedData keywords.json quanti_results.csv -d " %d %b %a %h:%M:%S %z %Y " Ainda não implementado
De volta ao topo
Congratulamo -nos com todas as contribuições! Se você tiver dúvidas, uma solicitação de recurso ou algum feedback, use o recurso de problemas do GitHub.
A página de problemas funciona como sua página do Bom Old Fórum, com muitos recursos adicionais específicos para programação e versão do Git. O Github fornece um guia detalhado para eles, mas aqui estão o básico:
Você pode enviar solicitações de tração para questões abertas. Em particular, os problemas marcados com "busca de ajuda" geralmente são coisas com as quais a equipe principal está lutando. Aqui estão as diretrizes que solicitamos que você siga ao contribuir para a base de código.
Se você deseja envolver -se ainda mais (revisando o PRS, planejando novos recursos, pesquisando métodos de aprendizado de máquina, fazendo pesquisas de usuário, ...), você pode ingressar na equipe principal enviando um e -mail para o Bolduc2 (at) Hotmail (DOT) FR para ficar a bordo. Congratulamo -nos com desenvolvedores, é claro, mas também designers, pesquisadores de todos os campos acadêmicos, escritores técnicos ...
Optamos para a bordo de pessoas em particular, em vez de compartilhar todos os nossos recursos no repositório por dois motivos. Primeiro, queríamos facilitar para os usuários não usados para abrir projetos de código para encontrar o que precisam. Segundo, alguns de nossos recursos contêm informações privadas da pesquisa de usuários.
De volta ao topo
https://crane-toolbox.github.io/#/ é um site de protótipo construído durante o desafio de resiliência Hackathon, na tentativa de quantificar e caracterizar o impacto da pandemia covid19 no discurso de ódio sinofóbico on-line. Deixamos -o on -line como um exemplo muito básico do tipo de análise de dados que pode ser realizada com a Crane Toolbox.
Não planejamos no momento. Devido à composição da equipe, decidimos concentrar nossos esforços na Crane Toolbox, onde acreditamos que podemos fazer a diferença.
Lachapeliere | Gianluca Stringhini ? | Marko Shiva Pavlovic | Claudio Catterina | Svetlanamd ? ? ? ? | Ian | Paul Han |
Kelly ? ? | Gabriel Ribeiro | Isaac | Tomáš Lokša | Judith Van Stegeren |
Chave Emoji
Este projeto segue a especificação de todos os contribuintes. Contribuições de qualquer tipo de boas -vindas!
A lista de colaboradores de hackathon para a primeira fase do projeto pode ser encontrada na página Crane DevPost.
Sim! Confira a seção contribuinte.
O Python é uma linguagem de programação muito comum para tarefas de análise de dados. Os pacotes são complementos instaláveis para a linguagem básica do Python. Girando falando, um módulo é um arquivo com código Python.
Dito isto, se você não estiver familiarizado com o Python, convém experimentá -lo um pouco antes de usar o Crane Toolbox.
Por favor, use a página de problemas deste repositório. Confira a seção contribuinte para obter mais detalhes.
A Crane Toolbox é distribuída sob licença pública geral da GNU Affero v3.0.
Você pode usá -lo como desejar, desde que respeite os requisitos de licença: inclua um aviso de licença e direitos autorais, indique as alterações que você fez, divulgue sua fonte (este repositório) e distribua seu código com a mesma licença. Observe que não somos responsáveis pelo uso que você faz deste código e não fornecemos garantia.
Por favor, link para este repositório.
O compartilhamento de conjuntos de dados de tweets é restrito pelos termos do desenvolvedor do Twitter. Você não poderá encontrar conjuntos de dados disponíveis ao público com conteúdo de tweets, mas conjuntos de dados de IDs de tweet. Eles podem ser hidratados , usando, por exemplo, hidratador.
A partir daí, depende realmente do seu tópico de pesquisa e perguntas. Alguns são muito sensíveis ao tempo, outros são menos. Se o seu não for muito sensível ao tempo, tente sua sorte com um mecanismo de pesquisa regular. Alguns exigem um conjunto de dados ingênuos , representativo do fluxo de informações completo do Twitter. Nesse caso, sua melhor aposta é colaborar com uma equipe de pesquisa fazendo análises frequentes no conteúdo do Twitter. Eles provavelmente mantêm um fluxo funcionando para coletar 1% dos dados diários do Twitter. Outros exigem um conjunto de dados que já foi filtrado para palavras -chave ou usuários específicos. Se esse for o seu caso, tente sua sorte com um mecanismo de pesquisa regular. Se você não precisar de dados históricos, também poderá iniciar seu próprio fluxo do Twitter para coletar exatamente os dados desejados.
Estamos trabalhando para incluir vários formatos de entrada padrão no nosso módulo de importação . Se o seu formato de dados não for suportado, entre em contato e faremos o possível para incluir suporte para ele na Crane Toolbox ou guiá -lo para transformá -lo em um de nossos formatos suportados.
Talvez não saibamos disso, talvez ainda não tivéssemos tempo para implementá -lo, talvez optemos por não incluí -lo por um determinado motivo. Entre em contato para nos contar sobre isso. (A menos que seja um método proprietário com uma taxa de uso.)