tcc-latex/htmlable.tex

1164 lines
117 KiB
TeX

\documentclass[a4paper,12pt]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[portuguese]{babel}
\usepackage{lmodern,textcomp}
\usepackage{amssymb}
\usepackage{lastpage} % Usado pelo exemplo de ficha catalográfica
\usepackage[%
alf,%
abnt-emphasize = bf,%
abnt-etal-list = 3, % trabalhos com mais de 3 autores recebem et al.,;
abnt-etal-text = it, % escreve o et al., em italico;
abnt-and-type = &, % usa o carater '&' no lugar de 'e' para mais de um autor;
abnt-last-names = abnt, % trata sobrenomes 'estritamente' conforme a ABNT; e
abnt-repeated-author-omit = no % autores com + de uma entrada recebem '____.'
]{abntex2cite}
\usepackage{microtype} % para melhorias de justificação
\usepackage{morefloats} % permite mais floats
\usepackage{listings}
\usepackage{blindtext} % para gerar texto aleatório (dummy text)
\usepackage{tikz}
\usetikzlibrary[topaths]
\usepackage{mathtools}
\usepackage{xcolor}
\usepackage{csquotes}
\usepackage{colortbl}
\usepackage{graphicx}
\usepackage{nameref}
\usepackage{times}
\newcommand*\aspas[1]{\textquotedblleft{}#1{}\textquotedblright{}}
\newcommand*\fonte[1]{\textbf{Fonte:}{} #1}
\newcommand{\omissis}{[\dots\unkern]}
\newenvironment{citacao}{\begin{citation}}{\end{citation}\ignorespacesafterend}
\newenvironment{quadro}{\begin{table}}{\end{table}\ignorespacesafterend}
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Introdução}
\label{cha:intro}
Neste capítulo, será apresentada uma breve contextualização do tema e a motivação deste trabalho (a seguir), seguido da justificativa, a qual explicita a lacuna que este trabalho busca solucionar (seção \ref{jus}), os objetivos gerais e específicos deste trabalho (seção \ref{sec:obj}), que buscam preencher a lacuna explicitada, e, por fim, uma breve descrição da organização dos capítulos seguintes (seção \ref{txtorg}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\section{Motivação}
%\label{sec:intro:motiv}
Dominar o próprio idioma é um requisito essencial a qualquer indivíduo que viva em sociedade.
%
Tal domínio é necessário tanto para exercer a cidadania plena, quanto para atuar profissionalmente.
%
Neste último caso, existem termos específicos que variam de acordo com a profissão e colegas de ofício esperam que seus pares conheçam.
%
Por exemplo, profissionais atuantes no ramo jurídico utilizam termos específicos à área, tais como \textit{habeas corpus}, abroquelar, cártula chéquica, areópago, fulcro e estipêndio funcional; no ramo médico, os termos poderiam ser incisão, febrífugo, benigno, ejunorrafia ou abdução.
%
Isso pode ser um problema na comunicação entre profissionais de diferentes áreas que desconhecem completamente a área do outro: \aspas{CSRF}, para um contador, é sigla para Contribuições Sociais Retidas na Fonte; para um desenvolvedor, é sigla para \textit{Cross-Site Request Forgery}, um tipo de fraude que algumas aplicações \textit{web} são vulneráveis.
%
Aprender uma nova área de atuação profissional não envolve apenas o \aspas{saber fazer}, mas também o \aspas{saber comunicar-se}, já que muitas vezes é necessário compreender as ordens dos superiores, redigir relatórios e emitir declarações.
%
A aquisição de um repertório a ser utilizado é necessária para o uso do idioma cotidianamente para que exista uma comunicação entre o indivíduo e seus diversos interlocutores.
%
De modo semelhante ao âmbito profissional, o ensino de uma língua estrangeira também depende do aprendizado de novas palavras e seus respectivos significados.
Para auxiliar a aprendizagem de uma língua estrangeira (\citeauthor{anthony2013critical}, \citeyear{anthony2013critical}; \citeauthor{oliveira2009linguistica}, \citeyear{oliveira2009linguistica}; \citeauthor{granger1998tag}, \citeyear{granger1998tag} apud \citeauthor{sardinha2000linguistica}, \citeyear{sardinha2000linguistica}) ou para fins específicos \cite{oliveira2009linguistica} como no cotidiano profissional, a análise de \textit{corpus} de textos é uma técnica que pode ser utilizada.
%
Segundo \citeonline{sardinha2000linguistica}, Thorndike publicou em 1921 um trabalho que fez uso desta técnica, o qual identificou as palavras mais frequentes de língua inglesa e \aspas{[...] impulsionou mudanças no ensino de língua materna e estrangeira, tanto nos Estados Unidos quanto na Europa [...]} (p. 236), onde \aspas{durante boa parte do século XX [...] muitos pesquisadores [...] se dedicaram à descrição da linguagem por meio de \textit{corpora}\footnote{\textit{Corpora} é o plural de \textit{corpus}, que é um conjunto de textos relevante para estudar um determinado grupo de pessoas ou um ramo do conhecimento \cite[p. 358]{tagnin2010glossario}.}, [...] [que] eram coletados, mantidos e analisados manualmente [...]} (p. 235).
%
Apesar dos benefícios, no século XX, a velocidade e os custos de propagação da informação ainda eram elevados.
Com o desenvolvimento tecnológico das telecomunicações, os custos de acesso à informação reduziram, o tempo até a obtenção da informação reduziu a frações de segundo e possibilitou que o tráfego da informação também aumentasse em volume.
%
Uma dessas tecnologias de telecomunicações é a internet, que possibilita que repositórios de conhecimento, plataformas de entretenimento e aplicações de interação social coexistam e apresentem funcionalidades em tempo-real, caso programadas para tal.
%
De acordo com uma pesquisa do \citeonline{cetic2016pesquisa}, 51\% do total de domicílios possuem acesso à internet, 86\% dos alunos acessaram a internet ao menos uma vez no último trimestre a pesquisa e 95\% dos professores possuíam acesso à internet em casa.
%
Isso vem gerando uma crescente pervasividade da internet na vida das pessoas.
Não foi apenas no contexto das telecomunicações que a tecnologia se desenvolveu. A velocidade de processamento também cresceu de tal forma que trabalhos manuais tais como a contagem de palavras ou busca em textos, por exemplo, puderam ser automatizados de forma que seu tempo ser reduzido vertiginosamente.
%
A exemplo, um computador portátil Toshiba 2250XCDS, de 2000, vinha equipado com um disco rígido de 6GB, 64MB de RAM e um processador de 600MHz de um único núcleo \cite{toshiba2000specs}, e um computador portátil CCE n325, de 2013, vinha equipado com um disco rígido de 500GB (83 vezes o anterior), 2GB de RAM (32 vezes o anterior) e um processador 1.8GHz de dois núcleos (6 vezes o anterior) \cite{cce2013manual}.
%
Logo, o poder de processamento das máquinas vendidas ao consumidor final, no varejo, aumentou muito, o que permite aplicações mais complexas.
Quanto ao poder de processamento remoto, o \textit{Google Cloud Platform} oferece gratuitamente o que chama de \textit{Cloud Launcher} \cite{google2018gcp}.
%
Tal serviço gratuito consiste de uma máquina virtual com IP estático, 30GB de armazenamento secundário, 0.6GB de RAM, 1 CPU virtual que recebe 20\% do tempo da CPU da máquina real e 1GB de tráfego mensal de saída para fora da América do Norte, Austrália ou China \cite{google2018gcppricing}.
%
Um pré-requisito para a criação da conta é adicionar um cartão de crédito que não seja pré-pago.
%
Portanto, os custos de realizar processamento remoto num servidor pode ser nulo dependendo do problema a ser resolvido e das tecnologias utilizadas.
Resgatando as aplicações anteriormente mencionadas, segundo \citeonline{anthony2013critical}, \citeonline{oliveira2009linguistica}, \apudonline{granger1998tag}{sardinha2000linguistica} e \citeonline{sardinha2000linguistica}, hoje, tanto a montagem de \textit{corpora} quanto seu processamento são, ambos, tarefas menos trabalhosas que no passado.
%
No início do século XX, haviam os custos de adquirir periódicos, requisitar cópias de artigos a bibliotecas, organizar todo o material para enfim dedicar tempo sobre o material de estudo.
%
Hoje em dia, existem à disposição sites de notícias, ferramentas de indexação de páginas da internet, de artigos científicos, dentre outras, que podem ser utilizadas como fonte para a construção do material de estudo.
%
Além disso, hoje as pessoas se comunicam abertamente por meios eletrônicos de forma que é possível estudar o uso da língua pelas pessoas na informalidade do cotidiano, sendo possível até analisar o sentimento da massa de pessoas a respeito dum determinado assunto.
%
Por isso, fica evidente que hoje é bem mais fácil obter material para estudo que antigamente.
Com essa abundância de recursos a baixo custo e de informações acessíveis e baratas, é de se supor que exista uma igual abundância de ferramentas gratuitas para pesquisar tal área do conhecimento, tanto locais (executadas no próprio dispositivo) quanto de internet (executadas em um servidor com interface visível através de um navegador), mas isso não acontece.
%
Na próxima subseção (\ref{jus}) apresentaremos a contribuição almejada por este trabalho.
%Com base nesse contexto, este trabalho propõe a criação de um sistema na nuvem, ou seja, na internet, para pesquisa e análise de coleções de textos com exemplos significativos de uso da língua portuguesa.
%
%Esta ferramenta será útil para auxiliar o estudo da língua como realmente é usada.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Justificativa}
\label{jus}
Atualmente, existem ferramentas capazes de processar \textit{corpora}, dentre elas pode-se destacar o \textit{Word Smith}, o \textit{Unitex/GramLab} e o \textit{Sketch Engine}, que são voltadas ao pesquisador linguista enquanto usuário final.
%
Destes, apenas o segundo é distribuído gratuitamente com funcionalidade plena e apenas o terceiro possui uma interface \textit{web}; inexistindo uma gratuita e com funcionalidade simultaneamente.
%
Tal lacuna justifica a criação de outra ferramenta que apresente tais características desejáveis.
A criação de uma nova ferramenta baseada em computador requer a delimitação de sua plataforma-alvo, que pode se tornar um fator limitador a seu público alvo.
%
Com a grande diversidade de sistemas operacionais \textit{desktop} (como, por exemplo, \textit{Windows}, \textit{MacOS} e \textit{Linux}) e de dispositivos móveis (como, por exemplo, \textit{Android}, \textit{iOS} e \textit{Windows Phone}), e uma aplicação comum nestes é um navegador de internet.
%
Portanto, desenvolver uma aplicação de internet significa possuir uma única base de código que atenda simultaneamente a todas as plataformas que possuem um navegador de internet, além de atingir um grande número de pessoas em território nacional nas quantidades mencionadas anteriormente.
\begin{table}[h]
\caption{Tabela comparativa resumida de \textit{softwares} de Processamento de Linguagem Natural}
\hspace*{0mm}\centerline{\includegraphics[width=\textwidth ,height=\textheight ,keepaspectratio]{tabela-comparacao-cs/model.pdf}}
\fonte{O autor}
\label{tab:compplnres}
\end{table}
Apresentada a ideia central do sistema, esta pode ser condensada visualmente numa tabela ao mesmo tempo que mostra os principais atributos de seus similares.
%
A tabela \ref{tab:compplnres} traz a ferramenta proposta em sua última linha (\textit{Corpus Slayer}, destacada em fundo amarelo).
%
Com isso, os objetivos deste trabalho podem ser formalizados na seção a seguir (\ref{sec:obj}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Objetivos}
\label{sec:obj}
\subsection{Geral}
\label{obj:ger}
Desenvolver uma aplicação \textit{web} de código aberto para marcação e busca de partes do discurso em \textit{corpora}, visando ampliar as funcionalidades em relação a \textit{softwares} similares existentes e com interface amigável ao usuário.
\subsection{Específicos}
\label{obj:esp}
\begin{itemize}
\item Analisar comparativamente os recursos das ferramentas \textit{WordSmith}, \textit{CorpusEye}, \textit{COCA Online Corpus}, \textit{Unitex/GramLab} e \textit{Sketch Engine}.
\item Desenvolver ou adaptar um módulo separador de sentenças.
\item Desenvolver ou adaptar um módulo que obtenha a lista de palavras de um texto.
\item Desenvolver ou adaptar um módulo etiquetador de partes do discurso que atue sobre sentenças.
\item Desenvolver ou adaptar um módulo concordanciador\footnote{Concordanciador é o \aspas{programa que extrai todas as ocorrências de uma palavra de busca num \textit{corpus} juntamente com seu cotexto \omissis{}} \cite[p. 358]{tagnin2010glossario}.} que suporte busca por etiquetas.
\item Integrar os módulos desenvolvidos ou adptados numa aplicação \textit{web}.
\item Disponibilizar uma ferramenta livre para uso educacional.
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Organização do texto}
\label{txtorg}
No capítulo 2, será apresentado um histórico, os principais conceitos e alguns trabalhos relevantes da área de processamento da linguagem natural. No capítulo 3, serão apresentados os materiais e os métodos utilizados para desenvolver este trabalho, bem como as decisões relevantes ao desenvolvimento do projeto. No capítulo 4, serão apresentados e discutidos os resultados obtidos. No capítulo 5, serão apresentados a conclusão, as contribuições deste trabalho e temas para trabalhos futuros.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Referencial Teórico}
\label{cha:ref}
Neste capítulo, são apresentados os conceitos relativos ao processamento de linguagem natural, numa revisão histórica da área e seu progresso, e o atual estado da arte com seus requisitos para o progresso.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Revisão histórica}
% Revisão da literatura::Revisão histórica da área
% Revisão da literatura::Progresso na área
%
A linguística de \textit{corpus}, segundo \citeonline{sardinha2000linguistica}, já existe desde a Antiguidade, citando o \textit{Corpus} Helenístico de Alexandre, O Grande, e os \textit{corpora} de citações da Bíblia produzidos durante a Antiguidade e a Idade Média, sendo seus processos de obtenção e análise tarefas que não dependem dum computador para serem executadas. Um \textit{corpus} é uma \aspas{coletânea de textos [...] compilados segundo critérios específicos para o estudo a que se propõem} \cite[p. 358]{tagnin2010glossario}, e estes buscam representar a linguagem \cite{cambria2014jumping}, ou uma variante desta \cite{sardinha2000linguistica}, podendo ser usada como forma de obtenção de informações nas mensagens nelas codificadas. \citeonline{sardinha2000linguistica} evidencia que \aspas{durante boa parte do século XX [...] os \textit{corpora} [...] eram coletados, mantidos e analisados manualmente [...]} (p. 235), o que mudou com a invenção do computador, que se popularizou na década de 1960.
Ainda enquanto trabalho manual, é possível citar o trabalho de contagem de 4,5 milhões de palavras realizada manualmente por Thorndike \cite{sardinha2000linguistica}, cujo produto foi uma lista de frequência de palavras. Uma das possíveis aplicações da linguística é extrair palavras-chave, esta que \citeonline{tagnin2010glossario} define como sendo \aspas{resultados da comparação entre o \textit{corpus} de estudo e um \textit{corpus} de referência} (p. 359), sendo um processo baseado em contagem, o qual \aspas{elimina palavras com frequência relativa similar nos dois \textit{corpora} de modo que restem as palavras cuja frequência é estatisticamente significativa} (p. 359), podendo as frequências terem sido calculadas computacionalmente ou manualmente. \citeonline{cambria2014jumping} ressaltam que processos de obtenção automática de palavras-chave buscam apenas na \aspas{superfície} do texto, exemplificando que um texto sobre cães pode apenas mencionar as diversas raças, não sendo recuperado caso indexado por suas palavras-chave.
Em fevereiro de 1957, foi publicada a obra \textit{Syntactic Structures} de Noam Chomsky, que, de acordo com \citeonline{sardinha2000linguistica}, mudou o paradigma de abordagem na linguística, saindo o empirismo e entrando o racionalismo; ou seja, a análise de volumosos \textit{corpora} de textos, que era sujeito a inúmeras falhas, deu lugar a \aspas{[...] teorias racionalistas da linguagem [...], notadamente a linguística gerativa. [...]}\cite[pp. 236-237]{sardinha2000linguistica}. Esta abordagem se popularizou principalmente no início da década de 1960, quando o computador se popularizou.
Com a popularização do computador, representar nele a linguagem foi necessária, e uma abordagem de solução para esta necessidade foi modelá-la como uma gramática gerativa de Chomsky \cite{chaves2014sistema, cambria2014jumping}. Um dos desafios encontrados foi resolver ambiguidades, que foi solucionado usando autômatos gerados a partir de um tratamento estatístico de ocorrências para a criação dum modelo probabilístico para a etiquetagem de palavras (partes do discurso) \cite{vieira2001linguistica, thiele2015desambiguaccao}. Todavia, tal abordagem desconsidera que uma sequência de palavras pode significar mais que a soma dos significados de cada palavra individual. Entidades Nomeadas são referências de mais de uma palavra que referenciam uma única entidade \apud[]{nadeau2007survey}{bruckschen2010reconhecimento}. Segundo \citeonline{aranha2006tecnologia}, o reconhecimento destas no texto se dá através de perguntas como \aspas{Quem, Quando, Como, Onde} (p. 6). \citeonline{bruckschen2010reconhecimento} menciona datas, números e unidades monetárias como elementos do texto comumente inclusas como entidades nomeadas, sendo que \citeonline{aranha2006tecnologia} também incluem siglas. A união da identificação prévia de entidades nomeadas à representação das sentenças como autômatos é uma abordagem para tentar solucionar tal problema.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Estado da arte}
% Revisão da literatura::Estado da arte
% Revisão da literatura::Revisão de resultados relevantes
% Revisão da literatura::Requisitos para o progresso na área [talvez seja melhor ignorar este]
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nesta seção o foco é o estado da arte do processamento automático de \textit{corpora}, indicando como os problemas do passado são resolvidos atualmente. Primeiramente será apresentado o que os gerenciadores de \textit{corpus} modernos armazenam sobre seus documentos na seção \ref{ea:gc}, em seguida será abordado uma classe de etiquetadores, os etiquetadores morfossintáticos, que podem ser relevantes se aplicados sobre os \textit{corpora} para uma compreensão inicial da estrutura do idioma em estudo, na seção \ref{ea:em}.
\subsection{Gerenciadores de \textit{corpora}}
\label{ea:gc}
De acordo com \apudonline[p. 49]{biber1995dimensions}{oliveira2009linguistica}, \aspas{um \textit{corpus} linguístico de base computacional corresponde a coleções de textos que ocorrem naturalmente na língua, organizadas sistematicamente para representar áreas de uso da língua, e das quais podemos extrair novas informações}. Tal organização pode seguir critérios diversos, mas é esperado que estes estejam anotados no texto. \citeonline{aluisio2006constroi} mencionam a ferramenta \textit{Lácio-Ref}, a qual visa fornecer metadados para os textos, para estes serem futuramente processados. Tais metadados são: título, subtítulo, língua, fonte, editor, local de publicação, comentários, nome do(s) autor(es), sexo do(s) autor(es), gênero e tipo textual \cite{aluisio2006constroi}. Outra ferramenta é o \textit{AntCorGen}, de \citeonline{anthony2017antcorgen}, a qual visa manter organizados \textit{corpus} de texto através de categorias, subcategorias e seus metadados, tais como: título, autor, seção \aspas{resumo}, seção \aspas{introdução}, seção \aspas{materiais e métodos}, seção \aspas{resultados e discussão}, seção \aspas{conclusões}, seção \aspas{referências}, afiliações do autor e legendas de figuras e tabelas. Os metadados mencionados ajudam a descrever o contexto ao qual texto está inserido.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Etiquetadores morfossintáticos}
\label{ea:em}
Segundo \citeonline{silva2014indexacao}, o atual estado da arte para etiquetadores morfossintáticos da língua portuguesa é o \textit{PALAVRAS}, de \citeauthoronline{bick2000parsing}. É uma gramática de restrições que, carregada no \textit{software} \textit{CG-3}, realiza o etiquetamento automático de textos. Possui uma taxa de acerto de 94\% em relação aos seus próprios resultados, e 86,5\% se comparado a uma extração manual \cite[p. 169]{silva2014indexacao}. O etiquetador \textit{CG-3} é mantido como \textit{software} livre e distribuído pelo projeto de pesquisa e desenvolvimento \textit{Visual Interactive Syntax Learning} (VISL) do Instituto de Línguas e Comunicação (ISK) da Universidade do Sul da Dinamarca (SDU), já a gramática é paga.
Dentre os etiquetadores morfossintáticos gratuitos, \citeonline{silva2014indexacao} destaca o \textit{LX-Parser}. Este possui uma taxa de acerto de 75\% em relação aos seus próprios resultados, e 97,5\% se comparado a uma extração manual \cite[p. 170]{silva2014indexacao}. Apesar de gratuito, sua licença é de redação própria \cite{lxparserlicense} e, em sua cláusula 6, proíbe a distribuição e comercialização de produtos ou serviços derivados, já em sua cláusula 7, veta a disponibilização da ferramenta por outros meios e a cláusula 9 veta o acesso de outros \textit{sites} à ferramenta; portanto, a licença da ferramenta permite apenas sua descarga e execução local.
Outro projeto é o \textit{Unitex/GramLab}, que teve sua versão em português brasileiro foi primeiramente apresentada por \citeauthoronline{muniz2005unitex} em \citeyear{muniz2005unitex}. Consiste de uma interface gráfica em Java que faz chamadas a bibliotecas e utilitários de linha de comando compilados de códigos em C++. A licença do \textit{software} é a \textit{Lesser General Public License} versão 2.1 \cite{lgplv21}, já seus recursos linguísticos estão sob a \textit{Lesser General Public License For Linguistic Resources} \cite{lgpllr}, ambas licenças livres. O pacote redistribuível padrão já fornece ferramentas e dados complementares necessários para etiquetar um texto de entrada arbitrário. Outros recursos da mesma plataforma são busca por autômato, busca por expressão regular, representação do texto como autômato, inferência de entidades nomeadas e aplicação de transdutores \cite{paumier2016user}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \centerline{\fbox{\includegraphics[width=0.8\linewidth]{mapaConc/pd1-conceitosMaisRelevantesAoTema.pdf}}}
% \centerline{\fbox{\includegraphics[width=0.8\linewidth]{mapaConc/pd1-referencialTeorico.pdf}}}
%
% ---
% \hline
%
\section{Trabalhos Correlatos}
Nesta seção, serão apresentados alguns trabalhos considerados similares a este ou cujo produto pode ser usado neste (fazendo deste trabalho uma continuação do anterior), estando o de \citeonline{silva2014indexacao} na subseção \ref{ssec:rt:tc:silva2014}, o de \citeonline{chaves2014sistema} na subseção \ref{ssec:rt:tc:chaves2014}, o de \citeonline{bick2000parsing} na subseção \ref{ssec:rt:tc:bick2000}, o da \citeonline{sitefloresta2010home} na subseção \ref{sec:refteo:floresta} e o da \citeonline{aires2000implementacao} na subseção \ref{sec:refteo:aires}.
\subsection{Indexação automática por meio da extração e seleção de sintagmas nominais em textos em língua portuguesa}
\label{ssec:rt:tc:silva2014}
Diferentemente da língua inglesa, segundo \citeonline{silva2014indexacao} (p. 155) \aspas{pesquisas [...] em língua portuguesa ainda não atingiram um grau de amadurecimento elevado [...] pois elas não alcançam uma taxa de precisão elevada para todos os tipos de \textit{corpus}.} Dada a escassez de ferramentas eficazes para processamento da língua portuguesa, o referido autor comparou três etiquetadores morfossintáticos (\textit{OGMA}, \textit{PALAVRAS} e \textit{LX-PARSER}) e constatou que cada um possui suas peculiaridades de modo a existir situações nas quais alguns se destacam e outras em que apresentam dificuldades. Tais ferramentas comparadas eram as principais ferramentas existentes até 2014, que seriam utilizadas caso suas respectivas licenças assim permitissem e executassem no servidor.
\subsection{Sistema identificador de sintagmas verbais do PB}
\label{ssec:rt:tc:chaves2014}
A língua portuguesa possui sintagmas nominais, verbais, adjetivais e preposicionados \cite{gagnon2000processamento}. Os verbais podem ser analisados conforme proposto por \citeonline{chaves2014sistema}, que propõem a utilização do \aspas{[...] formalismo da gramática livre de contexto [...], comumente utilizado na linguística computacional para a implementação de protótipos capazes de modelar a estrutura sintagmática de uma língua natural} (p. 2), sendo definido pelos próprios autores como \aspas{um protótipo com resultados interessantes} (p. 3) que precisa ser melhorado. Os autores apontam sem mencionar valores numéricos que o que precisa ser melhorado é a quantidade de estruturas reconhecidas pela gramática definida e a taxa de acerto na etiquetagem dos textos. Tal trabalho fornece uma ferramenta para obtenção automática da análise sintagmática, mas que necessita de aprimoramentos e quantificações numéricas quanto sua eficácia.
É uma abordagem diferente da utilizada neste trabalho pois trabalha sobre sintagmas (comumente modelado computacionalmente como uma árvore de palavras) ao invés de sentenças (comumente modelado computacionalmente como uma lista de palavras). Com o resultado declarado, o trabalho contribuiu para evitar a adoção de uma metodologia que possuísse o reconhecimento de uma complexa estrutura do texto como uma preocupação.
\subsection{O sistema de análise \aspas{PALAVRAS}: Análise Gramatical Automática do Português em uma framework de gramática de restrição}
\label{ssec:rt:tc:bick2000}
Com uma taxa de acerto na ordem de 99\% para morfologia e entre 96\% e 97\% para sintaxe para processamento de texto livre, uma das adaptações necessárias feitas por Bick no modelo da língua inglesa para operar para a língua portuguesa foi a \aspas{introdução de marcadores de dependência a nível de cláusula [...] e a introdução de funções de marcação de subcláusula para subcláusulas finitas e não-finitas}\cite[p. 438]{bick2000parsing}, em que algumas descobertas para a língua inglesa parecem se manter para a língua portuguesa, tais como: milhares de regras são necessárias para cada nível adicional de análise, as sentenças que excluem significado são mais frequentes que as que buscam e a determinação do contexto concentra-se mais à esquerda da sentença. Tal tese explicita as principais diferenças entre o processamento sintagmático das línguas inglesa e portuguesa, bem como suas diferenças e adaptações necessárias para se adequar à língua e ainda assim manter uma alta taxa de acerto.
% Uma união das abordagens listadas por \citeauthoronline{silva2014indexacao} e das desenvolvidas por \citeauthoronline{bick2000parsing}, \citeauthoronline{chaves2014sistema}, a fim de obter resultados mais precisos, será utilizada neste trabalho.
\subsection{Floresta Sintáctica}
\label{sec:refteo:floresta}
O projeto Floresta Sintáctica se define como \aspas{\omissis{} um \aspas{treebank} para a língua portuguesa, ou seja, um conjunto de itens sintacticamente analisados e publicamente disponível \omissis{}}, sendo \aspas{\omissis{} um projecto de colaboração entre a Linguateca e o projecto VISL, com textos portugueses e brasileiros, anotados automaticamente pelo \textit{PALAVRAS} \cite{bick2000parsing} e revistos por linguistas} \cite{sitefloresta2010home}. A tabela \ref{tab:matflosint} traz o material disponibilizado pelo projeto Floresta Sintáctica. Tal projeto é relevante para este trabalho enquanto provedor de recursos linguísticos anotados, mas sua licença de uso não é explicitada exceto pela base de dados denominada \aspas{Amazônia}, que é distribuída sob a licença \aspas{CC BY-NC-SA 3.0 BR} \cite{sitefloresta2016levantamento}.
\begin{table}[h]
\caption{O material usado no projeto Floresta Sintáctica}
\hspace*{0mm}\centerline{\includegraphics[width=0.9\textwidth,height=0.9\textheight,keepaspectratio]{tabela-fs-mat/model.pdf}}
\fonte{\citeonline{sitelinguateca2009floresta}}
\label{tab:matflosint}
\end{table}
\subsection{Implementação, adaptação, combinação e avaliação de etiquetadores para o português do Brasil}
\label{sec:refteo:aires}
O \citeonline{nilc2012nilctaggers} da Universidade de São Paulo mantém público, desde novembro de 2000, um \textit{corpus} anotado com 51 etiquetas (sendo 15 delas de pontuação) em 103674 palavras divididas ao longo de 4726 sentenças, além dos arquivos de treino para uso nos etiquetadores \textit{MXPOST}, \textit{TreeTagger} e \textit{Brill Tagger}. Tais recursos (exceto os três últimos etiquetadores) são produtos da dissertação de \citeonline{aires2000implementacao}, a qual contempla uma comparação de precisão entre os diferentes etiquetadores analisados (vide tabela \ref{tab:airescomp}).
\begin{table}[h]
\caption[Comparação da precisão entre três etiquetadores]{Comparação da precisão entre os etiquetadores \textit{MXPOST}, \textit{Brill Tagger} e \textit{Tree Tagger}}
\begin{center}
\begin{tabular}{c|c}
\hline
Etiquetador & Precisão \\
\hline
\hline
MXPOST & $89,66\%$ \\
\hline
Brill Tagger & $88.76\%$ \\
\hline
Tree Tagger & $88.47\%$ \\
\hline
\end{tabular}
\end{center}
\fonte{\citeonline[p. 82]{aires2000implementacao}}
\label{tab:airescomp}
\end{table}
%\subsection{Mac-Morpho}
%O projeto Mac-Morpho se auto-denomina como \aspas{\omissis{} um corpus de textos do português brasileiro anotados com etiquetas de partes do discurso \omissis{}} (NILC, \citeyear{nilc2016macmorpho}). Tal projeto disponibiliza sob a licença \aspas{Creative Commons Attribution 4.0 International} (NILC, \citeyear{nilc2016macmorpho}) todos os recursos linguísticos oferecidos, que é composto de um corpus anotado revisado manualmente e os arquivos treinados dos etiquetadores: \textit{MXPOST}, \textit{TreeTagger} e \textit{Brill Tagger} (NILC, \citeyear{nilc2012nilctaggers}).
\section{Conceitos relevantes}
Nesta seção, serão apresentados conceitos relevantes ao trabalho, sendo eles o processamento automático da linguagem natural, a linguística de \textit{corpus}, o que são os separadores de sentenças, algumas das métricas usadas para medir o desempenho de classificadores binários e o que são aplicações de internet.
\subsection{Processamento automático da linguagem natural}
Segundo \citeonline{sardinha2000linguistica}, \aspas{[...] O Processamento [automático] de Linguagem Natural é uma disciplina com laços fortes com a Ciência da Computação e, embora compartilhe vários temas com a Linguística de \textit{Corpus}, as duas mantêm-se independentes.} (p. 328). Já de acordo com \citeonline[p. 55]{oliveira2009linguistica}, programas de processamento de linguagem natural são \aspas{[...] programas capazes de interpretar e/ou gerar informações em linguagem natural [...]}, onde (p. 55) \aspas{[...] a Linguística Computacional utiliza os \textit{corpora} para poder ter acesso ao material que necessita estudar, ou seja, grande quantidade de textos que ocorrem naturalmente na língua.} \apudonline[p. 158]{trask2004dicionario}{aluisio2006constroi}, por sua vez, defende que \aspas{a partir de \textit{corpora}, podem-se fazer observações precisas sobre o real comportamento linguístico de falantes reais, proporcionando informações altamente confiáveis e isentas de opiniões e de julgamentos prévios sobre os fatos de uma língua}. Tais observações seriam feitas com auxílio do resultado do processamento de um programa que trata os \textit{corpora}, que por sua vez está codificado em linguagem natural. De todos estes autores, é possível concluir que o processamento automático da linguagem natural é o tratamento computacional de estruturas textuais que se repetem, por meio da detecção automática dos padrões dessas estruturas na língua falada e estrita de uma área do conhecimento de interesse a partir de registros relevantes e confiáveis do uso desta.
\subsection{Linguística de \textit{corpus}}
Um \textit{corpus}, na perspectiva da Linguística de \textit{Corpus}, pode ser definido como:
\begin{citacao}
\omissis{} um conjunto finito de enunciados tomados como objeto de análise. Mais precisamente, conjunto finito de enunciados considerados característicos do tipo de língua a estudar, reunidos para servirem de base à descrição e, eventualmente, à elaboração de um modelo explicativo dessa língua. Trata-se, pois, de uma coleção de documentos quer orais (gravados ou transcritos) quer escritos, quer orais e escritos, de acordo com o tipo de investigação pretendido. As dimensões do \textit{corpus} variam segundo os objetivos do investigador e o volume dos enunciados considerados como característicos do fenômeno a estudar. Um \textit{corpus} é chamado exaustivo quando compreende todos os enunciados característicos. E é chamado seletivo quando compreende apenas uma parte desses enunciados \apud{galisson1983dicionario}{aluisio2006constroi}.
\end{citacao}
Conceito este que pode ser complementado com a ideia de que:
\begin{citacao}
\omissis{} \textit{corpus} não pode ser considerado como constituindo a língua, mas somente como uma amostra da língua. (...) O \textit{corpus} deve ser representativo, isto é, deve ilustrar toda a gama das características estruturais. Poder-se-ia pensar que as dificuldades serão levantadas se um \textit{corpus} for exaustivo (...). Na realidade, sendo indefinido o número de enunciados possíveis, não há exaustividade verdadeira e, além disso, grandes quantidades de dados inúteis só podem complicar a pesquisa, tornando-a pesada. O linguista deve, pois, procurar obter um \textit{corpus} realmente significativo. Enfim, o linguista deve desconfiar de tudo o que pode tornar o seu \textit{corpus} não-representativo (método de pesquisa escolhido, anomalia que constitui a intrusão de linguista, preconceito sobre a língua) \apud{dubois1993dicionario}{aluisio2006constroi}.
\end{citacao}
Ou, de acordo com \apudonline{sinclair2005corpus}{aluisio2006constroi} como uma coleção de peças de um texto na forma eletrônica, selecionadas de acordo com critérios externos para representar, o quanto melhor possível, uma língua ou variação desta como dados fonte para pesquisa linguística. Para \apudonline[p. 31]{biber1995dimensions}{oliveira2009linguistica}, \aspas{um \textit{corpus} linguístico de base computacional corresponde a coleções de textos que ocorrem naturalmente na língua, organizadas sistematicamente para representar áreas de uso da língua, e das quais podemos extrair novas informações}. Segundo \citeonline{oliveira2009linguistica}, linguística de \textit{corpus} é uma ciência empírica, na qual o pesquisador utiliza diversas vezes o \textit{corpus} para estender uma descrição linguística, mas esta prática pode deixar a teoria aberta para mudanças. Então é possível concluir que linguística de \textit{corpus} é a área do conhecimento que estuda a língua através de agrupamentos de textos que representam um nicho a ser estudado.
\citeonline{gries2010useful} ainda cita três estatísticas deriváveis de uma análise de \textit{corpus}, sendo elas a frequência de ocorrência de um certo fenômeno no texto, dispersão e frequências ajustadas e frequências de co-ocorrência. A primeira (frequência de ocorrência de um certo fenômeno no texto) é uma contagem de quantas ocorrências foram identificadas no texto, a segunda (dispersão e frequências ajustadas) é a proporção (percentual) das ocorrências dado um \textit{corpus} e sua dispersão e a última (frequências de co-ocorrência) age sobre a frequência de co-ocorrência de expressões linguísticas. Portanto estas são as principais informações que uma ferramenta para a linguística de \textit{corpus} deve apresentar.
\subsection{Separadores de sentenças}
\label{sec:refteo:es}
Separadores de sentenças e separadores de frases são dois nomes para a mesma ferramenta. São programas que recebem como entrada um texto e o separam em frases \cite{bruckschen2010reconhecimento,paumier2016user}. Tais programas são úteis para o processamento de um \textit{corpus} porque \aspas{ajudam a determinar as unidades para processamento linguístico} \cite[p. 33]{paumier2016user}.
Tal diversidade de nomes ocorre devido ao falso cognato \aspas{\textit{sentence}} significar \aspas{frase} e não \aspas{sentença}. A palavra inglesa \aspas{sentence}, de acordo com o dicionário Collins escolar inglês-português, pode ser traduzida tanto como \aspas{frase} quanto como \aspas{sentença}, mas todos os exemplos de uso dados a este último são relacionados ao contexto de trâmite jurídico na vara penal \cite[p. 364]{collins2009dictionary}. Ainda assim, existem dicionários que reconhecem \aspas{sentença} e \aspas{frase} como sinônimos, como a definição \aspas{oração, frase, período} \cite[p. 670]{amora2009minidicionario} presente no minidicionário Soares Amora da língua portuguesa e a definição \aspas{construção sintática com sentido completo, composta por uma ou mais palavras; frase} \cite{dicio2018sentenca} presente no dicionário online de português Dicio. De modo semelhante, mas contrário, tanto o novo dicionário Aurélio \cite[p. 670]{aurelio1975dicionario}, quanto o dicionário Houaiss \cite[p. 2547]{houaiss2001dicionario} não reconhecem \aspas{frase} como uma sinônimo de \aspas{sentença}.
% A primeira é definida como \aspas{enunciado que consta de sujeito e predicado, ou só de um predicado} \cite[p. 501]{amora2009minidicionario}, a segunda é definida como \aspas{conjunto de palavras que formam um sentido completo} \cite[p. 328]{amora2009minidicionario} e a última como \aspas{oração, ou reunião de orações que formam sentido completo} \cite[p. 537]{amora2009minidicionario}. Outro
\subsection{Medidas estatísticas de avaliação de desempenho de classificadores binários}
\label{sec:refteo:estcb}
Para etiquetar um \textit{corpus} automaticamente, é necessário um classificador, e é desejável que este atribua etiquetas corretamente a cada palavra e marca de pontuação. Embora a perfeição seja desejável, tal processo pode apresentar imperfeições (erros), como classificar \aspas{casa} enquanto substantivo quando deveria ter sido classificada como verbo (casar, flexionado na 3ª pessoa do singular do presente do indicativo). Para medir o quanto o classificador acerta ou erra para cada etiqueta, existem algumas métricas estatísticas que serão utilizadas na seção \ref{sec:res:train} do capítulo de resultados e nos apêndices \ref{ap:teste1}, \ref{ap:teste2} e \ref{ap:teste3}; abaixo, segue a lista das métricas utilizadas (que não é exaustiva sobre o conjunto de todas as existentes):
\begin{itemize}
\item Precisão (\textit{precision}), dado pela equação \ref{eq:prec}, \aspas{denota a proporção de casos preditos como positivos que são considerados positivos reais} \cite[p. 38]{powers2011evaluation}.
\begin{equation}
\label{eq:prec}
P_{recisão} = \frac{V_{erdadeiro}P_{ositivo}}{V_{erdadeiro}P_{ositivo} + F_{also}P_{ositivo}}
\end{equation}
\item Revocação (\textit{recall} ou sensibilidade), dado pela equação \ref{eq:rec}, \aspas{é a proporção de casos de casos positivos preditos como positivos} \cite[p. 38]{powers2011evaluation}.
\begin{equation}
\label{eq:rec}
R_{ecall} = \frac{V_{erdadeiro}P_{ositivo}}{V_{erdadeiro}P_{ositivo} + F_{also}N_{egativo}}
\end{equation}
\item \textit{F-measure} (\textit{F$_1$ score}), dado pela equação \ref{eq:f1score}, \aspas{é definida como a média harmônica entre precisão e revocação} \apud[pp. 51, 52]{van1979information}{beitzel2006understanding}, mas, segundo \citeonline{powers2011evaluation}, não leva em conta os verdadeiros negativos.
\begin{equation}
\label{eq:f1score}
F_1 = \frac{2 \times P_{recisão} \times R_{ecall}}{P_{recisão} + R_{ecall}}
\end{equation}
\item Acurácia (\textit{accuracy}), dado pela equação \ref{eq:acc}, ao contrário das anteriormente apresentadas, \aspas{explicitamente toma em conta a classificação de negativos} \cite[p. 39]{powers2011evaluation}.
\begin{equation}
\label{eq:acc}
A_{curácia} = \frac{V_{erdadeiro}P_{ositivo} + V_{erdadeiro}N_{egativo}}{V_{erdadeiro}P_{ositivo} + V_{erdadeiro}N_{egativo}+F_{also}P_{ositivo} + F_{also}N_{egativo}}
\end{equation}
\item Taxa de erro (\textit{miss rate}), dado pela equação \ref{eq:miss}, \aspas{é a proporção de positivos reais que são preditos como negativos} \cite[p. 39]{powers2011evaluation}.
\begin{equation}
\label{eq:miss}
E_{rro} = \frac{F_{also}N_{egativo}}{V_{erdadeiro}P_{ositivo} + F_{also}N_{egativo}}
\end{equation}
\item Especificidade (\textit{specificity}), dado pela equação \ref{eq:spec}, \aspas{é a proporção de casos negativos que são corretamente preditos como negativos} \cite[p. 39]{powers2011evaluation}.
\begin{equation}
\label{eq:spec}
E_{specificidade} = \frac{V_{erdadeiro}N_{egativo}}{F_{also}P_{ositivo} + V_{erdadeiro}N_{egativo}}
\end{equation}
\item Prevalência (\textit{prevalence}), dado pela equação \ref{eq:prev} \cite[p. 39]{powers2011evaluation}, representa a proporção do universo amostral que é composta por casos positivos, sendo uma métrica que independe do classificador.
\begin{equation}
\label{eq:prev}
P_{revalência} = \frac{V_{erdadeiro}P_{ositivo} + F_{also}N_{egativo}}{V_{erdadeiro}P_{ositivo} + V_{erdadeiro}N_{egativo}+F_{also}P_{ositivo} + F_{also}N_{egativo}}
\end{equation}
\end{itemize}
\subsection{Aplicações de internet}
Uma ferramenta para a linguística de \textit{corpus} cuja interface de operação seja acessível pela internet pode ser considerada uma aplicação de internet. A lei nº 12.965 as define como \aspas{o conjunto de funcionalidades que podem ser acessadas por meio de um terminal conectado à internet} \cite{lei12965}. Tal definição se aproxima da de terminal burro\footnote{\textit{\citeauthoronline{tlip2005dumb}} (\citeyear{tlip2005dumb}) define \aspas{terminal burro} como um terminal de computador que consiste apenas de um teclado e monitor, sem unidade de processamento central ou disco rígido interno, com pouco ou nenhum poder de processamento ou armazenamento.} no ponto em que uma considerável maioria dos dados e processamentos estão ou são realizados remotamente, numa arquitetura que cliente-servidor com um processo de aplicação executando no servidor.
\subsubsection{Arquitetura cliente-servidor}
De acordo com \citeonline[p. 62]{ross2013redes}, nesta arquitetura \aspas{há um hospedeiro sempre em funcionamento, denominado servidor, que atende a requisições de muitos outros hospedeiros, denominados clientes}, mencionando aplicações \textit{Web} como um caso clássico de seu uso. Cada cliente e cada servidor possui uma pilha de protocolos da internet, assim como ilustrado pela figura \ref{fig:osistack} \cite[p. 37]{ross2013redes}. A comunicação entre os processos executados no cliente e no servidor, ilustrada pela figura \ref{fig:comcs}, ocorre através de uma interface de \textit{software} de troca de mensagens denominada \textit{socket} \cite[pp. 65, 73]{ross2013redes}, e possibilita que tais máquinas troquem mensagens. No contexto de aplicações de internet, tais trocas de mensagens geralmente seguem o protocolo HTTP.
\begin{figure}[h]
\begin{center}
\caption[Pilha de protocolos da internet e modelo OSI]{A pilha de protocolos da internet (a) e o modelo de referência OSI (b)}
\includegraphics[scale=.5]{pilhaprotoc/model.pdf}
\fonte{\citeonline[p. 37]{ross2013redes}}
\label{fig:osistack}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption{Exemplo de canal de comunicação entre aplicações no cliente e no servidor}
\includegraphics[scale=.5]{pilhaprotoc_comunicacaocliserv/model.pdf}
\fonte{O autor}
\label{fig:comcs}
\end{center}
\end{figure}
As menssagens do protocolo HTTP transportam as requisições feitas pelo cliente e as respostas dadas pelo servidor, tal como uma página \textit{Web}, que é composta de objetos, como, por exemplo, \aspas{um documento HTML, uma imagem JPEG, um applet Java, ou um clipe de vídeo}\cite[p. 72]{ross2013redes}. \citeonline{ross2013redes} ainda afirmam que \aspas{a maioria das páginas \textit{Web} são constituídas de um arquivo-base HTML e diversos objetos referenciados} (p. 72), exibidas para o usuário através dum navegador, e que navegador e cliente referem-se à mesma coisa neste contexto, sendo o \textit{Internet Explorer} e o \textit{Mozilla Firefox} exemplos deste \cite{ross2013redes}. O servidor \textit{Web} abriga objetos que possuem endereços (URL), sendo estes acessíveis aos clientes através destes endereços \cite{ross2013redes}. São \textit{softwares} populares deste tipo o \textit{Apache} e o \textit{Microsoft Internet Information Server}\cite{ross2013redes}, os quais são capazes de delegar a um algoritmo a geração da resposta a uma requisição (Apache Foundation, \citeyear{apachedoc2018dynamic}; \citeauthor{iisdoc2018using}, \citeyear{iisdoc2018using}). Algoritmos que geram a resposta a requisições de um cliente podem ser escritos utilizando o \textit{framework} \textit{Django}.
\subsubsection{\textit{Framework} de aplicação de internet Django}
Para facilitar o desenvolvimento de aplicações de internet, algumas \textit{frameworks} foram criadas. Uma dessas \textit{frameworks} é o \textit{Django}, escrito na linguagem de programação \textit{Python}, se autodefine como \aspas{a \textit{framework} \textit{web} para perfeccionistas com prazos} e provê uma série de ferramentas prontas para agilizar o desenvolvimento da aplicação, como ferramentas de autenticação de usuário, um renderizador de \textit{templates} e um mapeador objeto-relacional cujo banco de dados padrão é o \textit{SQLite} (havendo suporte para outras soluções de persistência) \cite{djangodoc2018relance}.
\textit{SQLite} se autodefine como \aspas{uma biblioteca embutida no processo que implementa um banco de dados transacional \textit{SQL} de maneira autocontida, sem servidor e sem configuração}, e também afirma ser \aspas{o banco de dados mais vastamente implementado no mundo} \cite{sqlite2018about}. Como solução de banco de dados, para \citeonline{navathe2012sgbd}, é característica fundamental ofereça ao programador algum nível de abstração de dados. Para aumentar ainda mais a abstração, além das técnicas apresentadas por \citeonline{navathe2012sgbd}, nos capítulos em que aborda as técnicas de programação de banco de dados, \citeauthoronline{navathe2012sgbd} instruem a criar funções (ou métodos, dependendo da linguagem de programação) que encapsulam o dado usando consultas \textit{SQL} escritas pelo programador e convertem registros em objetos e vice-versa. Contrariamente às práticas apresentadas por \citeauthoronline{navathe2012sgbd}, \citeonline{oneil2008orm} afirma que \aspas{programadores veementemente preferem trabalhar com dados persistentes em objetos do programa a usar consultas \textit{SQL} diretamente para acessar os dados} (p. 1351) e apresenta o mapeamento objeto-relacional como uma \aspas{metodologia e mecanismo para que sistemas orientados a objetos mantenham controle de seus dados persistidos seguramente no banco de dados} (p. 1351), sendo tal controle feito a nível transacional de forma a tratar condições de corrida, em que as \aspas{aplicações de internet dos dias atuais são particularmente adequadas a esta abordagem} (p.1351). Portanto, a \textit{framework} \textit{Django} provê uma abstração para toda a camada de persistência, mecanismos de migração automática, segurança contra ataques conhecidos e outras facilidades que permitem ao programador focar no problema a ser resolvido e não nos detalhes tecnológicos da implementação, cumpre melhor o papel de abstrair os dados defendido por \citeonline{navathe2012sgbd} de que a técnica por eles apresentada.
Apesar da criação das tabelas e suas colunas poderem ser feitas completamente a critério do modelador do ponto de vista de código, a retenção de alguns dados do usuário se faz obrigatória do ponto de vista jurídico. A seguir será abordado quais dados são esses que devem ser armazenados e por quanto tempo devem ser armazenados.
\subsubsection{Deveres legais a respeito da mínima retenção de dados}
\label{marcocivil}
Popularmente chamado de \aspas{Marco Civil da Internet}, a lei nº 12.965, \aspas{estabelece princípios, garantias, direitos e deveres para o uso da internet no Brasil} \cite{lei12965}. Um desses deveres pode se aplicar aos provedores das aplicações de internet, quando este for uma pessoa jurídica atuando com fins econômicos:
\begin{citacao}
Art. 15. O provedor de aplicações de internet constituído na forma de pessoa jurídica e que exerça essa atividade de forma organizada, profissionalmente e com fins econômicos deverá manter os respectivos registros de acesso a aplicações de internet, sob sigilo, em ambiente controlado e de segurança, pelo prazo de 6 (seis) meses, nos termos do regulamento \cite{lei12965}.
\end{citacao}
Onde o que constituem \aspas{registros de acesso a aplicações de internet} fora anteriormente definido no Art. 5º:
\begin{citacao}
VIII - registros de acesso a aplicações de internet: o conjunto de informações referentes à data e hora de uso de uma determinada aplicação de internet a partir de um determinado endereço IP \cite{lei12965}.
\end{citacao}
Portanto, para uma aplicação de internet ser usável comercialmente, em território nacional, sem insegurança jurídica, deve ser auditável de forma a rastrear o endereço IP, data e hora de qualquer conteúdo gerado por qualquer usuário dentro da aplicação por, pelo menos, 6 meses.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Desenvolvimento}
\label{cha:des}
Este capítulo descreve as etapas do desenvolvimento da aplicação de internet proposta. A seção \ref{sec:des:req} descreve as etapas do levantamento de requisitos e as funcionalidades desejáveis identificadas; a seção \ref{sec:des:cdp}, o gerenciador de \textit{corpora} numa modelagem já utilizando a tecnologia escolhida; a seção \ref{sec:des:nav} contém um esboço da navegabilidade contemplando a estrutura de navegação da aplicação; a seção \ref{sec:des:flux}, descreve o subsistema de eventos que acaba por controlar o fluxo de informações dentro da plataforma de forma a reduzir o acoplamento entre componentes, favorecer a substituição de componentes e favorecer a interoperabilidade; a seção \ref{sec:des:eslp} traz a solução pronta a ser adaptada para fornecer ao sistema lista de sentenças e de palavras; a seção \ref{sec:des:train} contém a metodologia utilizada para treinar o etiquetador do \textit{Unitex/GramLab} e mais um outro que foi desenvolvido durante este trabalho; e, por fim, a seção \ref{sec:des:conc} traz a proposta do concordanciador e alguns requisitos extras pertinentes a apenas este módulo.
\section{Levantamento de requisitos}
\label{sec:des:req}
O levantamento de requisitos é uma das primeiras etapas do ciclo de vida de um projeto de \textit{software} \cite{sommerville2011software}. Para tal, o primeiro passo foi pesquisar as ferramentas voltadas ao usuário final existentes. Excluídas as ferramentas de processamento de \textit{corpora} de linha de comando, e excluídas as ferramentas que não possuíssem versão gratuita, de demonstração ou de testes, e tendo como ponto de partida os artigos do capítulo anterior, foram pesquisadas as ferramentas diretamente mencionadas nos artigos e também as ferramentas citadas nos \textit{sites} que os artigos mencionam. A ferramentas encontradas foram: \textit{WordSmith}, \textit{CorpusEye}, \textit{COCA Online Corpus}, \textit{Unitex/GramLab} e \textit{Sketch Engine}. Então, suas principais funcionalidades presentes na versão gratuita foram levantadas, comparadas, e então expressas na tabela \ref{tab:comppln}, da qual foram extraídas, de forma não-exaustiva, características desejáveis de um sistema de processamento de \textit{corpora} e listadas a seguir:
\begin{table}
\caption{Tabela comparativa de \textit{softwares} de Processamento de Linguagem Natural}
\hspace*{0mm}\centerline{\includegraphics[width=0.9\textheight,height=0.9\textwidth,keepaspectratio,angle=90]{tabela-comparacao-full/model.pdf}}
\fonte{O autor}
\label{tab:comppln}
\end{table}
\begin{itemize}
\item Possuir interface web compatível com tamanhos de tela diversos (\textit{smartphones}, \textit{tablets}, \textit{notebooks} e \textit{desktops}).
\item Processar \textit{corpora} fornecidos pelo usuário;
\item etiquetar \textit{corpora} fornecidos pelo usuário;
\item criar \textit{corpus} a partir de buscas na internet;
\item calcular estatísticas quanto à frequência de lemas e palavras;
\item calcular estatísticas quanto à contagem de lemas e palavras;
\item calcular estatísticas quanto à razão de lemas e palavras;
\item calcular estatísticas quanto à contagem de sentenças e parágrafos;
\item calcular estatísticas quanto ao tamanho em caracteres das palavras;
\item calcular estatísticas quanto à quantidade de palavras por sentença;
\item extrair as palavras-chave de um \textit{corpus};
\item calcular estatísticas quanto à distribuição da palavra-chave no \textit{corpus};
\item calcular estatísticas quanto às palavras relacionadas às palavras-chave do \textit{corpus};
\item buscar por uma ocorrência de uma palavra ou sequência de palavras;
\item buscar por uma expressão que simbolize uma construção textual;
\item possuir um concordanciador;
\item calcular os n-gramas mais frequentes de um texto.
\end{itemize}
Como nenhum dos \textit{softwares} apresenta extensibilidade através de \textit{plug-ins}\footnote{\textit{Plug-ins} são componentes modulares de um \textit{software} que modificam e/ou adicionam comportamentos, funcionalidades e/ou a aparência original do \textit{software}, sendo também chamados de \textit{add-ons} (termo utilizado no \textit{Mozilla Firefox}), \textit{add-ins} (termo utilizado no \textit{Microsoft Office Excel}) e extensões (termo utilizado no \textit{Google Chrome}).} como funcionalidade, tal requisito não está presente na lista acima. Considerando que tal lista, apesar de extensa, pode não cobrir todos os casos de uso para uma análise linguística e que nem todas as funcionalidades serão implementadas neste trabalho, foi julgada como desejável facilitar a adição e substituição de componentes do \textit{software} por outros mais atualizados, com maiores taxas de acerto, computacionalmente mais eficientes e/ou com licenças mais permissivas, a critério do administrador do servidor que executa o \textit{software}. Portanto possuir extensibilidade através de \textit{plug-ins} é um requisito do \textit{software}.
Dos \textit{softwares} anteriormente listados, foi observado na tabela \ref{tab:comppln} que nenhum deles possui um concordanciador gratuito com suporte a etiquetas de partes do discurso para a língua portuguesa que receba textos quaisquer fornecidos pelo usuário. Adicionando esta funcionalidade como objetivo, juntamente de suas dependências, temos:
\begin{itemize}
\item Possuir extensibilidade através de \textit{plug-ins};
\item possuir interface web compatível com tamanhos de tela diversos;
\item processar \textit{corpora} fornecidos pelo usuário;
\item etiquetar \textit{corpora} fornecidos pelo usuário;
\item possuir um concordanciador.
\end{itemize}
\subsection{Tecnologias escolhidas}
Para gerar as páginas, foi escolhido o \textit{framework} \textit{Django} em sua versão de longo suporte 1.11. Esta escolha se deve principalmente à prévia familiaridade do autor com a ferramenta. Outros fatores que influenciaram a decisão é a quantidade de bibliotecas disponíveis para a linguagem em que a \textit{framework} é escrito, \textit{Python}, o que possibilita a inclusão destas nos \textit{plug-ins}.
Para que as páginas geradas sejam compatíveis com tamanhos de tela diversos, foi escolhido a \textit{framework} de folha de estilos \textit{Bootstrap} em sua versão 4.0b1. Esta escolha também foi influenciada pela prévia familiaridade do autor. Em conjunto com a referida folha de estilos, também foi utilizado o pacote de ícones FontAwesome. Ele se define em sua página inicial como \aspas{um idioma pictográfico de ações relacionadas à \textit{web}} \cite{fontawesome2017home}. Foi adicionado visando melhorar a usabilidade.
Para processar os \textit{corpora} fornecidos pelo usuário, foi selecionado o utilitário de linha de comando do \textit{software} Unitex/GramLab. Trata-se de um \textit{software} livre licenciado sob os termos da \textit{GPL}, que não impõem restrições quanto ao seu uso. Apesar de possuir um utilitário chamado \aspas{Tagger}, somente durante a implementação foi observado que os arquivos necessários para sua utilização estavam presentes apenas para o idioma francês. Portanto, o etiquetador do \textit{Unitex/GramLab} foi treinado para a língua portuguesa, utilizando os \textit{corpora} anotados pelo projeto Floresta Sintáctica (mais detalhes na seção \ref{sec:des:train}); em caso de resultados insatisfatórios (menos que 75\% de precisão) neste, seria utilizado os arquivos previamente treinados por \citeonline{aires2000implementacao}, dando preferência aos etiquetadores com maior precisão.
\section{O gerenciador de \textit{corpora}}
\label{sec:des:cdp}
As classes do domínio do problema, quando representadas através da \textit{framework} utilizada, se aproximam muito do modelo lógico. O mapeamento objeto-relacional feito pela plataforma admite herança e classes abstratas; como a solução de persistência padrão é \textit{SQLite}, e esta não suporta herança entre tabelas, o mapeador objeto-relacional replica os campos definidos na classe pai na classe filho, já classes abstratas não geram tabelas. A figura \ref{fig:class:small} traz um excerto do modelo lógico gerado automaticamente a partir da implementação. A classe em magenta claro (\textit{User}) é advinda da \textit{framework}, já as demais classes em amarelo claro foram escritas para compor a base da plataforma, as quais os \textit{plug-ins} utilizarão diretamente. Omitidas neste modelo resumido e presente no apêndice \ref{ap:class:corpora}, as classes com letras em cinza (\textit{Timestampable}, \textit{RequiresIP} e \textit{AttributeMixin}) são abstratas e todas as classes concretas herdam de \textit{RequiresIP}, devido às obrigações legais anteriormente mencionadas na seção \ref{marcocivil}.
\begin{figure}[h]
\begin{center}
\caption{Excerto do modelo lógico gerado automaticamente a partir da implementação}
\includegraphics[scale=.4]{modelo-classes/modelsmall.pdf}
\fonte{O autor}
\label{fig:class:small}
\end{center}
\end{figure}
%E de forma a encontrar os requisitos especificados nos objetivos (seção \ref{sec:obj}) a partir das principais ferramentas voltadas ao processamento de corpus de texto existentes no mercado. . A comparação completa de funcionalidades está prensente no apêndice \ref{ap:tabcomppln} em formato de tabela. Portanto, são funcionalidades desejáveis num sistema de processamento de linguagem natural:
%Como a proposta é de uma plataforma web, é esperado que seja usável a partir de um navegador como o Google Chrome, Opera ou Mozilla Firefox. Por conta disso, o sistema deverá gerar documentos HTML e transferí-los através do protocolo HTTP, que, segundo \citeonline{ross2013redes}, atua no camada de aplicação do modelo OSI. Portanto, será utilizada uma arquitetura cliente-servidor.
\section{Esboço da navegabilidade}
\label{sec:des:nav}
A navegabilidade no sistema é fundamental para a experiência de uso do sistema pelo usuário, já que trata de como o usuário irá interagir com o sistema e das opções visíveis a ele. Como os documentos de hipertexto formam um grafo, onde cada documento é um nó e cada link é uma aresta \cite{meusel2015graph}, páginas com informações relevantes ao usuário podem ficar muitos nós de distância de onde o usuário se encontra, mas também não deve ficar poluído de forma a deixar o usuário desorientado \cite{krug2008pensar}. A forma que é adotada para representar tal navegação é através de uma árvore (vide figura \ref{fig:arvnav}), onde a página anterior conhece seus descendentes imediatos e sua página pai, apenas. No canto direito no rodapé de todas as páginas ficarão os \textit{links} para as páginas de \aspas{Ajuda}, \aspas{Termos de uso} e \aspas{Política de privacidade}, cujo conteúdo será estático, definido nos arquivos de tradução. Na barra de navegação do topo de página ficará o seletor de idiomas alinhado à esquerda (caixa \aspas{Idioma}) e os botões que levam às páginas de autenticação (caixas hierarquicamente dependentes da caixa \aspas{Contas}).
\begin{figure}[h]
\begin{center}
\caption{Árvore de navegação das páginas do sistema}
\includegraphics[scale=.4]{navegabilidade/model.pdf}
\fonte{O autor}
\label{fig:arvnav}
\end{center}
\end{figure}
A página inicial, representada pelas caixa \aspas{Plataforma}, na figura \ref{fig:arvnav}, será a página inicial; para visitantes, a página deverá exibir um formulário de \textit{login} e um botão que leva ao formulário de cadastro, enquanto, para um usuário autenticado, representa a página \aspas{\textit{Corpora}} da figura \ref{fig:arvnav}, exibindo uma lista com os \textit{corpora} por ele já criados e um botão para criar um novo \textit{corpus} vazio. Ao clicar num \textit{corpus}, o usuário entrará numa outra página (\aspas{\textit{Corpus}}) que conterá os documentos que o compõem o \textit{corpus} selecionado, juntamente a botões para editar e apagar o \textit{corpus} selecionado, bem como para cada documento listado (\aspas{Documento}), além de um botão para adicionar um documento e outro para levar até a página com as operações que podem ser feitas sobre o \textit{corpus} (\aspas{Análise}). Na página de análises, todos os botões de ação são fornecidos por \textit{plug-ins}, mas é esperado que haja ao menos um para uma lista de sentenças, um para frequência de palavras, um para o texto etiquetado e outro para o concordanciador, sendo permitido ao usuário localizar o(s) documento(s) que contém o que pode ser visto na tela num clique, no máximo dois.
\section{O subsistema de eventos}
\label{sec:des:flux}
Como ser extensível através de \textit{plug-ins} é um requisito da aplicação e este recurso não é oferecido pela \textit{framework} sem que seja necessário alterar o arquivo de configuração, somado à vantagem de que os \textit{plug-ins} sejam substituíveis, foi considerado melhor desenvolver tal parte do sistema utilizando uma arquitetura que favoreça o desacoplamento. Para tanto, foi escolhida uma arquitetura baseada em eventos, onde cada \textit{plug-in} forneça e/ou consuma serviços de outros \textit{plug-ins} utilizando apenas eventos, sem consultar diretamente o outro \textit{plug-in} ou ser informado sobre quais estão instalados ou não.
\begin{figure}
\begin{center}
\caption{Árvore de diretórios e \textit{scripts}}
\includegraphics[scale=0.65]{fluxinfo-dirtree/model.pdf}
\fonte{O autor}
\label{fig:flux:dt}
\end{center}
\end{figure}
A figura \ref{fig:flux:dt} mostra a árvore de diretórios em amarelo e seus \textit{scripts} em ciano. Na pasta \aspas{projeto} foram adicionados dois \textit{scripts}: \aspas{gancho padrão} e \aspas{eventos}. O primeiro contém um gerador da estrutura que descreve um botão na página \aspas{Análise}. O segundo contém uma função \aspas{disparar} que recebe dois argumentos: uma cadeia de caracteres e um objeto qualquer; esta função dispara o evento e seu retorno depende da cadeia de caracteres de entrada, que especifica o tipo de evento: provedor, busca, filtro ou ação.
Eventos do tipo \aspas{provedor} descartam o segundo argumento de entrada e retornam uma lista. Foram idealizados para abastecer \textit{plug-ins} que aceitam recursos linguísticos além dos embarcados nele mesmo. Um exemplo de aplicação é um etiquetador que, através da resposta a eventos por ele disparados, recebe recursos para etiquetar idiomas originalmente não suportados.
Eventos do tipo \aspas{busca} recebem o objeto que está relacionado ao desejado no segundo argumento de entrada e retornam uma lista contendo o(s) resultado(s) de cada \textit{plug-in} que ofereceu aquele serviço de busca. Foram idealizados para buscar dados em outros \textit{plug-ins}, sem a necessidade de conhecer todos os modelos destes e sua representação interna. Um exemplo de aplicação é no concordanciador, onde ele fornece um \textit{corpus} e recebe como resposta o \textit{cache} do \textit{corpora} já etiquetado por cada etiquetador.
Eventos do tipo \aspas{filtro} recebem uma coleção de objetos no segundo argumento de entrada e retornam a uma coleção de tamanho menor ou igual, podendo ter elementos alterados, sendo a saída de um filtro a entrada do próximo. Foram idealizadas como forma de reduzir o conjunto de entrada, através de regras implementadas por outros \textit{plug-ins}. Um exemplo de aplicação são diversos \textit{tokenizadores} atuando entre a lista de sentenças e o etiquetador, para garantir que a entrada do etiquetador seja consistente.
Eventos do tipo \aspas{ação} recebem um objeto qualquer e não retornam nada. Foram idealizados para notificar outros \textit{plug-ins} de que uma ação foi concluída com sucesso, ou até mesmo para comunicação interna dentro do próprio \textit{plug-in}. Um exemplo de aplicação é num processamento conhecidamente demorado que é realizado em segundo plano e a notificação de sua conclusão se dá através de um \textit{e-mail}.
Tais eventos ocorrem dentro do subsistema de \textit{plug-ins}, cuja sequência de funcionamento é expressa em detalhes no apêndice \ref{ap:fluxplugin}. Vale mencionar que não foi implementada nenhuma verificação para garantir que não há dependência cíclica; nesses casos, é esperado que um erro da classe \aspas{\textit{RecursionError}} seja lançado e, caso não capturado, retorne um erro HTTP de código 500.
\section{Separação de sentenças e obtenção de lista de palavras}
\label{sec:des:eslp}
Os dados da lista de sentenças e a lista de palavras, sendo o primeiro a entrada do etiquetador, são ambos produtos do pré-processamento do Unitex/GramLab \cite{paumier2016user}. Com isso, o trabalho foi apenas adaptar a visualização do dado à nova interface. A a representação escolhida para a lista de sentenças foi a do elemento \textit{HTML} de lista ordenada, onde cada sentença é um item da lista, dispostas na ordem em que aparecem no texto. A representação da lista de palavras na interface acontece em 3 listas, uma de palavras simples (\aspas{roupa}, por exemplo), outra de palavras compostas (\aspas{guarda-roupa}, por exemplo) e a última para palavras não reconhecidas, em que as duas primeiras possuem cores que identificam o lema, as etiquetas morfológicas e semânticas atribuíveis à palavra encontrada no texto; na página exibida ao usuário, cada lista com cores foi substituída por uma tabela que identifica adequadamente o significado de cada cor, ordenada do mais para o menos frequente, e a lista de palavras desconhecidas foi representada de forma semelhante à lista de sentenças, mas numa lista não-ordenada e em ordem alfabética.
\section{Treino do etiquetador}
\label{sec:des:train}
Conforme mencionado anteriormente no final da seção \ref{sec:des:req}, o etiquetador do Unitex/GramLab foi treinado utilizando os \textit{corpora} anotados do Floresta Sintáctica, que oferece os \textit{corpora} nos formatos CoNLL e Árvore Deitada para todas as bases, estando os demais formatos restritos a apenas um subconjunto das bases fornecidas. O formato inicialmente escolhido foi o CoNLL, mas rapidamente ele demonstrou não possuir uma estrutura consistente (a exemplo, as \textit{tags} que se assemelham à notação \textit{XML} que determinam o início das sentenças possui um atributo ora nomeado \aspas{text}, ora nomeado \aspas{texto}). Portanto, foi utilizado os arquivos no formato de árvore deitada.
Após converter os \textit{corpora} para o formato de entrada mais simples que o treinador do \textit{Unitex/GramLab} aceita\footnote{O formato de entrada mais simples que o treinador do Unitex/GramLab aceita é uma lista de sentenças separada por duas quebras de linha seguidas, onde cada sentença é uma lista de palavras etiquetadas, que por sua vez é separada por uma quebra de linha, onde cada palavra etiquetada é um par palavra-etiqueta separados pelo caractere barra (\aspas{/}) \cite{paumier2016user}.}, era o momento de separar em treino e teste, mas não era sabido quais \textit{corpora} gerariam erros devidos a eventuais erros na conversão do formato não documentado. A solução adotada foi testar cada \textit{corpus} anotado: caso o treino concluísse com sucesso era separado para o conjunto treino, caso contrário, para o de teste. Resultados no quadro \ref{qua:stt}.
\begin{quadro}[h]
\caption{Separação entre treino e teste}
\begin{center}
\begin{tabular}{|c|c|}
\hline
Treino & Teste \\
\hline
\hline
amaz1.ad & amaz2.ad \\
amaz6.ad & amaz3.ad \\
bosquecf.ad & amaz4.ad \\
selva\_cien.ad & amaz5.ad \\
selva\_fala.ad & bosquecp.ad \\
selva\_lit.ad & fv\_cf.ad \\
& fv\_cp.ad \\
\hline
\end{tabular}
\end{center}
\fonte{O autor}
\label{qua:stt}
\end{quadro}
O conjunto de treino (quadro \ref{qua:stt}) continha 1.286.251 palavras anotadas distribuídas ao longo de 81.438 sentenças; já o conjunto de testes continha 4.585.010 palavras distribuídas ao longo de 266.500 sentenças. Devido a diferenças no \textit{tokenizador} e separador de sentenças, o teste etiquetado continha 4.726.605 palavras anotadas ao longo de 245.718 sentenças. Separando apenas as sentenças que foram \textit{tokenizadas} da mesma forma que no conjunto de testes, tem-se 2.801.255 palavras em 176.034 sentenças. Como cada palavra é uma amostra para o treino do etiquetador, tem-se a proporção treino/teste de aproximadamente 31\% / 69\%.
Apesar de ter sido treinado para usar as etiquetas do Projeto Floresta Sintáctica, o \textit{Unitex/GramLab} usou do próprio conjunto de etiquetas para etiquetar o texto, estas sendo incompletamente documentadas apenas pelo conteúdo do quadro \ref{qua:ug:fgc}. Por isso, durante a etapa de avaliação de desempenho foi necessário aproximar ambos padrões de etiquetas utilizando como referência o \aspas{glossário de etiquetas florestais} da \citeonline{sitefloresta2010glossario} e a breve e incompleta tabela de \citeonline{paumier2016user} (quadro \ref{qua:ug:fgc}), onde etiquetas não documentadas tiveram seu significado manualmente inferido (a exemplo, a etiqueta \aspas{X} provavelmente representa palavras estrangeiras, como \aspas{CD-ROM}). A conversão final antes da comparação e montagem das tabelas de contingência é expressa nas tabelas \ref{tab:tagconv:gss} e \ref{tab:tagconv:ans} (teste 1, resultados na seção \ref{sec:res:train:t1}). %, mas com isso, abre a possibilidade de etiquetas sinônimas não terem sido agrupadas ou erros podem ter sido introduzidos, fazendo com que as estatísticas podem não representar corretamente o desempenho da abordagem do algoritmo pelo Unitex/GramLab utilizado.
\begin{quadro}[h]
\caption{Etiquetas gramaticais frequentes}
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
Etiqueta & Descrição & Exemplos \\
\hline
\hline
A & adjetivo & \textit{fabulous}, \textit{broken-down} \\ \hline
ADV & advérbio & \textit{actually}, \textit{years ago} \\ \hline
CONJC & conjunção coordenativa & \textit{but} \\ \hline
CONJS & conjunção subordinativa & \textit{because} \\ \hline
DET & determinante & \textit{each} \\ \hline
INTJ & interjeição & \textit{eureka} \\ \hline
N & substantivo & \textit{evidence}, \textit{group theory} \\ \hline
PREP & preposição & \textit{without} \\ \hline
PRO & pronome & \textit{you} \\ \hline
V & verbo & \textit{overeat}, \textit{plug-and-play} \\ \hline
\end{tabular}
\end{center}
\fonte{\citeonline[p. 47]{paumier2016user}}
\label{qua:ug:fgc}
\end{quadro}
\begin{table}[h]
\caption{Conversão da etiquetas utilizadas do Floresta Sintáctica para notação intermediária}
\begin{center}
\begin{tabular}{cc}
\hline
Etiqueta & Convertido \\
\hline
\hline
PROP & N \\
VAUX & V \\
PP & PREP \\
PRP & PREP \\
DET & PRON \\
INTJ & INTERJ \\
\hline
\end{tabular}
\end{center}
\fonte{O autor}
\label{tab:tagconv:gss}
\end{table}
\begin{table}[h]
\caption{Conversão da etiquetas utilizadas do Unitex/GramLab para notação intermediária}
\begin{center}
\begin{tabular}{cc}
\hline
Etiqueta & Convertido \\
\hline
\hline
A & ADJ \\
X & N \\
SIGL & N \\
ABREV & N \\
PRO & PRON \\
PREPXDET & PREP \\
PREPXPRO & PREP \\
PONCT & ??? \\
\hline
\end{tabular}
\end{center}
\fonte{O autor}
\label{tab:tagconv:ans}
\end{table}
O etiquetador do \textit{Unitex/GramLab} \cite{paumier2016user} usa \aspas{tuplas de unigramas, bigramas e trigramas} (p. 329) gerados a partir do \textit{corpus} fornecido como treino para que a aplicação, durante a etiquetagem, \aspas{aplique o algoritmo do caminho de Viterbi sobre o \textit{corpus} e produza um autômato linear} (p. 294), ou seja, o processo de etiquetagem apenas remove as etiquetas atribuídas anteriormente durante o processamento feito ao carregar o \textit{corpus} na ferramenta, no qual usa por padrão os dicionários nele embutidos, até restar apenas uma etiqueta por palavra. Analogamente ao problema dos significados das etiquetas, \citeauthoronline{paumier2016user} é vago sobre quais as fontes utilizadas para construir os dicionários numa tabela cuja descrição é \aspas{algumas referências bibliográficas para os dicionários eletrônicos} (p. 74), onde é passada a ideia de que é uma lista potencialmente incompleta, e não menciona nenhum processo de revisão para adequar eventuais diferenças semânticas no conjunto de etiquetas utilizadas pelos cinco diferentes trabalhos citados. Dos cinco, apenas o de \citeonline{muniz2005unitexpb} possui acesso público e menciona apenas o nome completo das 13 classes de etiquetas utilizadas: abreviação, adjetivo, advérbio, determinador, conjunção, interjeição, numeral, prefixo, preposição, pronome, acrônimo, substantivo e verbo; a abreviação que o \textit{software} retorna ao usuário não está presente no artigo, e o \textit{link} mencionado na seção \aspas{contribuições para o \textit{software} \textit{UNITEX}} (http://www.nilc.icmc.usp.br:8180/unitex-pb/) retorna um erro informando que o objeto requisitado não foi encontrado no servidor. Portanto, diante da limitação de compreensão da semântica das etiquetas imposta pela falta de documentação do \textit{software} e pela impossibilidade de acessar gratuitamente os outros quatro artigos referenciados pelo manual, então mesmo sabendo que o ideal seria converter todo o conjunto de etiquetas do Projeto Floresta Sintáctica para a notação do \textit{Unitex/GramLab} antes do treino, a conversão foi feita durante a etapa de testes; é previamente sabido que o desempenho será prejudicado.
Um outro etiquetador de \textit{design} simples que pode ser construído é um baseado em casamento de padrões. Nomeado \textit{YAS-Tagger} (Mais Um Etiquetador Simples de Partes do Discurso, do inglês \textit{Yet Another Simple Part-Of-Speech Tagger}), foi escrito para possuir formatos de entrada e saída similares ao do \textit{Unitex/GramLab} de forma a reaproveitar sem adaptações os \textit{scripts} de avaliação de desempenho escritos para o teste anterior (teste 2, resultados na seção \ref{sec:res:train:t2}). Internamente, faz o casamento de padrões sem diferenciar maiúsculas de minúsculas usando uma tabela associativa que associa tuplas à sua etiqueta mais frequente, construída durante o treinamento. Durante a etiquetagem, o texto de entrada é agrupado em tuplas de tamanhos entre 1 e 3, consultando da maior para a menor, atribuindo a etiqueta armazenada ou \aspas{???} caso nenhum padrão seja encontrado. %Entretanto, por uma parte da base utilizada ter sido etiquetada automaticamente por um etiquetador treinado com a parte da base revisada por linguistas, mas as etiquetas lá presentes não foram completamente revistas por linguistas (linha \aspas{revisão} da tabela \ref{tab:matflosint}, presente na seção \ref{sec:refteo:floresta}), logo o resultado obtido ainda pode não ser considerado confiável.
Para responder a uma pergunta que surgiu apenas após a realização do teste anterior a respeito da influência do tamanho do \textit{corpus} de treinamento no desempenho do etiquetador, foi realizada mais uma avaliação, esta utilizando o \textit{corpus} anotado por \citeonline{aires2000implementacao}, este disponibilizado publicamente pelo \citeonline{nilc2012nilctaggers}, e o mesmo algoritmo etiquetador do teste anterior. A base utilizada possui 103.666 etiquetas distribuídas ao longo de 4.713 sentenças, sendo separados 41.398 etiquetas em suas 1.915 sentenças para treino e 62.268 etiquetas em sem suas 2.798 sentenças para teste (proporção treino/teste de 40\% / 60\%), mas, devido a diferenças no alinhamento das etiquetas dos conjuntos das etiquetas de teste e predição, foram comparadas 55.808 etiquetas em suas 2.581 sentenças para teste. Portanto, a proporção treino/teste desta avaliação de desempenho foi 43\% / 57\% (teste 2.1, resultados na seção \ref{sec:res:train:t3}).
\section{A proposta do concordanciador}
\label{sec:des:conc}
O concordanciador, um dos requisitos desta aplicação, como definido por \citeonline{tagnin2010glossario}, é o \aspas{programa que extrai todas as ocorrências de uma palavra de busca num \textit{corpus} juntamente com seu cotexto \omissis{}} (p. 358), ou seja, um buscador de padrões. Um problema observado enquanto usuário das outras ferramentas para confecção da tabela \ref{tab:comppln} da seção \ref{sec:des:req} é que não havia nenhum \textit{feedback} para o usuário se o que estava sendo digitado era válido ou o que aquela busca significa, portanto o módulo a ser desenvolvido deve solucionar esse problema de usabilidade. Outro problema identificado é que a página onde a busca é digitada não possuem uma referência rápida com todas as principais construções válidas de interesse do usuário, mesmo quando existe espaço livre para tal conteúdo; também é outro problema que deve ser resolvido. Foi idealizado que este seria executado após o etiquetador, atuando por sentença, podendo filtrar por palavras inteiras, segmentos destas ou simplesmente especificar uma distância ente palavras e, ao mesmo tempo, podendo filtrar resultados por etiquetas.
Tendo como entrada o \textit{corpus} previamente etiquetado, para separar a palavra da etiqueta foi reservado o símbolo de sublinhado duplo (\aspas{\_\_}), já para indicar que é um segmento (e não uma palavra inteira) foi reservado o símbolo de ponto final duplo (\aspas{..}), para indicar que é esperado um número fixo ou variável de etiquetas foram reservadas as construções \aspas{\{exato\}} e \aspas{\{inicio, fim\}}, respectivamente, onde \aspas{fim} pode ser indefinido (até o final da sentença) se usado o caractere asterisco. A título de exemplo, nestas condições, a busca \aspas{..ado\_\_VERBO \{0,1\} terrorista \{0,*\} ..mic..} reconheceria a sentença \aspas{Um atentado terrorista realizado em nome do Estado Islâmico feriu 15 pessoas esta tarde} se, e somente se \aspas{atentado} seja etiquetado como verbo, bem como \aspas{Seu Zé foi fichado como terrorista durante a ditadura pelas opiniões que propagava o que disse nos microfones em rede nacional} é uma sentença que é possível de ser reconhecida por esta busca.
%\section{Atividades necessárias para o desenvolvimento}
%\label{sec:top}
%A seguir são descritos sucintamente os passos de desenvolvimento deste trabalho:
%\subsection{Analisar comparativamente os recursos das principais ferramentas existentes}
%Foi identificado que as plataformas WordSmith, CorpusEye, COCA Online Corpus, Unitex/GramLab e Sketch Engine provém recursos semelhantes aos desejados. Tais recursos desejados são os mesmos citados na seção de objetivos específicos (subseção \ref{obj:esp}), nos itens 2, 3 e 4. Não se limitado apenas às funcionalidades listadas, tais atributos foram anotados na tabela da figura \ref{fig:cfn} presente no capítulo de resultados (seção \ref{res:cfn}).
%\begin{figure}
% \begin{center}
% \includegraphics[width=\linewidth,trim={0 10cm 0 10cm},clip]{apendice/cfn.pdf}
% \caption[Comparação de ferramentas de NLP]{Comparação de ferramentas de processamento da linguagem natural}
% \label{fig:cfn}
% \end{center}
%\end{figure}
%\subsection{Selecionar as tecnologias}
%A ferramenta desenvolvida ser livre é um requisitos expressos no objetivo geral (subseção \ref{obj:ger}). A única ferramenta livre para etiquetagem morfossintática da língua portuguesa é o Unitex/Gramlab, como mencionado no estado da arte dos etiquetadores morfossintáticos para o português na subseção \ref{ea:em}. Portanto o etiquetador escolhido foi o Unitex/Gramlab.
%Para a interface web, outro requisito expresso no objetivo geral (subseção \ref{obj:ger}), foi escolhido a \textit{framework} Django. Este utiliza a linguagem de programação Python para servir páginas HTML dinâmicas. Tanto a linguagem quanto a \textit{framework} foram escolhas do autor por estes já serem conhecimentos prévios ao início deste trabalho.
%\subsection{Mapear as funcionalidades da interface gráfica em Java do Unitex/GramLab para ações em linha de comando}
%O Unitex/GramLab possui uma \aspas{janela} em sua interface na qual é possível visualizar todos os comandos \aspas{disparados} na linha de comando. Através da sequência de comandos executados, foi inferido um padrão para cada elemento da interface e seu impacto na linha de comando. Resultados disponíveis na seção (seção \ref{res:clire}).
%\subsection{Programar o núcleo extensível da plataforma sobre a \textit{framework} escolhido}
%\subsection{Programar o módulo extrator de lista de palavras}
%\subsection{Programar o módulo extrator de palavras-chave}
%\subsection{Programar o módulo concordanciador, que suporte busca por funções sintagmáticas e morfológicas}
%\subsection{Integrar os módulos desenvolvidos}
%Todos os módulos desenvolvidos necessitam operar de forma coerente, de modo a priorizar a interdependência entre funcionalidades providas pelos pacotes. Para tanto foi separado os pacotes que definem as interfaces dos pacotes que definem as visualizações e dos pacotes que implementam a funcionalidade, de modo a criar reforçar uma hierarquia de dependências que permitam extensibilidade de funcionalidades. O resultado esperado é reduzir o acoplamento entre diversos \textit{plug-ins}, formando uma árvore de dependências entre pacotes.
%\section{O que falta fazer}
%\subsection{programar o núcleo extensível da plataforma sobre a \textit{framework} escolhido}
%\subsection{programar o módulo extrator de lista de palavras}
%\subsection{programar o módulo extrator de palavras-chave}
%\subsection{programar o módulo concordanciador, que suporte busca por funções sintagmáticas e morfológicas}
%\subsection{integrar os módulos desenvolvidos}
%\subsection{escrever seção de desenvolvimento}
%\subsection{escrever seção de resultados e de conclusão}
%\subsection{revisar texto e enviar para a banca}
%\subsection{defender TCC}
%\subsection{corrigir os pontos levantados durante a defesa}
%\subsection{envio do texto à biblioteca e adequação a eventuais desvios da ABNT}
%\section{Cronograma}
% A análise comparativa já está pronta para ser escrita adequadamente com as técnicas de escrita científica.
%
% Para a construção da plataforma modular será utilizada a linguagem de programação Python em sua versão 3 em conjunto à \textit{framework} DJango. Isso \aspas{obriga} que os módulos sejam escritos também em Python. O módulo concordanciador usará o software Unitex/GramLab para obter as marcações.
%
% ...apesar do PALAVRAS ser o atual estado da arte, este não pode ser utilizado por não ser completamente livre. Decidimos, portanto, utilizar o Unitex/GramLab, por ser livre.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Resultados}
\label{cha:res}
Neste capítulo, serão apresentados e discutidos os resultados dos testes cujos métodos foram descritos e da implementação brevemente descrita no capítulo anterior, estando o primeiro na seção \ref{sec:res:train} e o segundo na seção \ref{sec:res:sis}.
\section{Treino do etiquetador}
\label{sec:res:train}
Nesta seção serão discutidos o desempenho dos etiquetadores nos testes baseado nos gráficos de cada seção e nas tabelas de resultados presentes nos apêndices \ref{ap:teste1}, \ref{ap:teste2} e \ref{ap:teste3}, estas, medidas através das estatísticas apresentadas na seção \ref{sec:refteo:estcb}, onde os espaços em branco nas tabelas são resultados de divisão por zero ou cujo resultado não seja um número real ($\mathbb{R}$); para conveniência do leitor, a tabela \ref{tab:t123:est} traz as estatísticas do desempenho de cada etiquetador como um todo, que é a transcrição da última linha da última tabela de cada apêndice anteriormente mencionado. Nos momentos em que o desempenho da implementação é mencionado, o computador \textit{desktop} utilizado possui as configurações expressas no apêndice \ref{ap:testehw}.
\begin{table}[h]
\caption{Estatísticas gerais dos etiquetadores treinados discutidos nas subseções da seção \ref{sec:res:train}}
\begin{center}
\begin{tabular}{c|c|c|c|c|c|c|c|}
Teste & \rotatebox[origin=c]{90}{Acurácia} & \rotatebox[origin=c]{90}{F$_1$ score,} \rotatebox[origin=c]{90}{Precisão e} \rotatebox[origin=c]{90}{Revocação} & \rotatebox[origin=c]{90}{Taxa de erro} & \rotatebox[origin=c]{90}{Prevalência} & \rotatebox[origin=c]{90}{Especificidade} \\ \hline
Seção \ref{sec:res:train:t1} & 94,77\% & 60,76\% & 39,24\% & 6,67\% & 97,20\% \\ \hline
Seção \ref{sec:res:train:t2} & 98,85\% & 76,93\% & 23,07\% & 2,50\% & 99,41\% \\ \hline
Seção \ref{sec:res:train:t3} & 98,67\% & 53,40\% & 46,60\% & 1,42\% & 99,32\% \\ \hline
\end{tabular}
\end{center}
\fonte{O autor}
\label{tab:t123:est}
\end{table}
\subsection{Teste 1: Etiquetador do \textit{Unitex/GramLab}}
\label{sec:res:train:t1}
Das 2.801.233 etiquetas comparadas, apenas 1.701.989 foram atribuídas corretamente ($Precisão \approx 60,76\%$). Na tabela \ref{tab:t1:est} (apêndice \ref{ap:teste1}), encontram-se as estatísticas de cada etiqueta derivadas a partir da tabela de contingência (tabela \ref{tab:t1:cont}, apêndice \ref{ap:teste1}), a qual mostra que apenas as etiquetas \aspas{PREP}, \aspas{PRON} e \aspas{V} demonstraram desempenho satisfatório (precisão maior que 75\%), que representam preposições, pronomes e verbos.
Uma característica deste etiquetador é que este possui um estágio anterior de enumeração de quais etiquetas são possíveis que aquela palavra represente e seu processo de \aspas{etiquetar} é escolher qual a etiqueta mais provável que cada palavra receba. Disso, pode-se destacar que preposições (\aspas{PREP}; exemplos: em, no, na, de, do, da, a, etc.) possuem número finito e conhecido; pronomes (\aspas{PRON}; exemplos: eu, tu, ele, nós, vós, eles, me, mim, te, ti, etc.), também; e verbos (\aspas{V}) possuem flexões que, na maioria das vezes, são indistinguíveis de outras classes morfológicas, o que significa que o etiquetador acertou em alguns lugares onde era esperado que ele não errasse. Também vale ressaltar que tais etiquetas estão entre as quatro etiquetas mais prevalentes tanto no conjunto de treino quanto no conjunto de testes, como pode ser observado na figura \ref{fig:t1:prev}. Como é esperado que o etiquetador etiquete com maior precisão aquelas etiquetas com mais amostras no treino, foi inesperado observar que uma precisão ruim (59,25\%) veio da etiqueta mais frequente em ambos treino e teste, a qual representa substantivos (\aspas{N}). Por isso, o reconhecimento de padrões linguísticos do \textit{Unitex/GramLab} para o português brasileiro é mais limitada que o esperado para ser esta ferramenta seja incluída na ferramenta deste trabalho.
\begin{figure}[h]
\begin{center}
\caption[Prevalência de etiquetas do \textit{Unitex/GramLab}]{Prevalência das 15 etiquetas mais frequentes do conjunto de treino, teste e etiquetado pelo \textit{Unitex/GramLab}}
\includegraphics[scale=.8]{prevalency_charts/fs_unitextagger_prev.pdf}
\fonte{O autor}
\label{fig:t1:prev}
\end{center}
\end{figure}
Outro ponto relevante é quanto a performance do etiquetador. O treino deste etiquetador levou alguns poucos segundos, o que é bom, mas ao usar o \textit{pipeline} desenvolvido que seria executado no servidor caso fosse considerado um etiquetador viável, este levou mais de 72 horas para concluir o processamento, e utilizava, num momento arbitrário de observação já no segundo dia de execução, 14 GB da memória principal mais 30 GB de \textit{swap} (paginação em disco), o que excede a capacidade do servidor. Portanto, por conta destes problemas e dos apresentados na última seção do capítulo anterior, este etiquetador com esta base de dados não apresentou características atrativas para entrar na solução desenvolvida.
\subsection{Teste 2: Etiquetador \textit{YAS-Tagger}}
\label{sec:res:train:t2}
Das 4.571.238 etiquetas comparadas, 3.516.634 foram atribuídas corretamente ($Precisão \approx 76,93\%$). Na tabela \ref{tab:t2:est} (apêndice \ref{ap:teste2}), encontram-se as estatísticas de cada etiqueta derivadas a par tabela de contingência (tabela \ref{tab:t2:cont}, apêndice \ref{ap:teste2}), nesta estão destacadas em cinza algumas linhas que são erros advindos de várias conversões de formatos onde o caractere barra (\aspas{/}), usado em datas e outros, colide com o separador usado para distinguir excertos do texto de suas respectivas etiquetas; tais erros somam 52 ocorrências distribuídas ao longo de todo o \textit{corpus} de teste, totalizando aproximadamente $0,0011375\%$ da amostra e, portanto, possuem impacto desprezível sobre as métricas exibidas na precisão de casas decimais apresentadas.
O etiquetador, como um todo, demonstrou desempenho satisfatório (precisão maior que 75\%), mas também errou 14,13\% das etiquetas atribuindo a etiqueta \aspas{???}. Tal etiqueta foi reservada para o etiquetador demonstrar que não foi possível atribuir nenhuma outra etiqueta, sendo consequência de um treino que não recebeu nenhuma amostra da construção encontrada no texto durante o teste. Isso pode indicar que o etiquetador não possui boa capacidade de identificação dos padrões da língua, hipótese esta que pode ser testada com um \textit{corpus} menor, o que gera a dúvida a ser respondida: o quanto isso afetaria o desempenho negativamente?
\begin{figure}[h]
\begin{center}
\caption[Prevalência de etiquetas do \textit{YAS-Tagger}]{Prevalência das 15 etiquetas mais frequentes do conjunto de treino, teste e etiquetado pelo \textit{YAS-Tagger}}
\includegraphics[scale=.8]{prevalency_charts/fs_yastagger_prev.pdf}
\fonte{O autor}
\label{fig:t2:prev}
\end{center}
\end{figure}
\subsubsection{Teste 2.1: Etiquetador \textit{YAS-Tagger} sobre \textit{corpus} de \citeauthoronline{aires2000implementacao}}
\label{sec:res:train:t3}
Das 55.808 etiquetas comparadas, apenas 29.799 foram atribuídas corretamente ($Precisão \approx 53,40\%$). Tabelas de contingência e suas estatísticas encontram-se no apêndice \ref{ap:teste3}. Observada essa vertiginosa queda de precisão de 23,56\%, os erros advindos da etiqueta \aspas{???} agora são 33,74\% (aumento de aproximadamente 138\%), que a faz a etiqueta mais prevalente na saída do etiquetador (vide figura \ref{fig:t3:prev}).
Tais mudanças indicam que este etiquetador não possui boa capacidade de identificação dos padrões da língua e é altamente dependente de seu \textit{corpus} de treinamento e, por isso, seu treino deve ser suficientemente volumoso apresentar bons resultados no teste. Como a intenção é que o etiquetador seja capaz de generalizar a língua de forma a não depender de um grande conjunto de treino para obter bons resultados, isso conta negativamente para a escolha deste, principalmente enquanto parte de uma aplicação de internet, cuja entrada é toda e qualquer que usuário forneça, e este espera que as etiquetas sejam atribuídas corretamente em todos os casos. Por isso outro algoritmo etiquetador terá a preferência.
\begin{figure}[h]
\begin{center}
\caption[Prevalência de etiquetas do \textit{YAS-Tagger} sobre \textit{corpus} de \citeauthoronline{aires2000implementacao}]{Prevalência das 15 etiquetas mais frequentes do conjunto de treino, teste e etiquetado pelo \textit{YAS-Tagger} sobre o copus de \citeauthoronline{aires2000implementacao}}
\includegraphics[scale=.8]{prevalency_charts/nilc_yastagger_prev.pdf}
\fonte{O autor}
\label{fig:t3:prev}
\end{center}
\end{figure}
Concluídos os testes, com os dados da tabela \ref{tab:airescomp} (da seção \ref{sec:refteo:aires}), pode-se montar a tabela \ref{tab:taggercomp} com os melhores resultados dos etiquetadores testados. Em tal tabela, fica evidente que os etiquetadores desenvolvidos e/ou treinados neste trabalho possuem uma precisão ruim, fazendo-se necessário utilizar um etiquetador de terceiros.
\begin{table}[h]
\caption[Comparação da precisão entre cinco etiquetadores]{Comparação da precisão entre os etiquetadores \textit{MXPOST}, \textit{Brill Tagger}, \textit{Tree Tagger}, \textit{YAS-Tagger} e \textit{Unitex/GramLab}}
\begin{center}
\begin{tabular}{c|c}
\hline
Etiquetador & Precisão \\
\hline
\hline
MXPOST & $89,66\%$ \\
\hline
Brill Tagger & $88,76\%$ \\
\hline
Tree Tagger & $88,47\%$ \\
\hline
YAS-Tagger & $76,93\%$ \\
\hline
Unitex/GramLab & $60,76\%$ \\
\hline
\end{tabular}
\end{center}
\fonte{O autor e \citeonline[p. 82]{aires2000implementacao}}
\label{tab:taggercomp}
\end{table}
\section{O sistema desenvolvido}
\label{sec:res:sis}
Nesta seção, será apresentado o sistema enquanto aplicação implantada, bem como as decisões e soluções para os problemas apresentados no capítulo anterior. Apesar de não ter sido mencionado anteriormente, durante a codificação foi utilizado o sistema de versionamento de código \textit{GitLab}, com implantação contínua automatizada, usando \textit{BuildBot} e servidor \textit{web} \textit{NGINX}, num servidor privado virtual alugado da empresa de hospedagem \textit{OVH}, disponibilizado o acesso através do domínio \aspas{corpusslayer.com}.
Começando da página principal (figura \ref{fig:ss:home}), esta traz os principais elementos que se repetem em todas as páginas: na barra de navegação, o nome da aplicação e o seletor de idiomas (em detalhe na figura \ref{fig:ss:langsel}), no rodapé, um texto estático alinhado à esquerda arbitrariamente definido durante a tradução e três \textit{links} que levam a páginas nas quais conteúdo e título são definidos na tradução. Porque o formulário de \textit{login} é exibido nesta tela juntamente ao botão que leva ao fomulário de cadastro, está ausente nesta página, mas a figura \ref{fig:ss:loginreg} traz esses botões em detalhe.
\begin{figure}[h]
\begin{center}
\caption{Página inicial do sistema desenvolvido}
\includegraphics[scale=.5,trim={0 16mm 0 0},clip]{screenshots/home/deslogado_comform.pdf}
\fonte{O autor}
\label{fig:ss:home}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption[Detalhe do seletor de idiomas]{Detalhe do seletor de idiomas, \textit{desktop} à esquerda e em dispositivos móveis à direita}
\includegraphics[scale=1,trim={43mm 113mm 120mm 10mm},clip]{screenshots/language_selector_desktop.pdf}
\includegraphics[scale=.5,trim={0 150mm 0 0},clip]{screenshots/language_selector_mobile.pdf}
\fonte{O autor}
\label{fig:ss:langsel}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption[Detalhe dos botões de autenticação]{Detalhe dos botões de autenticação, \textit{desktop} à esquerda, sendo encontrado alinhado à direita na mesma barra em que aparece o seletor de idiomas, e em dispositivos móveis à direita, sendo encontrado imediatamente abaixo do seletor de idiomas}
\includegraphics[scale=1,trim={180mm 135mm 0 0},clip]{screenshots/home/deslogado_semform.pdf}
\includegraphics[scale=.5,trim={40mm 120mm 40mm 57mm},clip]{screenshots/language_selector_mobile.pdf}
\fonte{O autor}
\label{fig:ss:loginreg}
\end{center}
\end{figure}
Após autenticar-se na aplicação, ao usuário é exibido uma tela como a da figura \ref{fig:ss:corpora}, a qual mostra a lista de \textit{corpora} que o usuário criou e um botão para adicionar um \textit{corpus} vazio sugestivamente nomeado \aspas{Adicionar \textit{corpus}}. Clicando no botão \aspas{Detalhes}, o usuário é levado à lista de documentos daquele \textit{corpus}, como na figura \ref{fig:ss:corpus}, que permite editar e deletar o \textit{corpus}, adicionar, editar e deletar documentos, além exibir um botão para ações extras que leva à página nomeada \aspas{Análise}.
\begin{figure}[h]
\begin{center}
\caption{Lista de \textit{corpora} dum usuário}
\includegraphics[scale=.5,trim={0 35mm 0 0},clip]{screenshots/home/logado.pdf}
\fonte{O autor}
\label{fig:ss:corpora}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption{Lista de documentos dum \textit{corpus}}
\includegraphics[scale=.5,trim={0 0 0 0},clip]{screenshots/corpus.pdf}
\fonte{O autor}
\label{fig:ss:corpus}
\end{center}
\end{figure}
Na página de análises (figura \ref{fig:ss:analysis}), são encontrados os serviços dos \textit{plug-ins} desenvolvidos já aplicando o abordado na seção \ref{sec:des:flux}. Nas seções seguintes, serão abordados o \textit{Unitex/GramLab} como separador de sentenças e gerador de lista de palavras (seção \ref{ssec:res:unitex}), o \textit{MXPOST} e o \textit{Tree Tagger} enquanto etiquetadores (seção \ref{ssec:res:tagger}) e a implementação do concordanciador proposto na seção \ref{sec:des:conc} (seção \ref{ssec:res:concord}).
\begin{figure}[h]
\begin{center}
\caption{Opções de análises para um \textit{corpus}}
\includegraphics[scale=.75,trim={0 0 0 0},clip]{screenshots/analise.pdf}
\fonte{O autor}
\label{fig:ss:analysis}
\end{center}
\end{figure}
\subsection{Separador de sentenças e gerador de lista de palavras}
\label{ssec:res:unitex}
Usando o \textit{Unitex/GramLab} como a parte que faz, de fato, o processamento dos dados, restou apenas encapsular o dado e exibi-los ao usuário. A primeira parte foi solucionada escrevendo o código a partir do manual de \citeonline{paumier2016user}, que serviu de base para a realização da segunda parte. Esta teve fortes influências da interface do Unitex/GramLab, no qual a lista de sentenças (figura \ref{fig:ss:sentences}) também exibe o número sequencial do item da lista e a lista de palavras (figura \ref{fig:ss:wordlist}), que uma janela composta de três listas, tornou-se uma página com três seções (são elas: \aspas{Palavras não reconhecidas}, \aspas{Palavra Composta} e \aspas{Palavra Simples}) que abrigam as lista e cada lista teve seu conteúdo reorganizado em formato de tabela.
\begin{figure}[h]
\begin{center}
\caption{Lista de sentenças dum \textit{corpus}}
\includegraphics[scale=.5,trim={0 16mm 0 0},clip]{screenshots/unitex/sentences.pdf}
\fonte{O autor}
\label{fig:ss:sentences}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption{Lista de palavras dum \textit{corpus}}
\includegraphics[scale=.7,trim={0 90mm 0 0},clip]{screenshots/unitex/wordlist.pdf}
\fonte{O autor}
\label{fig:ss:wordlist}
\end{center}
\end{figure}
\subsection{Etiquetador}
\label{ssec:res:tagger}
A primeira tentativa de integrar um etiquetador à ferramenta foi o \textit{MXPOST}, que, para textos da língua portuguesa, retornava o erro da figura \ref{fig:ss:mxerr}, mas foi mantido por funcionar para etiquetar com sucesso textos na língua inglesa. O segundo foi o \textit{Brill Tagger}, que requer permissão de execução (figura \ref{fig:ss:brillerr}) a arquivos cujo nome sugere que abrigarão conteúdo fornecido pelo usuário, o que pode gerar possibilidade de execução remota de código no servidor se assumir que o usuário sempre será mal-intencionado, descartando-o como possibilidade. O terceiro foi o \textit{Tree Tagger}, cuja visualização é bastante similar à lista de sentenças, mas com pares palavra-etiqueta, como pode ser observado na figura \ref{fig:ss:tted}.
\begin{figure}[h]
\begin{center}
\caption[Erro do \textit{MXPOST}]{Erro do \textit{MXPOST} ao etiquetar para o Português Brasileiro utilizado arquivos treinados por \citeonline{aires2000implementacao}}
\includegraphics[scale=.5,trim={0 14mm 0 0},clip]{screenshots/mxpost_erro.pdf}
\fonte{O autor}
\label{fig:ss:mxerr}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption[Erro do \textit{Brill Tagger}]{Erro do \textit{Brill Tagger} requisitando arquivos com permissão de execução}
\includegraphics[scale=.2,trim={0 0 0 0},clip]{screenshots/brill_erro.png}
\fonte{O autor}
\label{fig:ss:brillerr}
\end{center}
\end{figure}
%\begin{figure}[h]
% \begin{center}
% \includegraphics[scale=.5,trim={0 45mm 0 0},clip]{screenshots/etiquetar.pdf}
% \caption{Tela de processamento do \textit{Tree Tagger}}
% \fonte{O autor}
% \label{fig:ss:tter}
% \end{center}
%\end{figure}
\begin{figure}[h]
\begin{center}
\caption{\textit{Corpus} processado pelo \textit{Tree Tagger}}
\includegraphics[scale=.5,trim={0 39mm 0 0},clip]{screenshots/etiquetado.pdf}
\fonte{O autor}
\label{fig:ss:tted}
\end{center}
\end{figure}
\subsection{Concordanciador}
\label{ssec:res:concord}
Para resolver os problemas de compreensão por parte do usuário a respeito da sintaxe do buscador e do significado termo de busca digitado, levantados na seção \ref{sec:des:conc}, foi adicionado na tela de pesquisa do concordanciador desenvolvido (figura \ref{fig:ss:concbusca}) uma tabela com a referência das construções aceitas e uma pré-visualização em tempo real de como o termo será entendido pelo buscador que está no servidor. Já nos resultados (figura \ref{fig:ss:concres}), o destaque se dá tanto pelo par palavra-etiqueta em vermelho se destacando a cinza (pessoas com alguns tipos de deficiência visual congênita incapazes de distinguir certas cores (daltonismo) podem não ver esta diferença) e pela cor de destaque da etiqueta com fundo colorido e letra branca se diferenciando da com fundo branco e letra preta. Também é observado um botão com uma seta apontando \aspas{para trás} na figura \ref{fig:ss:concres}, bem como na \ref{fig:ss:tted}, \ref{fig:ss:wordlist} e \ref{fig:ss:sentences}, e tal seta, quando clicada, busca no \textit{corpus} pelo documento que contém o que estava sendo exibido na tela, retornando o documento diretamente em caso de resultado único (figura \ref{fig:ss:bts}) ou uma lista deles em caso haja múltiplos resultados (figura \ref{fig:ss:btm}).
\begin{figure}[h]
\begin{center}
\caption{Tela de busca do concordanciador}
\includegraphics[scale=.75,trim={0 0 0 0},clip]{screenshots/concordanciador/busca.pdf}
\fonte{O autor}
\label{fig:ss:concbusca}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption{Tela de resultados do concordanciador}
\includegraphics[scale=.75,trim={0 61mm 0 0},clip]{screenshots/concordanciador/resultados.pdf}
\fonte{O autor}
\label{fig:ss:concres}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption{Visualização de documento a partir dum clique na \aspas{seta para trás}}
\includegraphics[scale=.5,trim={0 50mm 0 0},clip]{screenshots/concordanciador/backtrack.pdf}
\fonte{O autor}
\label{fig:ss:bts}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{center}
\caption{Listagem de documentos a partir dum clique na \aspas{seta para trás}}
\includegraphics[scale=.5,trim={0 42mm 0 0},clip]{screenshots/concordanciador/backtrack_many.pdf}
\fonte{O autor}
\label{fig:ss:btm}
\end{center}
\end{figure}
\subsection{A ferramenta desenvolvida}
O último objetivo deste trabalho é \aspas{disponibilizar uma ferramenta livre para uso educacional}. Para tanto, a tabela \ref{tab:sourcecode} traz os \textit{URL}s dos repositórios que hospedam o código-fonte. Além disso, a aplicação desenvolvida foi implantada e disponibilizada no endereço eletrônico {\url{https://corpusslayer.com}}.
\begin{table}[h]
\caption{\textit{URL} para o código fonte das ferramentas desenvolvidas neste trabalho}
\begin{center}
\begin{tabular}{c|c}
\hline
\textit{Software} & \textit{URL} para o repositório do código fonte\\
\hline
\hline
\textit{Corpus Slayer}
&
\begin{minipage}{9cm}
\vspace*{2mm}
\begin{itemize}
\item {\url{https://git.adlerosn.com/adler/corpusslayer}}
\item {\url{https://github.com/adlerosn/corpusslayer}}
\vspace*{2mm}
\end{itemize}
\end{minipage}
\\
\hline
\textit{YAS-Tagger}
&
\begin{minipage}{9cm}
\vspace*{2mm}
\begin{itemize}
\item {\url{https://git.adlerosn.com/adler/yas-pos-tagger}}
\item {\url{https://github.com/adlerosn/yas-pos-tagger}}
\vspace*{2mm}
\end{itemize}
\end{minipage}
\\
\hline
\end{tabular}
\end{center}
\fonte{O autor}
\label{tab:sourcecode}
\end{table}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Conclusão}
\label{cha:conc}
O objetivo deste trabalho, plenamente atingido, foi desenvolver uma aplicação \textit{web} de código aberto para marcação e busca de partes do discurso em \textit{corpora}.
Para concluir tal desenvolvimento, identificamos que havia espaço dentro dos \textit{softwares} para estudo da língua para uma nova ferramenta gratuita, comparamos as existentes, levantamos requisitos, comparamos etiquetadores, apresentamos a ferramenta e a implantamos.
O maior benefício deste trabalho pode ser observado ao analisar custos com ferramentas para linguistas. O concorrente pago, de acordo com a tabela \ref{tab:compplnres} (seção \ref{jus}), é o SketchEngine, que custa 4,83 € mensais por conta de estudante \cite{sketchengine2018pricelist}, o que, para uma faculdade que oferta um único curso de letras de 8 semestres preenchidos com uma média de 36 alunos por período, custaria o montante de 16.692,48 €. Este, por ser em moeda estrangeira, varia de acordo com o câmbio e é sujeito a IOF (6,38\%); supondo uma taxa de conversão de 1 € para R\$ 4,50, aquele valor em reais, após IOF, seria R\$ 79.908,57. Esta quantia pode ser um impeditivo, enquanto implantar uma instância do \textit{Corpus Slayer} possui apenas o custo do servidor que o executará, que, dependendo da infraestrutura de TI da instituição, pode ser o mesmo servidor que já hospeda o site principal desta, reduzindo o custo de implantação a zero.
Apesar de tal comparação ser feita, o \textit{Corpus Slayer} ainda carece de um tesauro, de um gerador de \textit{corpora} a partir de buscas na \textit{web}, de ferramentas para trabalhar com \textit{corpus} paralelos, de geração de N-gramas, de identificação automática de palavras-chave, de ferramentas para análise de tendências, e das funcionalidades listadas na seção \ref{sec:des:req} que não foram implementadas neste trabalho, mas que podem ser adicionadas através de \textit{plug-ins} desenvolvidos em trabalhos futuros.
Sendo uma das preocupações deste trabalho, mencionado como detalhe no objetivo, o problema de usabilidade do concordanciador relatado na seção (\ref{sec:des:conc}) recebeu uma proposta de melhora desta. Entretanto, esta melhora na usabilidade não foi testada; apenas as premissas de usabilidade defendidas por \citeonline{krug2008pensar} foram seguidas, ficando como trabalho futuro analisar comparativamente a usabilidade dos concordanciadores existentes de forma a propor melhoras na usabilidade destes. Também vale ressaltar que a proposta não suporta repetições ou o operador lógico \aspas{ou} como algumas sintaxes de outras ferramentas, o que pode ser adicionado em versões futuras.
Identificamos que tanto o \textit{Unitex/GramLab}, quanto o \textit{YAS-Tagger} possuem a limitação de que etiquetam apenas as palavras que já encontraram anteriormente, sem fazer atribuição de etiquetas por inferência a partir de prefixos e sufixos. Um trabalho futuro pode implementar tal comportamento em ambos com a finalidade de aumentar os acertos e diminuir os erros de ambos os etiquetadores, com ênfase nas capacidade de generalização para palavras que não faziam parte do conjunto de treino.
Na introdução (capítulo \ref{cha:intro}), comentamos brevemente o impacto que a linguística de corpus teve na educação do século XX e expressamos o desejo de que tais benefícios continuassem. No entanto, não submetemos a ferramenta desenvolvida a nenhuma situação a qual fosse utilizada como instrumento de aprendizagem. Por isso, é trabalho futuro fazer um estudo de caso que inicie na elaboração ou adaptação de um plano de ensino para fazer uso de ferramentas computacionais para o aprendizado da língua, de preferência com o \textit{Corpus Slayer} na lista de ferramentas utilizadas, enquanto analisa comparativamente os resultados obtidos por ambas metodologias de ensino: a nova em contraste com a antiga.
A ferramenta desenvolvida pode ser utilizada, mesmo em face de todas essas limitações, para compreender melhor como algumas estruturas da língua são usadas por seus falantes. Um exemplo é o estudo da variação linguística típica de cada região do Brasil, que possui dimensões continentais e, por consequência, muitas variações linguísticas a serem estudadas.
%\section{Trabalhos futuros}
%\begin{itemize}
%\item Embora a interoperabilidade de programas dentro da aplicação desenvolvida tenha sido uma preocupação durante o desenvolvimento, a interoperabilidade com aplicações externas acabou sendo negligenciada por conta do cronograma. É trabalho futuro tornar as funcionalidades acessíveis através de outras aplicações (sugestão: API RESTful\footnote{REST é a sigla para Transferência de Estado Representacional (do inglês, \textit{\textbf{Re}presentational \textbf{S}tate \textbf{T}ransfer}), conceito abordado na tese de \citeonline{fielding2000architectural}, a qual descreve padrões arquiteturais para a transferência do estado da aplicação sobre o protocolo HTTP (que não possui estado).} com dados em JSON\footnote{JSON é sigla para Notação de Objetos JavaScript (do inglês, \textit{\textbf{J}ava\textbf{S}cript \textbf{O}bject \textbf{N}otation}), uma notação para representação de dados como texto.}).
%\item Embora este trabalho tenha levado em conta a acessibilidade de daltônicos na escolha de cores, a aplicação não foi projetada para cegos que usam leitores de tela. Portanto, tornar a aplicação acessível para tais pessoas é trabalho futuro.
%\item Embora mencionado na introdução (capítulo \ref{cha:intro}) sobre uma possível aplicação para o ensino da língua, são trabalhos futuros realizar um estudo de caso do uso da aplicação desenvolvida enquanto ferramenta de apoio no processo de ensino-aprendizagem num curso de letras, num curso de língua estrangeira, num curso de treinamento profissional e/ou numa turma de ensino médio.
%\item Embora atributos de \textit{corpora} arbitrariamente fornecidos pelo usuário estejam implementados no modelo de dados (figura \ref{fig:class} da seção \ref{sec:des:cdp}), eles não foram implementados para o usuário. É trabalho futuro implementar tais atributos, de preferência movendo o gerenciador de \textit{corpora} para um \textit{plug-in} à parte.
%\item Embora considerado desejável para grupos de pesquisadores atuando sobre um único objeto que pudessem compartilhar \textit{corpora} e resultados uns com os outros, o requisito foi abandonado para esta primeira versão quando colocado no cronograma. É trabalho futuro implementá-lo.
%\item Embora um painel de controle administrativo seja considerado relevante para administradores dos sistemas de tecnologia da informação de universidades ou empresas que venham a instalar a aplicação, o requisito foi abandonado para esta primeira versão quando colocado no cronograma. É trabalho futuro implementá-lo.
%\item Embora a aplicação tenha sido idealizada para usar apenas \textit{softwares} gratuitos de código aberto ou livre, o \textit{MXPOST} e o \textit{Tree Tagger} possuem licenças restritivas quanto a quais usos podem ser feitos dos etiquetadores em questão. É trabalho futuro substituir tais etiquetadores a fim de remover restrições quanto aos usos permitidos da plataforma.
%\item Pela falta de documentação no \textit{Unitex/GramLab}, é trabalho futuro inferir o significado das etiquetas por ele fornecido e documentá-las adequadamente.
%\item Embora considerado desejável extrair automaticamente palavras-chave a partir do texto fornecido, o requisito foi abandonado para esta primeira versão quando colocado no cronograma. É trabalho futuro implementá-lo.
%\item Embora considerado desejável montar \textit{corpora} automaticamente a partir de buscas na internet, o requisito foi abandonado para esta primeira versão quando colocado no cronograma. É trabalho futuro implementá-lo.
%\item Embora considerado desejável obter a frequência dos n-gramas do texto, o requisito foi abandonado para esta primeira versão quando colocado no cronograma. É trabalho futuro implementá-lo.
%\item Embora considerado desejável obter as estatísticas do texto (itens da lista de requisitos em \ref{sec:des:req} que iniciam com \aspas{Calcular estatísticas}), o requisito foi abandonado para esta primeira versão quando colocado no cronograma. É trabalho futuro implementá-lo.
%\item Uma das pessoas com quem o autor conversou com numa rede social rede social durante os estágios iniciais da execução deste trabalho dizia possuir dislexia (que o DSM-5 \cite{dsm5} cataloga como \aspas{315.00 (F81.0)} sob o nome \aspas{desordem específica de aprendizado com prejuízo na leitura} (p. 67)) e digitava com muitas palavras com grafia incorreta e com pontuação em locais arbitrários (que o DSM-5 \cite{dsm5} cataloga como \aspas{315.2 (F81.81)} sob o nome \aspas{desordem específica de aprendizado com prejuízo na escrita} (p. 67)), dificultando a compreensão da mensagem; usando o recurso de digitação por voz do teclado do telefone móvel dele, a grafia era correta mas a pontuação era inexistente. Para amenizar a dificuldade de interação social em meios \textit{online} por pessoas com este tipo de problema, é trabalho futuro implementar um módulo de correção ortográfica automática baseado em fonemas e um módulo de pontuação automática de textos não pontuados.
%\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\textit{lista de tópicos mencionando: trocar plugins que baixam código proprietário por que sejam completamente livres, mais plugins (de preferencia, livres), interface para adicionar e atualizar plugins a partir de repositórios GIT, caça aos bugs, o que refatorar na plataforma, implementar a api JSON que \aspas{não saiu a tempo}, estudo de caso com uma turma real}
%Uma aplicação de internet que atingiu grande parte da população mundial é o Facebook.
%
%Sendo um grande site de relacionamentos na internet, ultrapassou a marca dos 2 bilhões de usuários em junho de 2017 \cite{telegraph2017facebook}, o que representa 26\% da população mundial, segundo \citeonline{worldometers2018population}.
%
%Uma das pessoas que o autor conversou com nesta rede social durante os estágios iniciais da execução deste trabalho dizia possuir dislexia (que o DSM-5 \cite{dsm5} cataloga como \aspas{315.00 (F81.0)} sob o nome \aspas{desordem específica de aprendizado com prejuízo na leitura} (p. 67)) e digitava com muitas palavras com grafia incorreta e com pontuação em locais arbitrários (que o DSM-5 \cite{dsm5} cataloga como \aspas{315.2 (F81.81)} sob o nome \aspas{desordem específica de aprendizado com prejuízo na escrita} (p. 67)), dificultando a compreensão da mensagem; usando o recurso de digitação por voz do teclado do telefone móvel dele, a grafia era correta mas a pontuação era inexistente.
%
\input{tcc_bib}
\input{tcc_apendices}
\end{document}