Archive
O Mathematica é bom de texto
Introdução
Visualização está em moda. Não é para menos! Há inúmeras ferramentas disponíveis para exibir incríveis representações e uma exemplar revisão sistemática (LENGLER; EPPLER, 2007) exibe A Periodic Table of Visualization Methods. O Mathematica1 (Wolfram Mathematica), com facilidades ampliadas, não fica para trás. Como o interesse deste documento é falar sobre textos, no Mathematica, a Figura 1 mostra algumas alternativas de produzir nuvens de palavras. Para todos os gostos e finalidades.
Figura 1. Variações de nuvens de texto, no Mathematica, sobre a RFC7892 após manipulações no texto original. A função que produz cada uma das variações estão acima da respectiva imagem.
Mas, o que interessa, na realidade é indicar como o Mathematica é incrivelmente apropriado para manipular textos. Alguns exercícios foram feitos durante os estudos preliminares para a construção do WordIETF. Eles serão apresentados, sem a intenção de ensinar o uso do Mathematica.
Exercícios sobre o Mathematica
Tais exercícios foram executados sobre uma única RFC, a RFC7892. Foi uma escolha arbitrária, a partir das mais recentes. E, mais ainda, não há nenhum propósito adicional, além de mostrar que o Mathematica é bom de texto. Interpretações complementares são deixadas para o leitor.
Construindo um dicionário
Um dicionário pode ser construido através do Association. Um .Association é contruído pelo Dataset. A figura abaixo ilustra as diversas alternativas de Association, que na realidade é uma List.
Sendo uma List, uma série de funções estão disponíveis para produzir procedimentos sofisticados para manipular um dicionário. Este esforço pode ser evitado ao aproveitar uma proposta completa feita em Mangano (2010). Existe, entretanto, alguns problemas na proposta do livro, que foram corrigidas aqui, com a versão apresentada na figura abaixo.
Uma olhada na figura abaixo permite entender o uso das principais funções desta proposta de dicionário, desde sua criação até sua destruição.
Lendo arquivos textos
Entrada e saída é uma das primeiras coisas a se aprender em uma linguagem de programação. Na sua diversidade, o Mathematica é uma linguagem de programação. E ele tem muitos recursos relacionados com entrada e saída. Por exemplo, Import é uma função poderosa. Para este exercício a escolha foi pela ReadList que permite a leitura da RFC7892 em uma lista de “strings”, separadas por caracteres definidos através de WordSeparators. A aplicação está na figura abaixo, com um trecho do resultado.
Populando o WordIETF
A aplicação escolhida é simples por razões óbvias. Trata-se de popular o dicionário WordIETF com os acrônimos que aparecem na RFC7892. Pela figura acima vê-se que os acrônimos estão entre parênteses (por exemplo, IETF) e o significado deles, em tese, está nas tantas palavras que o antecedem (no exemplo do IETF, nas cinco palavras anteriores). Em linhas gerais, o nosso algoritmo deve seguir os seguintes passos:
- Ler a RFC7892 em busca de acrônimos.
- Determina o tamanho n do acrônimo encontrado
- Se o acrônimo não estiver no WordIETF, captura as n palavras anteriores e inclui o acrônimo.
- Remova o acrônimo e seu significado do conteúdo da RFC lida.
- Repita até que não haja mais acrônimos
Na figura abaixo, a preparação para o algoritmo. Em particular, a preparação do WordIETF.
Duas funções foram criadas com o objetivo de facilitar o algoritmo: verifica se é um acrônimo e retorna na lista para capturar o significado do acrônimo. Elas estão na figura que segue.
O algoritmo, que apesar de incorporar experiências pessoais, dispensa maiores comentários e está na figura a seguir.
O resultado da execução do algoritmo está na figura a seguir, em 7 repetições sobre o texto da RFC, com tempo insignificante. Na sequência, o estado do dicionário após a execução.
Comentários finais
Foram muitas as experiências com o Mathematica para manipulação de textos, até porque foi uma exigência parcial de minha última disciplina do doutorado “Tópicos Avançados de Sistemas Computacionais Adaptativos”, com o Prof. Dr. Pedro Paulo Balbi de Oliveira, a quem agradeço as orientações durante a oportunidade. Abaixo, algumas considerações adicionais da experiência e das infinitas possibilidades do Mathematica.
- Na figura abaixo, um exercício para responder a questão “Como poderia ser organizado o WordIETF?
- O Mathematica é uma linguagem de programação funcional2. A maior parte dos exemplos acima foram procedurais. O Mathematica é, também, uma linguagem de programação procedural! Mas, ela é mais eficiente em sua característica funcional. A partir da leitura da RFC, usando a função Map, para tentar retirar os acrônimos, obtemos o seguinte resultado.
Retirando as cadeias vazias:
Combinando as duas funções têm-se o problema resolvido funcionalmente:
- Muitos recursos para acesso a dicionários e sítios importantes externos estão disponíveis, como por exemplo, a Wikipedia. Duas imagens abaixo ilustram algumas alternativas.
Referências
LENGLER, R.; EPPLER, M. J. Towards a periodic table of visualization methods for management. In: IASTED Proceedings of the Conference on Graphics and Visualization in Engineering (GVE 2007), Clearwater, Florida, USA. [S.l.: s.n.], 2007.
MANGANO, S. Mathematica Cookbook. [S.l.]: “O’Reilly Media, Inc.”, 2010.
- http://www.wolfram.com/mathematica/
- https://maryrosecook.com/blog/post/a-practical-introduction-to-functional-programming
s