histórias para contar

Um dos problemas básicos que envolvem a manipulação de textos consiste na contagem da frequência de palavras.

Um desafio,  originalmente proposto e resolvido por pesquisadores da Bell Laboratories, recebeu o seguinte enunciado: como processar um arquivo texto e dar como saída uma lista das n palavras mais frequentes, em ordem decrescente? Para a resolução do problema, foi utilizada a abordagem das ferramentas Unix, que consiste em reduzir um problema complexo em partes simples.

Pois bem, primeiramente, temos que converter o arquivo pdf recém-baixado no formato txt, pois o enunciado expressa claramente que o arquivo deve estar no formato texto. Para isso, utilizamos a ferramenta pdftotext – utilitário open-source de linha de comando.

Para converter o romance “Ressureição”, digite o seguinte comando no terminal e tecle enter:

$ pdftotext marm01.pdf              # “$” simboliza a linha de comando

Se você quiser converter mais de um arquivo, contido no mesmo diretório, poderá utilizar o seguinte comando:

$ for f in *.pdf;  do pdftotext “$f”; done

Tudo que precisamos fazer  é  transformar o arquivo texto em uma lista de palavras, para que possamos ordená-la e efetuar a contagem dos termos. Inicialmente, selecionamos algumas rotinas de pré-processamento:

tr  A-Z a-z                                      # converte maiúsculas em minúsculas
tr -d ‘;,—/.:”?!’                            # remove caracteres especiais, sinais de pontuação e 
tr ‘ ‘ ‘\n’                                          #  substituímos os espaços por caracteres de nova linha
sed ‘/^$/d’                                    # exclui todas as linhas em branco

Usamos o símbolo denominado pipe “|”para criar um pipeline ou conexão entre dois comandos. O pipeline abaixo converte o texto em uma longa lista de palavras:

$ pdftotext marm01.pdf – | tr -d ‘;,—/.:”?!’ | tr ‘ ‘ ‘\n’ | tr A-Z a-z | sed ‘/^$/d’

Em seguida, efetuamos os procedimentos de ordenação da lista e contagem da frequência das palavras:

sort                                               # ordena em ordem alfabética
uniq -c                                         # elimina duplicatas e exibe o número de ocorrências
sort -k1,1nr -k2                       # ordena a contagem das palavras
sed ${1:-25}q                          # imprime na tela as primeiras n linhas

Temos então um pipeline de 9 estágios, reorganizados de forma que o estágio seguinte produza um resultado de saída menor que o tamanho da entrada :

$ pdftotext marm01.pdf – |
                        tr -d ‘;,—/.:”?!’ |
                                         tr ‘ ‘ ‘\n’ |
                                          tr A-Z a-z |
                                                sed ‘/^$/d’ | 
                                                                  sort |
                                                                   uniq -c | 
                                                           sort -k1,1nr -k2 |
                                                                         sed ${1:-25}q
Anúncios

manifesto

Com todo respeito a Kant, que séculos atrás já condenava as tautologias, na forma de juízos analíticos, podemos afirmar que o computador serve para computar, isto é, realizar um tipo de cálculo também chamado processamento de informação. Apesar do sucesso estrondoso como ferramenta de interação social, defendemos a ideia de que o computador também pode ser utilizado como ambiente de aprendizagem. O objetivo deste blog, ao aliar o interesse pela literatura e  programação, consiste em promover a integração de áreas distintas para estimular novas formas de leitura dos clássicos nacionais, mediante a utilização de ferramentas livremente disponíveis nas melhores distribuições linux.

Podemos reconhecer a semelhança nas estruturas das linguagens artificiais, utilizadas para se comunicar com o computador, e as linguagens naturais, em que foram escritas as obras a serem investigadas, quanto à existência de regras sintáticas e semânticas, por exemplo. Mas podem ser notadas algumas diferenças cruciais, como por exemplo as polissemias, excluídas das primeiras. Desse modo, a aprendizagem de uma linguagem de programação pode ser entendida como um exercício de meta-aprendizagem. Existe um conjunto de ferramentas computacionais, agrupadas sob a denominação “text mining”, que inclui ferramentas de processamento de linguagem natural e análise estatísticas, dentre outras, utilizadas para explorar, agrupar, categorizar , sumarizar e extrair informações de textos não-estruturados.

Duas linguagens de scripting são amplamente utilizadas para este fim: perl e python. No primeiro caso, usamos como referência “Practical Text Mining with Perl” , de Roger Bilisoly e “Text Mining Application Programming“, de Manu Konchady. Para o segundo caso, foi utilizado como referência “Natural Language Processing with Python“, de Steven Bird, Ewan Klein e Edward Loper. Contudo, devo reconhecer minha dívida com William Turkel, autor do projeto “The Programming Historian”, introdução à linguagem python dedicada a historiadores e especialistas de outras áreas das ciências humanas.

Entretanto, utilizamos inicialmente shell script ou shell scripting, linguagem que combina um conjunto de ferramentas unix com um interpretador de comandos. As obras de referência são: “Shell Script Profissional“, do conhecido Aurélio e o famoso “Classic Shell Scripting“, de Robbins & Beebe, ao mesmo tempo em que fazemos uso de awk, ou a sua forma gnugawk, considerada uma linguagem de programação expressiva, que também fornece um conjunto de ferramentas simples e poderosas,  adequadas para tarefas de manipulação de textos.

Portanto, a defesa do nosso projeto é também uma crítica à ideia muito em voga de que basta disponibilizar computadores e estimular o uso de jogos e redes sociais, para democratizar o acesso à informática. Entendemos que os computadores podem ser utilizados para desenvolver as competências necessárias para resolução de problemas, bem como as habilidades lógico-matemáticas, comunicativas e expressivas, mediante exploração das linguagens de programação, que podem ser rápida e facilmente aprendidas e empregadas como ambiente de suporte à aprendizagem dos conteúdos relevantes para a formação curricular dos estudantes.

mãos à obra

Podemos explorar a obra de Machado em qualquer um dos dois formatos: pdf ou html. Inicialmente, vamos utilizar a primeira opção. Para baixar todos os romances do autor, abra uma sessão de terminal em sua distribuição linux favorita e digite o seguinte comando:

curl -LO machado.mec.gov.br/images/stories/pdf/romance/marm[01-10].pdf

Para reunir todos os romances em arquivo único, digite o seguinte na linha de comando:

pdftk marm[01-10].pdf output marm.pdf

Podemos também agrupar as obras do autor, de acordo com a ortodoxa convenção adotada pela crítica, reunindo em um só arquivo os romances anteriores a “Memórias Póstumas de Brás Cubas”, considerados da fase romântica:

pdftk marm[01-04].pdf output marm_fase1.pdf

Enfim, o leitor interessado poderá fazer os agrupamentos adequados ao propósito da sua pesquisa. Por ora, vamos nos ater ao romance publicado em 1872, intitulado “Ressurreição”, para introdução das principais ferramentas unix disponíveis para a investigação linguística. Aos poucos, e quando necessário, nos apropriaremos do restante da obra de Machado.