From b739568ff12f9acc729d31b6412983ad023dd8f2 Mon Sep 17 00:00:00 2001
From: Daniel Alves <62759376+DanielAlvesLABDH@users.noreply.github.com>
Date: Tue, 21 Jun 2022 08:36:58 +0100
Subject: [PATCH 01/72] Add files via upload
---
pt/licoes/introducao-estilometria-python.md | 707 ++++++++++++++++++++
1 file changed, 707 insertions(+)
create mode 100644 pt/licoes/introducao-estilometria-python.md
diff --git a/pt/licoes/introducao-estilometria-python.md b/pt/licoes/introducao-estilometria-python.md
new file mode 100644
index 0000000000..cc74d1e451
--- /dev/null
+++ b/pt/licoes/introducao-estilometria-python.md
@@ -0,0 +1,707 @@
+---
+title: Introdução à estilometria com Python
+layout: lesson
+slug: introducao-estilometria-python
+date: 2018-04-21
+translation_date: 2021-12-27
+authors:
+- François Dominic Laramée
+reviewers:
+- Folgert Karsdorp
+- Jan Rybicki
+- Antonio Rojas Castro
+editors:
+- Adam Crymble
+translator:
+- Daniel Bonatto Seco
+translation-editor:
+- Jimmy Medeiros
+translation-reviewer:
+- Bruno Almeida
+- Suemi HIguchi
+difficulty: 2
+review-ticket: https://github.com/programminghistorian/ph-submissions/issues/445
+activity: analyzing
+topics: [distant-reading]
+abstract: "Nesta lição, aprenderá a realizar análises estilométricas e a determinar a autoria de textos. A lição cobre três métodos: Curvas Características de Composição de Mendenhall, Método Qui-Quadrado de Kilgariff e Método Delta de John Burrows."
+original: introduction-to-stylometry-with-python
+avatar_alt: Mulher a ler junto a uma pintura
+doi: 10.46430/phpt0024
+---
+
+
+{% include toc.html %}
+
+# Introdução
+
+[Estilometria](https://en.wikipedia.org/wiki/Stylometry) é o estudo quantitativo do estilo literário por meio de métodos de [leitura distante](https://en.wikipedia.org/wiki/Distant_reading) computacional. É baseado na observação de que os autores tendem a escrever de maneiras relativamente consistentes, reconhecíveis e únicas. Por exemplo:
+
+* Cada pessoa tem seu próprio vocabulário único, às vezes rico, às vezes limitado. Embora um vocabulário mais amplo esteja geralmente associado à qualidade literária, nem sempre é esse o caso. Ernest Hemingway é famoso por usar um número surpreendentemente pequeno de palavras diferentes em sua escrita,[^1] o que não o impediu de ganhar o Prêmio Nobel de Literatura em 1954;
+* Algumas pessoas escrevem frases curtas, enquanto outras preferem blocos longos de texto compostos por muitas frases;
+* Não há duas pessoas que usem ponto-e-vírgulas, travessões e outras formas de pontuação exatamente da mesma maneira.
+
+As maneiras como os escritores usam pequenas [*function words*](https://en.wikipedia.org/wiki/Function_word), como artigos, preposições e conjunções, mostram-se particularmente reveladoras. Em uma pesquisa dos métodos estilométricos históricos e atuais, Efstathios Stamatatos aponta que as palavras funcionais são "usadas de maneira amplamente inconsciente pelos autores e são independentes do tópico"[^2]. Para a análise estilométrica, isso é muito vantajoso, visto que esse padrão inconsciente tende a variar menos no [*corpus*](https://pt.wikipedia.org/wiki/Corpus_lingu%C3%ADstico) de um autor do que seu vocabulário geral (e também é muito difícil para um pretenso falsificador copiar). As palavras funcionais também foram identificadas como marcadores importantes do gênero literário e da cronologia.
+
+Os pesquisadores têm usado a estilometria como uma ferramenta para estudar uma variedade de questões culturais. Por exemplo, uma quantidade considerável de pesquisas estudou as diferenças entre as maneiras como homens e mulheres escrevem[^3] ou sobre o que escrevem.[^4] Outros pesquisadores estudaram as maneiras como uma mudança repentina no estilo de escrita em um único texto pode indicar plágio[^5] e até mesmo a maneira como as letras dos músicos John Lennon e Paul McCartney se tornaram cada vez menos alegres e menos ativas à medida que os [Beatles](https://pt.wikipedia.org/wiki/The_Beatles) se aproximavam do fim de sua carreira de gravação na década de 1960.[^6]
+
+No entanto, uma das aplicações mais comuns da estilometria é na atribuição de autoria. Dado um texto anônimo, às vezes é possível inferir quem o escreveu medindo certas características, como o número médio de palavras por frase ou a propensão do autor de usar "todavia" em vez de "no entanto", e comparando as medidas com outros textos escritos pelo suposto autor. Este é o objetivo deste tutorial, onde a partir de um conjunto de obras clássicas de romancistas lusos e brasileiros do século XIX iremos comparar exemplares de suas obras com o estilo literário do conjunto de autores a fim de tentar inferir suas respectivas autorias (nota de tradução: foi decidido mudar o _corpus_ usado nesta lição para um que fosse culturalmente mais relevante para o público que fala e escreve português; foi mantida a restante estrutura da lição original, com excepção de ligeiras adaptações face à mudança do _corpus_).
+
+## Objetivos de aprendizado
+
+No final desta lição, teremos percorrido os seguintes tópicos:
+
+* Como aplicar vários métodos estilométricos para inferir a autoria de um texto anônimo ou conjunto de textos;
+* Como usar estruturas de dados relativamente avançadas, incluindo [dicionários](https://pt.wikipedia.org/wiki/Dicion%C3%A1rio_de_dados) de [strings](https://pt.wikipedia.org/wiki/Cadeia_de_caracteres) e dicionários de dicionários, em [Python](https://pt.wikipedia.org/wiki/Python);
+* O básico do [Natural Language Toolkit](https://www.nltk.org/) (NLTK), um módulo Python popular dedicado a [processamento de linguagem natural](https://pt.wikipedia.org/wiki/Processamento_de_linguagem_natural).
+
+## Leitura prévia
+
+Se você não tem experiência com a linguagem de programação Python ou está tendo dificuldade nos exemplos apresentados neste tutorial, o autor recomenda que você leia as lições [Trabalhando com ficheiros de texto em Python](/pt/licoes/trabalhando-ficheiros-texto-python) e [Manipular Strings com Python](/pt/licoes/manipular-strings-python). Note que essas lições foram escritas em Python versão 2, enquanto esta usa Python versão 3. As diferenças de [sintaxe](https://pt.wikipedia.org/wiki/Sintaxe) entre as duas versões da linguagem podem ser sutis. Se você ficar em dúvida, siga os exemplos conforme descritos nesta lição e use as outras lições como material de apoio. (Este tutorial encontra-se atualizado até à versão [Python 3.8.5](https://www.python.org/downloads/release/python-385/); as [strings literais formatadas](https://docs.python.org/pt-br/3.6/whatsnew/3.6.html#whatsnew36-pep498) na linha `with open(f'data/pg{filename}.txt', encoding='utf-8') as f:`, por exemplo, requerem Python 3.6 ou uma versão mais recente da linguagem.)
+
+## Materiais requeridos
+
+Este tutorial usa conjuntos de dados e software que você terá que baixar e instalar.
+
+### O conjunto de dados ###
+
+Para trabalhar nesta lição, você precisará baixar e descompactar o ficheiro [.zip](/assets/dataset_estilometria.zip) contendo as 15 obras que compõem o *corpus* que será utilizado neste tutorial. As obras foram originalmente extraídas do [Projeto Gutenberg](https://www.gutenberg.org/browse/languages/pt). Ao descompactar o ficheiro, será criada uma pasta com o nome `dados`. Este será o seu [diretório de trabalho](https://en.wikipedia.org/wiki/Working_directory) e todo o trabalho deve ser salvo aqui durante a execução da lição.
+
+### O software ###
+
+Esta lição usa as seguintes versões da linguagem Python e [bibliotecas](https://pt.wikipedia.org/wiki/Biblioteca_(computa%C3%A7%C3%A3o)):
+* [Python 3.x](https://www.python.org/downloads/) - a última versão estável é recomendada;
+* [nltk](https://www.nltk.org/) - Natural Language Toolkit, geralmente abreviado `nltk`;
+* [matplotlib](https://matplotlib.org/) - visualização de dados e geração de gráficos;
+* [re](https://docs.python.org/pt-br/3/library/re.html) - limpeza de dados via Regex (veremos durante o tutorial o porquê).
+
+Alguns desses módulos podem não estar pré-instalados em seu computador. Se você encontrar mensagens de erro como: "Módulo não encontrado" ou similares, você terá que baixar e instalar o(s) módulo(s) ausente(s). A forma mais simples de realizar esta tarefa é através do comando `pip`. Mais detalhes estão disponíveis através do tutorial do *Programming Historian* [Instalação de Módulos Python com pip](/pt/licoes/instalacao-modulos-python-pip).
+
+## Algumas notas sobre Independência Linguística
+
+Este tutorial aplica a análise estilométrica a um conjunto de textos em português (PT-PT e PT-BR) usando uma biblioteca Python chamada `nltk`. Muitas das funcionalidades fornecidas pelo `nltk` operam com outros idiomas. Contanto que um idioma forneça uma maneira clara de distinguir os limites de uma palavra, o `nltk` deve ter um bom desempenho. Idiomas como o chinês, para os quais não há distinção clara entre os limites das palavras, podem ser problemáticos. O autor original desta lição utilizou `nltk` com textos em francês sem nenhum problema; outros idiomas que usam [diacríticos](https://pt.wikipedia.org/wiki/Diacr%C3%ADtico), como espanhol e alemão, também devem funcionar bem com `nltk`. Consulte a [documentação do nltk](http://www.nltk.org/book/) para obter detalhes.
+
+Apenas uma das tarefas neste tutorial requer código dependente do idioma. Para dividir um texto em um conjunto de palavras em uma língua diferente do inglês, você precisará especificar o idioma apropriado como um parâmetro para o [tokenizador](https://en.wikipedia.org/wiki/Lexical_analysis#Tokenization) da biblioteca `nltk`, que usa o inglês como padrão. Isso será explicado no tutorial.
+
+Por fim, observe que algumas tarefas linguísticas, como [*part-of-speech tagging*](https://en.wikipedia.org/wiki/Part-of-speech_tagging), podem não ser suportadas pelo `nltk` em outros idiomas além do inglês. Este tutorial não cobre a aplicação de *part-of-speech tagging*. Se você precisar para os seus próprios projetos, consulte a [documentação do nltk](http://www.nltk.org/book/) para obter orientações.
+
+# O *corpus* - Contextualização
+
+No [exemplo original deste tutorial em inglês](/en/lessons/introduction-to-stylometry-with-python), utilizaram-se os [papéis federalistas](https://pt.wikipedia.org/wiki/O_Federalista) como um exemplo de aplicação de estilometria, utilizando as técnicas que serão apresentadas para inferir a autoria dos textos contestados dentro do conjunto de documentos que configura o *corpus*.[^7]
+Como na língua portuguesa não temos um conjunto de textos que possua estas mesmas características, no exemplo que apresentaremos traremos um total de 15 obras completas de 5 autores diferentes, três deles portugueses e dois brasileiros, todos romancistas do século XIX, disponibilizadas pelo [Projeto Gutenberg](https://www.gutenberg.org/about/). Utilizaremos duas obras de cada autor para definir seus respectivos estilos e uma terceira para constituir o conjunto de testes, para avaliarmos se as técnicas utilizadas realizarão a inferência correta de autoria através do grau de similariade de cada obra deste conjunto com o estilo obtido de cada autor.
+
+Os autores e obras utilizadas são os seguintes:
+
+| Autor | Obra 1 | Obra 2 | Obra 3 |
+| --------- | --------- | --------- | --------- |
+| [Machado de **Assis**](https://pt.wikipedia.org/wiki/Machado_de_Assis) (Brasil)| [Quincas Borba](https://www.gutenberg.org/ebooks/55682) (**55682**) | [Memorias Postumas de Braz Cubas](https://www.gutenberg.org/ebooks/54829) (**54829**) | [Dom Casmurro](https://www.gutenberg.org/ebooks/55752) (**55752**) |
+| [José de **Alencar**](https://pt.wikipedia.org/wiki/Jos%C3%A9_de_Alencar) (Brasil) | [Ubirajara](https://www.gutenberg.org/ebooks/38496) (**38496**) | [Cinco minutos](https://www.gutenberg.org/ebooks/44540) (**44540**) | [Como e porque sou romancista](https://www.gutenberg.org/ebooks/29040) (**29040**) |
+| [Camilo **Castelo Branco**](https://pt.wikipedia.org/wiki/Camilo_Castelo_Branco) (Portugal) | [Carlota Angela](https://www.gutenberg.org/ebooks/26025) (**26025**) | [Amor de Salvação](https://www.gutenberg.org/ebooks/26988) (**26988**) | [Amor de Perdição / Memórias duma Família](https://www.gutenberg.org/ebooks/16425) (**16425**) |
+| [António Feliciano de **Castilho**](https://pt.wikipedia.org/wiki/Ant%C3%B3nio_Feliciano_de_Castilho) (Portugal) | [A Chave do Enigma](https://www.gutenberg.org/ebooks/32002) (**32002**) | [A Primavera](https://www.gutenberg.org/ebooks/65021) (**65021**) | [O presbyterio da montanha](https://www.gutenberg.org/ebooks/28127) (**28127**) |
+| [Manuel Pinheiro **Chagas**](https://pt.wikipedia.org/wiki/Manuel_Pinheiro_Chagas) (Portugal) | [Historia alegre de Portugal](https://www.gutenberg.org/ebooks/29394) (**29394**) | [A Lenda da Meia-Noite](https://www.gutenberg.org/ebooks/23400) (**23400**) | [Astucias de Namorada, e Um melodrama em Santo Thyrso](https://www.gutenberg.org/ebooks/29342) (**29342**) |
+
+As partes destacadas do nome de cada autor indicam como os mesmos serão referenciados neste tutorial a partir deste ponto. Para os códigos utilizaremos o `EBook-No.` (número de referência da obra no Projeto Gutenberg), presente no nome dos ficheiros disponibilizados.
+
+# Nossos casos de teste
+
+Nesta lição, usaremos obras de romancistas brasileiros e portugueses do século XIX como um estudo de caso para demonstrar três abordagens estilométricas diferentes:
+
+1. Curvas características de composição de Mendenhall
+2. Método Qui-Quadrado de Kilgariff
+3. Método Delta de John Burrows
+
+Em todas as abordagens acima mencionadas, utilizaremos os documentos das colunas **Obra 1** e **Obra 2** para definir o estilo de cada autor. Os documentos da coluna **Obra 3** serão testados individualmente com cada um dos 5 autores para tentarmos inferir a autoria pela proximidade de estilo.
+
+# Preparando os dados para análise
+
+Antes de prosseguirmos com a análise estilométrica, precisamos carregar os ficheiros contendo todas as 15 obras em [estruturas de dados](https://pt.wikipedia.org/wiki/Estrutura_de_dados) na memória do computador.
+
+O primeiro passo neste processo é designar cada obra para o seu respectivo conjunto. Como cada obra está relacionada com o seu respectivo `EBook-No.`, podemos atribuir cada obra (valor) à chave do seu autor (ou a uma chave separada, se ela fizer parte da amostra de teste) usando um *dicionário* Python. O dicionário é um tipo de conjunto de dados composto de um número arbitrário de pares de chave-valor; neste caso, os nomes dos autores servirão como chaves (separados entre treino e teste), enquanto os `EBook-No.` das obras serão os valores associados a essas chaves.
+
+```python
+ids_obras = {
+ 'Assis' : [55752, 54829],
+ 'Alencar' : [38496, 44540],
+ 'Castelo Branco' : [26025, 26988],
+ 'Castilho' : [32002, 65021],
+ 'Chagas' : [29394, 23400],
+ 'Assis (teste)' : [55682],
+ 'Alencar (teste)' : [29040],
+ 'Castelo Branco (teste)' : [16425],
+ 'Castilho (teste)' : [28127],
+ 'Chagas (teste)' : [29342]
+}
+```
+
+Os dicionários Python são muito flexíveis. Por exemplo, podemos acessar um valor específico *indexando* o dicionário com uma de suas chaves, podemos varrer o dicionário inteiro fazendo um loop em sua lista de chaves, etc. Faremos amplo uso desta funcionalidade à medida que avançarmos.
+
+A seguir, como estamos interessados no vocabulário de cada autor, definiremos uma breve [função](https://pt.wikipedia.org/wiki/M%C3%A9todo_(programa%C3%A7%C3%A3o)) em Python que irá criar uma longa lista de palavras em cada uma das obras atribuídas a um único autor. Isso será armazenado como uma [string](https://pt.wikipedia.org/wiki/Cadeia_de_caracteres).
+Abra o seu ambiente de desenvolvimento Python escolhido. Se você não sabe como fazer isso, leia "Configurar um ambiente de desenvolvimento integrado para Python" ([Windows](/pt/licoes/instalacao-windows), [Linux](/pt/licoes/instalacao-linux), [Mac](/pt/licoes/instalacao-mac)) antes de prosseguir.
+
+```python
+# Função que compila todos os ficheiros de texto de cada grupo em uma única string
+
+import re
+
+def ler_ficheiros_para_string(ids_ficheiros):
+ global texto
+ strings = []
+ for id_ficheiro in ids_ficheiros:
+ with open(f'dados/pg{id_ficheiro}.txt',
+ encoding='utf-8') as f:
+ texto = f.read()
+ texto = re.search(r"(START.*?\*\*\*)(.*)(\*\*\* END)",
+ texto,
+ re.DOTALL).group(2)
+ strings.append(texto)
+ return '\n'.join(strings)
+```
+
+Perceba que, dentro da função, temos também uma etapa de limpeza dos textos usando [expressões regulares](https://pt.wikipedia.org/wiki/Express%C3%A3o_regular). Isso foi necessário para este corpus específico pois as obras publicadas no Projeto Gutenberg possuem uma estrutura de cabeçalho e rodapé de [metadados](https://pt.wikipedia.org/wiki/Metadados) que não pode ser considerada na análise estilométrica, uma vez que não foram redigidas pelos autores analisados. A utilização de expressões regulares não faz parte do escopo deste tutorial, então limitaremo-nos a compreender que estamos utilizando a biblioteca `re` para capturar apenas o conjunto de caracteres entre os marcadores `*** START OF THIS PROJECT GUTENBERG [NOME DA OBRA] ***` e `*** END OF THIS PROJECT GUTENBERG [NOME DA OBRA] ***` presentes em cada documento do projeto. Para maiores dúvidas sobre a utilização de expressões regulares e da biblioteca `re`, consulte a [documentação](https://docs.python.org/pt-br/3/library/re.html).
+
+Na sequência, construímos uma nova estrutura de dados chamando repetidamente a função `ler_ficheiros_para_string ()`, passando a ela uma lista diferente de documentos a cada vez. Armazenaremos os resultados em outro dicionário, este com nomes do autor/caso de teste como chaves e todo o texto dos respectivos documentos como valores. Para simplificar, iremos nos referir à string contendo uma lista de documentos como "corpus do autor".
+
+```python
+# Criar um dicionário com os corpora dos autores
+obras = {}
+for autor, ids_ficheiros in ids_obras.items():
+ obras[autor] = ler_ficheiros_para_string(ids_ficheiros)
+```
+
+Para nos certificarmos de que os ficheiros foram carregados corretamente, imprima os primeiros cem caracteres de cada entrada do dicionário na tela:
+
+```python
+for autor in obras:
+ print(obras[autor][:100])
+```
+
+Se esta operação de impressão exibir quaisquer trechos de texto no console, então a operação de leitura dos ficheiros funcionou conforme o esperado e você pode prosseguir para a análise estilométrica.
+
+
+Se os ficheiros não forem carregados, o motivo mais provável é que o seu diretório de trabalho atual não seja o repositório `dados` criado ao descompactar o ficheiro da seção de Materiais Requeridos acima; mudar o seu diretório de trabalho deve resolver o problema. Como você faz isso depende do seu ambiente de desenvolvimento Python.
+
+
+# Primeiro teste estilométrico: curvas características de composição de Mendenhall
+
+O pesquisador literário T. C. Mendenhall escreveu certa vez que a assinatura estilística de um autor pode ser encontrada contando a frequência com que usa palavras de tamanhos diferentes.[^8] Por exemplo, se contarmos os tamanhos de palavras em vários segmentos de 1.000 ou 5.000 palavras de qualquer romance e, em seguida, traçarmos um gráfico das distribuições de comprimento das palavras, as curvas pareceriam praticamente as mesmas, não importando que partes do romance tivéssemos escolhido. Na verdade, Mendenhall acreditava que se alguém contasse palavras suficientes selecionadas de várias partes da obra de toda a vida de um escritor (digamos, 100.000 ou mais), a "curva característica" de uso de comprimento de palavras do autor se tornaria tão precisa que seria constante ao longo de sua vida.
+
+Pelos padrões de hoje, contar o comprimento das palavras parece uma forma muito direta (e talvez simplista) de medir o estilo literário. O método de Mendenhall não leva em consideração as palavras do vocabulário de um autor, o que é obviamente problemático. Portanto, não devemos tratar as curvas características como uma fonte particularmente confiável de evidência estilométrica. No entanto, Mendenhall publicou a sua teoria há mais de cento e trinta anos e fez todos os cálculos à mão. É compreensível que ele tivesse optado por trabalhar com uma estatística que, embora grosseira, fosse ao menos fácil de compilar. Em honra ao valor histórico de sua tentativa inicial de estilometria, e porque a curva característica produz resultados visuais interessantes que podem ser implementados rapidamente, usaremos o método de Mendenhall como um primeiro passo em nossa exploração das técnicas de atribuição de autoria.
+
+O trecho de código necessário para calcular e exibir as curvas características para os autores e os documentos de teste é o seguinte:
+
+```python
+# Carregar nltk e matpotlib
+import nltk
+import matplotlib.pylab as plt
+
+obras_tokens = {}
+obras_distribuicao_comprimento = {}
+
+id_subplot = 1
+fig = plt.figure(figsize=(20,20))
+
+autores = list(obras.keys())
+
+for autor in autores:
+ # Transformar os corpora dos autores em listas de tokens de palavras
+ tokens = nltk.word_tokenize(obras[autor], language="portuguese")
+
+ # Filtrar pontuação
+ obras_tokens[autor] = ([token for token in tokens
+ if any(c.isalpha() for c in token)])
+
+ # Obter a distribuição de comprimentos de tokens
+ token_comprimentos = [len(token) for token in obras_tokens[autor]]
+ obras_distribuicao_comprimento[autor] = nltk.FreqDist(token_comprimentos)
+
+ # Plotar a curva característica de composição
+ lista_chaves = []
+ lista_valores = []
+
+ for i in range(1,16):
+ lista_chaves.append(i)
+ lista_valores.append(obras_distribuicao_comprimento[autor][i])
+
+ lista_valores_normalizado = [value/max(lista_valores) for value in lista_valores]
+
+ plt.subplot(5, 5, id_subplot)
+ plt.plot(lista_chaves, lista_valores_normalizado)
+ plt.xticks(lista_chaves)
+ plt.title(autor)
+ id_subplot += 1
+
+plt.savefig("stilometry_comparacao.jpeg", dpi=300, bbox_inches='tight')
+plt.show()
+```
+
+Se você estiver trabalhando em um [Jupyter Notebook](http://jupyter.org/), adicione a expressão `%matplotlib inline` após a importação das bibliotecas; caso contrário, você pode não ver os gráficos em sua tela. Se você estiver trabalhando em um [Jupyter Lab](http://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html), substitua esta expressão por `%matplotlib ipympl`.
+
+A primeira linha no trecho de código acima carrega o módulo *Natural Language Toolkit (nltk)*, que contém um número enorme de funções e recursos úteis para processamento de texto. Mal tocaremos em seus fundamentos nesta lição; se você decidir explorar mais a análise de texto em Python, recomendo fortemente que comece com [a documentação do nltk](https://www.nltk.org/).
+
+As próximas linhas configuram estruturas de dados que serão preenchidas pelo bloco de código dentro do loop `for`. Este loop faz os mesmos cálculos para todos os nossos "autores":
+
+* Invoca o método `word_tokenize()` do `nltk`, explicitando a linguagem do _corpus_ para português através do argumento `language="portuguese"`, e divide o _corpus_ em _tokens_, ou seja, palavras, números, pontuação, etc.;
+* Olha para esta lista de tokens e filtra as não-palavras;
+* Cria uma lista contendo os comprimentos de cada token de palavra restante;
+* Cria um objeto de _distribuição de frequência_ a partir dessa lista de comprimentos de palavra, basicamente contando quantas palavras de uma letra, palavras de duas letras, etc., existem no _corpus_ do autor, e em seguida realiza a normalização dessa distribuição, ou seja, ajusta todos os valores em um intervalo entre 0 e 1. Esta etapa é realizada para comparar gráficos de distribuição em _corpus_ de tamanhos diferentes de forma mais clara;
+* Plota um gráfico da distribuição de comprimentos de palavras no corpus, para todas as palavras de até 15 caracteres.
+
+Os resultados que obtemos são os seguintes:
+{% include figure.html filename="introducao-estilometria-python-01.jpeg" caption="Imagem 1: Comparação da curva de Mendenhall para cada corpus." %}
+
+Como podemos ver pelos gráficos, é possível notar diferenças (embora sutis) entre todas as 5 curvas características de cada autor (linha superior de gráficos). Ao compararmos os documentos de teste (linha inferior de gráficos) com os autores, podemos notar que a curva característica dos documentos de teste dos autores Assis, Castilho e Chagas se assemelham mais à curva dos seus respectivos autores que de qualquer outro, o que seriam inferências corretas. O documento de Alencar é o que mais diverge da curva característica do autor. Isso pode ocorrer pelo fato do documento de teste ser uma autobiografia do autor, enquanto os documentos de treino são duas obras de ficção, o que poderia influenciar no seu estilo de escrita. Veremos nas próximas abordagens se conseguimos contornar esta situação. O documento de Castelo Branco também parece não ter se assemelhado à curva característica do autor.
+
+Para além desta análise meramente visual (que pode muitas vezes induzir ao erro), podemos ter um resultado quantitativo calculando a soma das distâncias entre os valores (normalizados) de frequência de cada documento de teste com os valores de frequência do *corpus* de cada possível autor. Por consequência, o autor que possuir a menor distância de frequência com o documento de teste seria o mais provável autor deste documento. Podemos implementar isso da seguinte forma:
+
+```python
+# Dividir a lista de corpus entre autores e obras destacadas
+autores = list(obras.keys())[:5]
+obras_destacadas = list(obras.keys())[5:]
+
+obras_distribuicao_comprimento_normalizado = {}
+
+# Normalizar a distribuição de comprimentos de tokens em um novo dicionário
+for index, obra in obras_distribuicao_comprimento.items():
+ obras_distribuicao_comprimento_normalizado[index] = {k:
+ v/max(obra.values())
+ for k, v in dict(obra).items()}
+
+# Calcular a soma da diferença da distribuição entre o documento de teste e cada autor (de 1 até 15 caracteres)
+for obra in obras_destacadas:
+ for autor in autores:
+ soma_diferenca = 0
+ for i in range(1,16):
+ diferenca = abs(obras_distribuicao_comprimento_normalizado[obra][i] -
+ obras_distribuicao_comprimento_normalizado[autor][i])
+ soma_diferenca = soma_diferenca + diferenca
+ print('A soma da diferença do documento ' +
+ obra +
+ ' para o autor ' +
+ autor +
+ ' é ' +
+ str(soma_diferenca))
+ print('\n')
+```
+
+O resultado deste trecho serão 5 blocos, cada um comparando um documento com os 5 possíveis autores. Abaixo o exemplo de como o primeiro bloco deve parecer:
+
+```
+A soma da diferença do documento Assis (teste) para o autor Assis é 0.25782806530977137
+A soma da diferença do documento Assis (teste) para o autor Alencar é 0.5192643726222002
+A soma da diferença do documento Assis (teste) para o autor Castelo Branco é 0.7410205025846326
+A soma da diferença do documento Assis (teste) para o autor Castilho é 0.46876355973646266
+A soma da diferença do documento Assis (teste) para o autor Chagas é 0.3466043230715998
+```
+
+Vamos colocar os resultados dos 5 testes em uma [matriz de confusão](https://pt.wikipedia.org/wiki/Matriz_de_confus%C3%A3o) (limitando a 4 casas decimais) para avaliarmos:
+
+| | Assis | Alencar | Castelo Branco | Castilho | Chagas |
+| --------- | --------- | --------- | --------- | --------- | --------- |
+| **Assis (teste)** | **0.2578** | 0.5192 | 0.7410 | 0.4687 | 0.3466 |
+| **Alencar (teste)** | 0.9744 | **0.9844** | 0.4313 | 0.6979 | 0.7897 |
+| **Castelo Branco (teste)** | 0.2812 | 0.4436 | **0.4761** | 0.2772 | 0.2803 |
+| **Castilho (teste)** | 0.4396 | 0.4624 | 0.4114 | **0.1394** | 0.3184 |
+| **Chagas (teste)** | 0.7746 | 0.5883 | 0.6636 | 0.6732 | **0.5888** |
+
+Os documentos de teste de Assis e Castilho possuem menor valor com seus respectivos autores, o que indica a maior proximidade. Isso é condizente com a similaridade dos gráficos que vimos anteriormente. O documento de teste de Chagas teve um "empate técnico" entre o estilo do próprio autor (0.5888) e Alencar (0.5883). Tanto os documentos de teste de Alencar quanto Castelo Branco ficaram com o maior valor em relação aos seus respectivos autores, logo a técnica não foi eficaz para estes dois autores.
+
+Se não tivéssemos informações adicionais para trabalharmos, poderíamos inferir corretamente 50% da atribuição de autoria (2 acertos, 2 erros e um "empate"), o que é um resultado considerável para uma técnica relativamente simples. Felizmente, a ciência estilométrica avançou muito desde a época de Mendenhall.
+
+# Segundo teste estilométrico: método qui-quadrado de Kilgariff
+
+Em um artigo de 2001, Adam Kilgarriff[^9] recomenda o uso da estatística qui-quadrado para determinar a autoria. Leitores familiarizados com métodos estatísticos podem se lembrar que o qui-quadrado às vezes é usado para testar se um conjunto de observações (digamos, as intenções dos eleitores conforme declarado em uma pesquisa) segue uma certa [distribuição de probabilidade](https://pt.wikipedia.org/wiki/Distribui%C3%A7%C3%A3o_de_probabilidade) ou padrão. Não é isso que buscamos aqui. Em vez disso, simplesmente usaremos a estatística para medir a "distância" entre os vocabulários empregados em dois conjuntos de textos. Quanto mais semelhantes os vocabulários, mais provável é que o mesmo autor tenha escrito os textos em ambos os conjuntos. Isso pressupõe que o vocabulário de uma pessoa e os padrões de uso das palavras são relativamente constantes.
+
+Veja como aplicar a estatística para atribuição de autoria:
+
+* Pegue os corpora associados a dois autores;
+* Junte-os em um único corpus, maior;
+* Conte os tokens para cada uma das palavras que podem ser encontradas neste corpus maior;
+* Selecione as [`n`](https://pt.wikipedia.org/wiki/Amostra_(estat%C3%ADstica)) palavras mais comuns no corpus maior;
+* Calcule quantos tokens dessas `n` palavras mais comuns esperaríamos encontrar em cada um dos dois corpora originais se fossem do mesmo autor. Isso significa simplesmente dividir o número de tokens que observamos no corpus combinado em dois valores, com base nos tamanhos relativos das contribuições dos dois autores para o corpus comum;
+* Calcule uma distância qui-quadrada somando, sobre as `n` palavras mais comuns, os _quadrados das diferenças entre os números reais de tokens encontrados no corpus de cada autor e os números esperados_, divididos pelos números esperados; A Figura 2 mostra a equação para a estatística qui-quadrado, onde C(i) representa o número observado de tokens para o recurso 'i' e E(i), o número esperado para esse recurso.
+
+{% include figure.html filename="stylometry-python-6.jpg" caption="Imagem 2: Equação para a estatística qui-quadrado." %}
+
+Quanto menor o valor do qui-quadrado, mais semelhantes são os dois corpora. Portanto, calcularemos o qui-quadrado de cada documento de teste com os 5 possíveis autores: os menores valores representarão a possível autoria de cada documento (assim como vimos no primeiro exemplo).
+
+Nota: Independentemente do método estilométrico que usamos, a escolha de `n`, o número de palavras a levar em consideração, é uma espécie de arte sombria. Na literatura pesquisada por Stamatatos[^2], pesquisadores sugeriram entre 100 e 1.000 das palavras mais comuns; um projeto chegou a usar cada palavra que aparecia no corpus pelo menos duas vezes. Como diretriz, quanto maior o corpus, maior o número de palavras que podem ser usadas como elementos sem correr o risco de dar importância indevida a uma palavra que ocorra apenas algumas vezes. Nesta lição, usaremos um `n` relativamente grande para o método qui-quadrado e um menor para o próximo método. Mudar o valor de `n` certamente mudará um pouco os resultados numéricos; no entanto, se uma pequena modificação de `n` causar uma mudança na atribuição de autoria, isso é um sinal de que o teste que você está realizando não é capaz de fornecer evidências significativas sobre o seu caso de teste.
+
+O seguinte trecho de código implementa o método de Kilgariff, com as frequências das 500 palavras mais comuns no corpus conjunto sendo usadas no cálculo:
+
+```python
+# Converter os tokens para caracteres minúsculos para que a mesma palavra,
+# maiúscula ou não, conte como uma palavra
+
+for autor in autores:
+ obras_tokens[autor] = (
+ [token.lower() for token in obras_tokens[autor]])
+
+# Calcular o qui-quadrado de cada documento de teste com cada um dos 5 autores
+for obra in obras_destacadas:
+ for autor in autores:
+
+ # Primeiro, construir um corpus conjunto e identificar
+ # as 500 palavras mais frequentes nele
+ corpus_conjunto= (obras_tokens[obra] +
+ obras_tokens[autor])
+ freq_dist_conjunto = nltk.FreqDist(corpus_conjunto)
+ termos_comuns = list(freq_dist_conjunto.most_common(500))
+
+ # Que proporção do corpus conjunto é constituído pelos
+ # tokens do autor candidato?
+ autor_compartihado = (len(obras_tokens[autor])
+ / len(corpus_conjunto))
+
+ # Agora, vamos observar as 500 palavras mais frequentes no corpus do candidato
+ # e comparar o número de vezes que elas podem ser observadas
+ # ao que seria esperado se os artigos do autor e o documento de teste
+ # fossem ambas amostras aleatórias do mesmo conjunto.
+ quiquadrado = 0
+ for word,count_conjunto in termos_comuns:
+
+ # Com que frequência vemos essa palavra comum?
+ autor_count = obras_tokens[autor].count(word)
+ obra_count = obras_tokens[obra].count(word)
+
+ # Com que frequência deveríamos vê-la?
+ autor_count_esperado = count_conjunto * autor_compartihado
+ teste_count_esperado = count_conjunto * (1-autor_compartihado)
+
+ # Adicionar a contribuição da palavra para a estatística qui-quadrado
+ quiquadrado += ((autor_count-autor_count_esperado) *
+ (autor_count-autor_count_esperado) /
+ autor_count_esperado)
+
+ quiquadrado += ((obra_count-teste_count_esperado) *
+ (obra_count-teste_count_esperado)
+ / teste_count_esperado)
+
+ print("A estatística de qui-quadrado do documento",
+ obra,
+ "para o candidato",
+ autor,
+ "é =",
+ quiquadrado)
+ print("\n")
+```
+
+Assim como no primeiro exemplo, o resultado será 5 blocos de resultados, cada um para um documento de teste. O primeiro bloco se parecerá com isso:
+```
+A estatística de qui-quadrado do documento Assis (teste) para o candidato Assis é = 12266.387624251674
+A estatística de qui-quadrado do documento Assis (teste) para o candidato Alencar é = 13832.008019914058
+A estatística de qui-quadrado do documento Assis (teste) para o candidato Castelo Branco é = 15659.980573183348
+A estatística de qui-quadrado do documento Assis (teste) para o candidato Castilho é = 19458.24314684532
+A estatística de qui-quadrado do documento Assis (teste) para o candidato Chagas é = 13681.732446564287
+```
+
+
+No código acima, convertemos os tokens em minúsculas para não contar os tokens de palavras que começam com uma letra maiúscula porque aparecem no início de uma frase e os tokens minúsculos da mesma palavra como duas palavras diferentes. Às vezes, isso pode causar alguns erros, por exemplo, quando um substantivo próprio e um substantivo comum são escritos da mesma forma, exceto para maiúsculas, mas geralmente esta técnica aumenta a precisão.
+
+
+Agora, vamos dar uma olhada na matriz de confusão dos resultados para esta técnica:
+
+| | Assis | Alencar | Castelo Branco | Castilho | Chagas |
+| --------- | --------- | --------- | --------- | --------- | --------- |
+| **Assis (teste)** | **12266** | 13832| 15659 | 19458 | 13681 |
+| **Alencar (teste)** | 2550 | **3153** | 2581 | 2663 | 2765 |
+| **Castelo Branco (teste)** | 17294 | 12063 | **11187** | 18133 | 13954 |
+| **Castilho (teste)** | 11349 | 9203 | 8925 | **4531** | 7548 |
+| **Chagas (teste)** | 6683 | 5700 | 5836 | 6970 | **5332** |
+
+Como podemos observar, o teste de qui-quadrado obteve um resultado superior à curva característica de composição de Mendenhall. Assis e Castilho permanecem com a inferência correta de autoria. Chagas, que passou pelo "empate técnico" na curva de composição, com o qui-quadrado também faz a inferência correta com uma distância considerável entre os demais possíveis autores. Dos autores que não haviam sido avaliados corretamente na curva de composição, Castelo Branco possui o menor valor de qui-quadrado, outra inferência correta. Alencar, no entanto, segue como o maior valor entre os 5 possíveis autores. De qualquer forma, já passamos de 50% de acerto com a curva característica de composição para 80% com o método qui-quadrado!
+
+No entanto, o qui-quadrado ainda é um método pouco refinado. Por um lado, palavras que aparecem com muita frequência tendem a ter um peso desproporcional no cálculo final. Às vezes, isso é bom; outras vezes, diferenças sutis de estilo representadas pelas maneiras como os autores usam palavras mais incomuns passarão despercebidas.
+
+## Uma nota sobre classes gramaticais
+
+Em alguns casos e idiomas, pode ser útil aplicar a marcação de [Part-of-speech (classes gramaticais)](https://pt.wikipedia.org/wiki/Classe_gramatical) aos tokens de palavras antes de contá-los, de modo que a mesma palavra usada como duas classes gramaticais diferentes possa contar como dois elementos diferentes (por exemplo, o termo "mais" sendo usado como substantivo ou como advérbio de intensidade). Esta lição não usa marcação de classes gramaticais, mas poderia refinar os resultados em estudos de caso mais complexos.
+
+Se você precisar aplicar a marcação de classe gramatical aos seus próprios dados, poderá fazer o download de marcadores para outros idiomas, para trabalhar com uma ferramenta de terceiros como [Tree Tagger](http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/), ou mesmo para treinar o seu próprio marcador, mas essas técnicas estão muito além do escopo da lição atual.
+
+# Terceiro teste estilométrico: método Delta de John Burrows (avançado)
+
+Os primeiros dois métodos estilométricos foram mais fáceis de implementar. Este próximo, baseado na estatística *Delta* de John Burrows[^10], é consideravelmente mais complexo, tanto conceitualmente (a matemática é mais complicada) quanto computacionalmente (mais código necessário). É, no entanto, um dos métodos estilométricos mais proeminentes em uso hoje.
+
+Assim como o qui-quadrado de Kilgariff, o método Delta de Burrows é uma medida da "distância" entre um texto cuja autoria queremos averiguar e algum outro corpus. Ao contrário do qui-quadrado, no entanto, o método Delta é projetado para comparar um texto anônimo (ou conjunto de textos) com as assinaturas de vários autores diferentes ao mesmo tempo. Mais precisamente, o método Delta mede como o texto anônimo *e conjuntos de textos escritos por um número arbitrário de autores conhecidos* divergem da média de todos eles juntos. Além disso, o método Delta atribui peso igual a todas as características que mede, evitando assim o problema de palavras comuns sobrecarregarem os resultados, o que era um problema com os testes de qui-quadrado. Por todas essas razões, o método Delta de John Burrows é geralmente uma solução mais eficaz para a questão da autoria.
+
+O algoritmo original de Burrows pode ser resumido da seguinte forma:
+
+* Reúna um grande corpus composto por textos escritos por um número arbitrário de autores; digamos que o número de autores seja `x`;
+* Encontre as `n` palavras mais frequentes no corpus para usar como elementos;
+* Para cada uma dessas `n` características, calcule a participação de cada subcorpora dos `x` autores, como uma porcentagem do número total de palavras. Por exemplo, a palavra "ele" pode representar 4,72% das palavras no subcorpus do Autor A;
+* Em seguida, calcule a média e o desvio padrão desses `x` valores e use-os como a média oficial e o desvio padrão para esse elemento em todo o corpus. Em outras palavras, estaremos usando uma _média de médias_ em vez de calcular um único valor que represente a parcela de todo o corpus dado por cada palavra. Fazemos isso porque queremos evitar que um subcorpus maior tenha maior influência nos resultados a seu favor e defina a norma do corpus de tal forma que se espere que tudo se pareça com ele;
+* Para cada um dos `n` elementos e `x` subcorpora, calcule um [`z-score`](https://en.wikipedia.org/wiki/Standard_score) descrevendo o quão distante da norma do corpus está o uso desse elemento particular neste subcorpus específico. Para fazer isso, subtraia a "média das médias" de um dado elemento da frequência com que ela é encontrada no subcorpus e divida o resultado pelo seu desvio padrão. A Figura 3 mostra a equação de z-score para o elemento 'i', onde C(i) representa a frequência observada, a letra grega mu representa a média das médias e a letra grega sigma, o desvio padrão;
+
+{% include figure.html filename="stylometry-python-7.jpg" caption="Imagem 3: Equação para a estatística de z-score." %}
+
+* Em seguida, calcule os mesmos `z-scores` para cada elemento no texto para o qual queremos determinar a autoria;
+* Finalmente, calcule um *score delta* comparando o documento de teste com o subcorpus de cada candidato. Para fazer isso, tome a *média dos valores absolutos das diferenças entre os `z-scores` para cada elemento entre o documento de teste e o subcorpus do candidato*. (leia duas vezes!) Isso dá peso igual a cada elemento, não importa a frequência com que as palavras ocorram nos textos; caso contrário, os 3 ou 4 principais elementos sobrecarregariam todo o resto. A Figura 4 mostra a equação para Delta, onde Z(c,i) é o `z-score` para o elemento 'i' no candidato 'c', e Z(t,i) é o `z-score` para o elemento 'i' no caso de teste;
+
+{% include figure.html filename="stylometry-python-8.jpg" caption="Imagem 4: Equação para a estatística Delta de John Burrows." %}
+
+* O candidato "vencedor", assim como nas duas outras técnicas que aplicamos, é o autor para o qual a pontuação delta entre o subcorpus do autor e o documento de teste é a mais baixa.
+
+Stefan Evert _et al_.[^11] fornece uma discussão aprofundada das variantes, refinamentos e complexidades do método, mas nos ateremos ao essencial para os propósitos desta lição. Uma explicação diferente de Delta, escrita em espanhol, e uma aplicação a um corpus de romances espanhóis também podem ser encontradas em um artigo recente de José Calvo Tello.[^12]
+
+## Seleção de elementos
+
+Vamos combinar todos os subcorpora em um único corpus para Delta calcular um "padrão" para trabalhar. Então, vamos selecionar um número de palavras para usar como característica. Lembre-se de que usamos 500 palavras para calcular o qui-quadrado de Kilgariff; desta vez, usaremos um conjunto menor de 30 palavras (a maioria, senão todas, palavras funcionais e verbos comuns) como nossos elementos.
+
+```python
+# Combinar todos os corpora, exceto os documentos de teste, em um único corpus
+corpus_completo = []
+for autor in autores:
+ corpus_completo += obras_tokens[autor]
+
+# Obter uma distribuição de frequência
+freq_dist_corpus_completo = list(nltk.FreqDist(corpus_completo).most_common(30))
+freq_dist_corpus_completo[ :10 ]
+```
+
+Uma amostra das palavras mais frequentes e suas respectivas ocorrências parece com o seguinte:
+
+```
+[('a', 17619),
+ ('que', 17345),
+ ('de', 17033),
+ ('e', 15449),
+ ('o', 14283),
+ ('não', 7086),
+ ('do', 6019),
+ ('da', 5647),
+ ('os', 5299),
+ ('um', 4873)]
+```
+
+## Calculando elementos para cada subcorpus
+
+Vejamos as frequências de cada característica no subcorpus de cada candidato, como uma proporção do número total de tokens no subcorpus. Vamos calcular esses valores e armazená-los em um dicionário de dicionários, uma maneira conveniente de construir um [array bidimensional](https://en.wikipedia.org/wiki/Array_data_structure#Two-dimensional_arrays) em Python.
+
+```python
+# Criar uma lista com os elementos e a estrutura principal de dados
+features = [word for word,freq in freq_dist_corpus_completo]
+feature_freqs = {}
+
+for autor in autores:
+ # Criar um dicionário para os elementos de cada candidato
+ feature_freqs[autor] = {}
+
+ # Obter um valor auxiliar contendo o número de tokens no subcorpus do autor
+ geral = len(obras_tokens[autor])
+
+ # Calcular a presença de cada elemento no subcorpus
+ for feature in features:
+ presenca = obras_tokens[autor].count(feature)
+ feature_freqs[autor][feature] = presenca / geral
+```
+
+## Calculando médias de elementos e desvios-padrão
+
+Dadas as frequências de elementos para todos os subcorpora que acabamos de calcular, podemos encontrar uma "média das médias" e um desvio padrão para cada elemento. Armazenaremos esses valores em outro "dicionário de dicionários".
+
+```python
+import math
+
+# A estrutura de dados na qual iremos armazenar
+# as "estatísticas padrão do corpus"
+corpus_features = {}
+
+# Para cada elemento...
+for feature in features:
+ # Criar um subdicionário que conterá a média e o desvio padrão do elemento
+ corpus_features[feature] = {}
+
+ # Calcular a média das frequências expressas no subcorpora
+ feature_average = 0
+ for autor in autores:
+ feature_average += feature_freqs[autor][feature]
+ feature_average /= len(autores)
+ corpus_features[feature]["Mean"] = feature_average
+
+ # Calcular o desvio padrão usando a fórmula básica para uma amostra
+ feature_stdev = 0
+ for autor in autores:
+ diff = feature_freqs[autor][feature] - corpus_features[feature]["Mean"]
+ feature_stdev += diff * diff
+ feature_stdev /= (len(autores) - 1)
+ feature_stdev = math.sqrt(feature_stdev)
+ corpus_features[feature]["StdDev"] = feature_stdev
+```
+
+## Calculando z-scores
+
+Em seguida, transformamos as frequências de características observadas no subcorpora dos cinco candidatos em `z-scores`, descrevendo o quão distante da "estatística padrão do corpus" essas observações estão. Nada extravagante aqui: nós meramente aplicamos a definição do `z-score` para cada elemento e armazenamos os resultados em outro array bidimensional.
+
+```python
+feature_zscores = {}
+
+for autor in autores:
+ feature_zscores[autor] = {}
+
+ for feature in features:
+ # Definição do z-score = (value - mean) / stddev
+ # Usamos variáveis intermediárias para tornar o
+ # código mais fácil de ler
+ feature_val = feature_freqs[autor][feature]
+ feature_mean = corpus_features[feature]["Mean"]
+ feature_stdev = corpus_features[feature]["StdDev"]
+ feature_zscores[autor][feature] = ((feature_val-feature_mean) /
+ feature_stdev)
+```
+
+## Calculando elementos, z-scores e Delta para nosso caso de teste
+
+Em seguida, precisamos comparar os documentos de teste com o corpus. O seguinte trecho de código, que essencialmente recapitula tudo o que fizemos até agora, conta as frequências de cada um de nossos 30 elementos nos documentos de teste e calcula os `z-scores` de acordo.
+Por fim, usamos a fórmula para Delta definida por Burrows para extrair uma única pontuação comparando cada documento de teste com cada um dos cinco "autores candidatos". Lembre-se: quanto menor a pontuação Delta, mais semelhante a assinatura estilométrica do documento à do candidato.
+
+```python
+for obra in obras_destacadas:
+ # Tokenizar o documento de teste
+ testcase_tokens = nltk.word_tokenize(obras[obra])
+
+ # Filtrar a pontuação e colocar os tokens em minúsculas
+ testcase_tokens = [token.lower() for token in testcase_tokens
+ if any(c.isalpha() for c in token)]
+
+ # Calcular as frequências dos elementos do documento de teste
+ geral = len(testcase_tokens)
+ testcase_freqs = {}
+ for feature in features:
+ presenca = testcase_tokens.count(feature)
+ testcase_freqs[feature] = presenca / geral
+
+ # Calcular os z-scores dos elementos do documento de teste
+ testcase_zscores = {}
+ for feature in features:
+ feature_val = testcase_freqs[feature]
+ feature_mean = corpus_features[feature]["Mean"]
+ feature_stdev = corpus_features[feature]["StdDev"]
+ testcase_zscores[feature] = (feature_val - feature_mean) / feature_stdev
+
+ # Calcular Delta para cada autor
+ for autor in autores:
+ delta = 0
+ for feature in features:
+ delta += math.fabs((testcase_zscores[feature] -
+ feature_zscores[autor][feature]))
+ delta /= len(features)
+ print( "Delta score do documento",
+ obra,
+ "para o candidato",
+ autor,
+ "é =",
+ delta )
+ print("\n")
+```
+
+Como nas outras duas técnicas, o resultado serão 5 blocos de código dando o valor de Delta de cada documento para cada suposto autor. O primeiro bloco se parecerá com isso:
+
+```
+Delta score do documento Assis (teste) para o candidato Assis é = 0.8715781237572774
+Delta score do documento Assis (teste) para o candidato Alencar é = 1.2624531605759595
+Delta score do documento Assis (teste) para o candidato Castelo Branco é = 1.2303968803032856
+Delta score do documento Assis (teste) para o candidato Castilho é = 1.6276770882853728
+Delta score do documento Assis (teste) para o candidato Chagas é = 1.0527125070730734
+```
+
+Vamos avaliar todos os valores Delta na nossa matriz de confusão (reduzidos para 4 casas decimais):
+
+| | Assis | Alencar | Castelo Branco | Castilho | Chagas |
+| --------- | --------- | --------- | --------- | --------- | --------- |
+| **Assis (teste)** | **0.8715** | 1.2624 | 1.2303 | 1.6276 | 1.0527 |
+| **Alencar (teste)** | 1.9762 | **1.3355** | 1.3878 | 1.6425 | 1.5042 |
+| **Castelo Branco (teste)** | 1.004 | 1.3208 | **0.8182** | 1.5202 | 1.2829 |
+| **Castilho (teste)** | 1.5705 | 1.2553 | 1.0970 | **0.4518** | 0.8176 |
+| **Chagas (teste)** | 1.1444 | 1.0169 | 0.9462 | 0.9864 | **0.7756** |
+
+Com o método Delta, pudemos inferir corretamente 100% da autoria dos documentos de teste! Alencar, que teve o pior valor nas duas outras técnicas, aqui aparece com o menor valor entre os 5 candidatos.
+Ao utilizarmos autores brasileiros e portugueses, tínhamos em mente também a possibilidade de que a comparação entre ficheiros de autores de uma mesma nacionalidade pudessem ter valores mais próximos que entre autores de nacionalidades distintas, em função de particularidades linguísticas, o que parece que não foi o caso aqui. Por se tratarem de obras do século XIX, poderíamos buscar explicações para isso na maior similaridade das línguas na época, na influência da Academia Portuguesa no Brasil, ou mesmo do letramento e influências dos autores. Uma segunda análise com obras mais contemporâneas seria um excelente segundo passo para esta análise, e fica como sugestão para o leitor.
+
+# Leituras adicionais e recursos
+
+## Estudos de caso interessantes
+
+Estilometria e/ou atribuição de autoria têm sido utilizadas em diversos contextos, empregando diversas técnicas. Aqui estão alguns estudos de caso interessantes:
+
+* Javier de la Rosa e Juan Luis Suárez procuram o autor de um famoso romance espanhol do século XVI entre uma lista considerável de candidatos. [^13]
+* Maria Slautina e Mikhail Marusenko usam o reconhecimento de padrões em um conjunto de recursos sintáticos, gramaticais e lexicais, desde a contagem de palavras simples (com marcação de classe gramatical) a vários tipos de frases, a fim de estabelecer semelhanças estilísticas entre os textos medievais.[^14]
+* Ellen Jordan, Hugh Craig e Alexis Antonia examinam o caso de periódicos britânicos do século XIX, nos quais os artigos geralmente não eram assinados, para determinar o autor de quatro resenhas de trabalhos de ou sobre as irmãs Brontë.[^15] Este estudo de caso aplica uma versão inicial de outro método desenvolvido por John Burrows, o método Zeta, que se concentra nas palavras favoritas de um autor em vez de palavras de função comum.[^16]
+* Valérie Beaudoin e François Yvon analisaram 58 peças em verso dos dramaturgos franceses Corneille, Racine e Molière, descobrindo que as duas primeiras foram muito mais consistentes na maneira como estruturaram sua escrita do que as últimas.[^17]
+* Marcelo Luiz Brocardo, Issa Traore, Sherif Saad e Isaac Woungang aplicam [aprendizagem supervisionada](https://pt.wikipedia.org/wiki/Aprendizagem_supervisionada) e [modelos n-gram](https://pt.wikipedia.org/wiki/N-grama#Modelos_de_n_-gram) para determinar a autoria de mensagens curtas com um grande número de autores em potencial, como e-mails e tweets.[^18]
+* Moshe Koppel e Winter Yaron propõem o "método do impostor", que tenta determinar se dois textos foram escritos pelo mesmo autor, inserindo-os em um conjunto de textos escritos por falsos candidatos.[^19] Justin Anthony Stover _et al._ recentemente aplicou a técnica para determinar a autoria de um manuscrito do século II recém-descoberto.[^20]
+* Finalmente, uma equipe liderada por David I. Holmes estudou o caso peculiar de documentos escritos por um soldado da Guerra Civil ou por sua viúva que pode ter copiado intencionalmente seu estilo de escrita.[^21]
+
+## Referências adicionais sobre autoria e estilometria
+
+A referência mais exaustiva em todos os assuntos relacionados à atribuição de autoria, incluindo a história do campo, seus fundamentos matemáticos e linguísticos e seus vários métodos, foi escrita por Patrick Juola em 2007.[^22] O Capítulo 7, em particular, mostra como a atribuição de autoria pode servir como um marcador para várias identidades de grupo (gênero, nacionalidade, dialeto, etc.), para mudanças na linguagem ao longo do tempo, e até mesmo para personalidade e saúde mental.
+
+Uma pesquisa mais curta pode ser encontrada em Moshe Koppel _et al._, que discute casos em que há um único autor candidato cuja autoria deve ser confirmada, um grande número de candidatos para os quais apenas pequenas amostras de escrita estão disponíveis para treinar um algoritmo de aprendizado de máquina, ou nenhum candidato conhecido.[^23]
+
+O artigo de Stamatatos citado anteriormente[^2] também contém uma pesquisa qualitativa do campo.
+
+## Varia
+
+*Programming historians* que desejam explorar mais a estilometria podem fazer o download do pacote [Stylo](https://cran.r-project.org/web/packages/stylo/index.html),[^24] que se tornou um padrão _de facto_. Entre outras coisas, o pacote Stylo fornece uma implementação do método Delta, funcionalidade de extração de recursos e interfaces gráficas de usuário convenientes tanto para manipulação de dados quanto para produção de resultados visualmente atraentes. Observe que o Stylo é escrito em [R](https://www.r-project.org/), o que significa que você precisará do R instalado no seu computador para executá-lo, mas entre a interface gráfica do usuário e os tutoriais, pouco ou nenhum conhecimento prévio de programação R deve ser necessário.
+
+Leitores fluentes em francês interessados em explorar as implicações [epistemológicas](https://pt.wikipedia.org/wiki/Epistemologia) das interações entre métodos quantitativos e qualitativos na análise do estilo de escrita devem ler Clémence Jacquot.[^25]
+
+Surpreendentemente, os dados obtidos por meio de [reconhecimento ótico de caracteres](https://pt.wikipedia.org/wiki/Reconhecimento_%C3%B3tico_de_caracteres) (OCR) se mostraram adequados para fins de atribuição de autoria, mesmo quando os dados sofrem de altas taxas de erro de OCR.[^26]
+
+Por fim, existe um [grupo Zotero](https://www.zotero.org/groups/643516/stylometry_bibliography/items) dedicado à estilometria, onde você pode encontrar muitas outras referências a métodos e estudos.
+
+# Agradecimentos
+
+Agradecimentos a Stéfan Sinclair e Andrew Piper, em cujos seminários na Universidade McGill este projeto começou. Também agradeço à minha orientadora de tese, Susan Dalton, cuja orientação é sempre inestimável.
+
+# Notas finais
+
+[^1]: Veja, por exemplo, Justin Rice, ["What Makes Hemingway Hemingway? A statistical analysis of the data behind Hemingway's style"]( https://www.litcharts.com/analitics/hemingway)
+
+[^2]: Efstathios Stamatatos, “A Survey of Modern Authorship Attribution Method,” _Journal of the American Society for Information Science and Technology_, vol. 60, no. 3 (December 2008), p. 538–56, citation on p. 540, https://doi.org/10.1002/asi.21001.
+
+[^3]: Jan Rybicki, “Vive La Différence: Tracing the (Authorial) Gender Signal by Multivariate Analysis of Word Frequencies,” _Digital Scholarship in the Humanities_, vol. 31, no. 4 (December 2016), pp. 746–61, https://doi.org/10.1093/llc/fqv023. Sean G. Weidman e James O’Sullivan, “The Limits of Distinctive Words: Re-Evaluating Literature’s Gender Marker Debate,” _Digital Scholarship in the Humanities_, 2017, https://doi.org/10.1093/llc/fqx017.
+
+[^4]: Ted Underwood, David Bamman, e Sabrina Lee, “The Transformation of Gender in English-Language Fiction”, _Cultural Analytics_, Feb. 13, 2018, DOI: 10.7910/DVN/TEGMGI.
+
+[^5]: Sven Meyer zu Eissen e Benno Stein, “Intrinsic Plagiarism Detection,” in _ECIR 2006_, edited by Mounia Lalmas, Andy MacFarlane, Stefan Rüger, Anastasios Tombros, Theodora Tsikrika, e Alexei Yavlinsky, Berlin, Heidelberg: Springer, 2006, pp. 565–69, https://doi.org/10.1007/11735106_66.
+
+[^6]: Cynthia Whissell, “Traditional and Emotional Stylometric Analysis of the Songs of Beatles Paul McCartney and John Lennon,” _Computers and the Humanities_, vol. 30, no. 3 (1996), pp. 257–65.
+
+[^7]: Douglass Adair, "The Authorship of the Disputed Federalist Papers", _The William and Mary Quarterly_, vol. 1, no. 2 (April 1944), pp. 97-122.
+
+[^8]: T. C. Mendenhall, "The Characteristic Curves of Composition", _Science_, vol. 9, no. 214 (Mar. 11, 1887), pp. 237-249.
+
+[^9]: Adam Kilgarriff, "Comparing Corpora", _International Journal of Corpus Linguistics_, vol. 6, no. 1 (2001), pp. 97-133.
+
+[^10]: John Burrows, "'Delta': a Measure of Stylistic Difference and a Guide to Likely Authorship", _Literary and Linguistic Computing_, vol. 17, no. 3 (2002), pp. 267-287.
+
+[^11]: Stefan Evert et al., "Understanding and explaining Delta measures for authorship attribution", _Digital Scholarship in the Humanities_, vol. 32, no. suppl_2 (2017), pp. ii4-ii16.
+
+[^12]: José Calvo Tello, “Entendiendo Delta desde las Humanidades,” _Caracteres_, May 27 2016, http://revistacaracteres.net/revista/vol5n1mayo2016/entendiendo-delta/.
+
+[^13]: Javier de la Rosa and Juan Luis Suárez, “The Life of Lazarillo de Tormes and of His Machine Learning Adversities,” _Lemir_, vol. 20 (2016), pp. 373-438.
+
+[^14]: Maria Slautina e Mikhaïl Marusenko, “L’émergence du style, The emergence of style,” _Les Cahiers du numérique_, vol. 10, no. 4 (November 2014), pp. 179–215, https://doi.org/10.3166/LCN.10.4.179-215.
+
+[^15]: Ellen Jordan, Hugh Craig, e Alexis Antonia, “The Brontë Sisters and the ‘Christian Remembrancer’: A Pilot Study in the Use of the ‘Burrows Method’ to Identify the Authorship of Unsigned Articles in the Nineteenth-Century Periodical Press,” _Victorian Periodicals Review_, vol. 39, no. 1 (2006), pp. 21–45.
+
+[^16]: John Burrows, “All the Way Through: Testing for Authorship in Different Frequency Strata,” _Literary and Linguistic Computing_, vol. 22, no. 1 (April 2007), pp. 27–47, https://doi.org/10.1093/llc/fqi067.
+
+[^17]: Valérie Beaudoin e François Yvon, “Contribution de La Métrique à La Stylométrie,” _JADT 2004: 7e Journées internationales d'Analyse statistique des Données Textuelles_, vol. 1, Louvain La Neuve, Presses Universitaires de Louvain, 2004, pp. 107–18.
+
+[^18]: Marcelo Luiz Brocardo, Issa Traore, Sherif Saad e Isaac Woungang, “Authorship Verification for Short Messages Using Stylometry,” _2013 International Conference on Computer, Information and Telecommunication Systems (CITS)_, 2013, https://doi.org/10.1109/CITS.2013.6705711.
+
+[^19]: Moshe Koppel e Winter Yaron, “Determining If Two Documents Are Written by the Same Author,” _Journal of the Association for Information Science and Technology_, vol. 65, no. 1 (October 2013), pp. 178–87, https://doi.org/10.1002/asi.22954.
+
+[^20]: Justin Anthony Stover et al., "Computational authorship verification method attributes a new work to a major 2nd century African author", _Journal of the Association for Information Science and Technology_, vol. 67, no. 1 (2016), pp. 239–242.
+
+[^21]: David I. Holmes, Lesley J. Gordon, e Christine Wilson, "A widow and her soldier: Stylometry and the American Civil War", _Literary and Linguistic Computing_, vol. 16, no 4 (2001), pp. 403–420.
+
+[^22]: Patrick Juola, “Authorship Attribution,” _Foundations and Trends in Information Retrieval_, vol. 1, no. 3 (2007), pp. 233–334, https://doi.org/10.1561/1500000005.
+
+[^23]: Moshe Koppel, Jonathan Schler, e Shlomo Argamon, “Computational Methods in Authorship Attribution,” _Journal of the Association for Information Science and Technology_. vol. 60, no. 1 (January 2009), pp. 9–26, https://doi.org/10.1002/asi.v60:1.
+
+[^24]: Maciej Eder, Jan Rybicki, e Mike Kestemont, “Stylometry with R: A Package for Computational Text Analysis,” _The R Journal_, vol. 8, no. 1 (2016), pp. 107–21.
+
+[^25]: Clémence Jacquot, “Rêve d'une épiphanie du style: visibilité et saillance en stylistique et en stylométrie,” _Revue d’Histoire Littéraire de la France_ , vol. 116, no. 3 (2016), pp. 619–39.
+
+[^26]: Patrick Juola, John Noecker Jr, e Michael Ryan, "Authorship Attribution and Optical Character Recognition Errors", _TAL_, vol. 53, no. 3 (2012), pp. 101–127.
From 7214644946bfd376bb055a2226fcb0f9335220a3 Mon Sep 17 00:00:00 2001
From: Daniel Alves <62759376+DanielAlvesLABDH@users.noreply.github.com>
Date: Tue, 21 Jun 2022 08:42:14 +0100
Subject: [PATCH 02/72] Add files via upload
---
.../dataset_estilometria.zip | Bin 0 -> 1771162 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 assets/introduction-to-stylometry-with-python/dataset_estilometria.zip
diff --git a/assets/introduction-to-stylometry-with-python/dataset_estilometria.zip b/assets/introduction-to-stylometry-with-python/dataset_estilometria.zip
new file mode 100644
index 0000000000000000000000000000000000000000..d42fcd0609189a8533aa4eeff5fb09057ac0de7e
GIT binary patch
literal 1771162
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