\chapter{ESPECIFICAÇÃO DO PROJETO}

\section{Requisitos}

\subsection*{Requisitos funcionais}

\begin{itemize}

  \item O Sistema deve realizar a tradução de um texto em português para um texto em LIBRAS, considerando os aspectos sintáticos das línguas envolvidas.
  \item O corpo do dicionário devem ser expansível, permitindo que palavras sejam cadastras gradativamente.
  \item A base de regras sintáticas da língua portuguesa deve ser facilmente modificável, permitindo adequações iterativas durante o desenvolvimento do projeto e facilitando interações de linguistas com o sistema.
  \item O resultado da tradução deve ser exibido através de uma animação, uma vez que poucos surdos conhecem um sistema de notação escrita de língua de sinais, como ocorre com o \sw.
  \item O repositório de dados do dicionário deve estar disponível para que outros sistemas possam utilizá-la (via uma arquitetura de serviço)
\end{itemize}

\subsection*{Requisitos não-funcionais}

\begin{itemize}
  \item Embora a saída ocorra com computação gráfica, espera-se que a animação seja executável em computadores típicos, sem placas especiais para aceleração gráfica.
  \item Um aspecto desejado para o sistema é o de modularidade, de forma que componentes do sistema possam ser utilizados em outros projetos envolvendo línguas de sinais.
  \item Para o tradutor espera-se também um sistema o mais transparente possível, sem que haja dificuldades do usuário operá-lo.
  \item Deseja-se que o sistema seja implementado utilizando plataformas e tecnologias abertas.
\end{itemize}

\section{Casos de Uso}

Esta seção descreverá os casos de uso esperados do sistema. A figura~\ref{fig:casos_de_uso} contém o diagrama de casos de uso, que estão detalhados abaixo.

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.7]{imagens/CasosDeUso.png}
  \caption{Casos de uso}
  \label{fig:casos_de_uso}
\end{figure}

\subsection*{UC1 - Título: Traduzir frase}

\textbf{Atores:} usuário

\textbf{Pré-condições:} nenhuma

\textbf{Fluxo de eventos primário:}

\begin{enumerate}
\item Usuário acessa o sistema, selecionando opção de ''traduzir''
\item Usuário informa ao sistema o texto desejado em português
\item Usuário solicita a tradução
\item Sistema responde com o mesmo texto, mas em Libras.
\end{enumerate}

\textbf{Fluxos alternativos:}

Em 2, caso o usuário entre com um texto em outra língua ou com palavras desconhecidas, o sistema responderá com as palavras através de soletração manual das mesmas, ou seja, a palavra será soletrada através do empréstimo de sinais da Libras.

\subsection*{UC2- Inserir novo sinal}

\textbf{Atores:} especialista Libras

\textbf{Pré-condições:} nenhuma

\textbf{Fluxo de ventos primário:}

\begin{enumerate}
\item Usuário acessa o sistema, selecionando opção de ''Inserir novo sinal''
\item Usuário fornece os parâmetros do sinal
\item Sistema responde como ficaria o sinal descrito
\item Usuário valida a saída
\item Usuário fornece significado do sinal em português
\item Sistema adiciona sinal a sua base
\end{enumerate}

\textbf{Fluxo de eventos alternativos:}

Em 4, usuário pode rejeitar a resposta e voltar ao passo 2.

\textbf{Pós-Condições:} novo sinal adicionado ao sistema.

\subsection*{UC3 - Editar sinal existente}

\textbf{Atores:} especialista Libras

\textbf{Pré-condições:} nenhuma

\textbf{Fluxo de ventos primário:}

\begin{enumerate}
\item Usuário acessa o sistema, selecionando opção de ''Editar sinal existente''
\item Sistema apresenta lista de todos os sinais disponíveis
\item Usuário escolhe um sinal a ser editado
\item Sistema apresenta todos os parâmetros atuais do sinal
\item Usuário modifica os parâmetros que deseja
\item Sistema responde como ficaria o sinal descrito
\item Usuário valida a saída
\item Usuário fornece significado do sinal em português
\item Sistema salva modificações do sinal a sua base
\end{enumerate}

\textbf{Fluxo de eventos alternativos:}

Em 7, usuário pode rejeitar a resposta e voltar ao passo 5.

\textbf{Pós-Condições:} sinal modificado no sistema.

\subsection*{UC4 - Inserir/Alterar regra gramatical}

\textbf{Atores:} especialista Libras

\textbf{Pré-condições:} nenhuma

\textbf{Fluxo de ventos primário:}

\begin{enumerate}
\item Usuário acessa o sistema, selecionando opção de ''Alterar regra gramatical''
\item Sistema apresenta lista de todas as regras gramaticais
\item Usuário edita as regras ou insere novas
\item Sistema salva modificações na sua base
\end{enumerate}

\textbf{Pós-Condições:} regras modificadas no sistema.

\section{Decisões de Projeto sobre a Tradução Automática}
\label{projeto}
Apesar de na Tradução por Máquina os modelos estatísticos serem os mais comumente usados, o presente trabalho possui uma grande restrição quanto ao uso deste método: a língua objeto é a \libras, que é constituída por sinais e é espaço-visual, não possuindo forma escrita. Portanto, praticamente não existem textos escritos em \libras para servirem de \emph{corpus} e os que existem, estão em notações difíceis de serem processadas ou pouco utilizadas, como o \sw. Dados esses fatos, optamos por usar o método da tradução por regras neste trabalho.

Dos vários níveis de tradução apresentados na seção~\ref{sec:mt}, este tradutor atuará no segundo, o nível sintático, i.e., a ponte entre as línguas será na transformação da estrutura sintática do português para a estrutura sintática de \libras. Esse nível foi escolhido por representar um boa relação custo-benefício, não apresentando a simplicidade indesejada de uma tradução morfológica mas não entrando ainda no mérito da análise semântica, por essa apresentar complexidade muito elevada que fugiria do escopo desse trabalho.

A tese defendida por \citeonline{ronice1999} apresenta uma proposta do que seria a estrutura frasal de \libras, mais especificamente a estrutura de uma oração. Ela dividiu-a em duas categorias, para verbos \emph{plain} e \emph{non-plain}, ou seja, definiu duas árvores sintáticas para a \libras. Portanto essas estruturas serão consideradas neste trabalho para a definição das regras.

\section{Arquitetura}

A arquitetura do sistema de tradução Poli-Libras, isto é, a representação das unidades de software que constituem o sistema (também chamados módulos) e o relacionamento entre elas, pode ser descrita resumidamente pela figura \ref{fig:arquitetura}.

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.35]{imagens/arquitetura.png}
  \caption{Arquitetura do sistema}
  \label{fig:arquitetura}
\end{figure}

Destaca-se já que vários desses blocos são unidades independentes que podem ser diretamente reaproveitadas em outras aplicações

A seguir descreve-se cada um desses módulos do sistema, especificando função, entrada e saídas esperadas.

\subsection{Modelo de dados}

Uma questão fundamental do presente do trabalho é como se pode codificar digitalmente uma sequência de sinais (de \libras ou de qualquer outra língua de sinal) para que eles possam ser processados por aplicações diversas.

Essa questão aproximadamente corresponde ao problema de como se registrar por escrito textos em língua de sinais, o que como já descrevemos na seção de aspectos conceituais, ainda não se encontra bem resolvido dentro da própria comunidade surda.

De início, uma possibilidade para nosso sistema de tradução seria apresentar a saída já nessa notação de \sw, o que também contribuiria mais facilmente pra construção de um legado escrito em \libras. No entanto, como também já foi exposto, atualmente no Brasil a aceitação do \sw pela comunidade surda é baixa, de forma que optamos por utilizar este modelo apenas como sistema de codificação ''interno'' dos sistemas que o utilizam, ou seja, de forma que o usuário que saiba \libras não precisa saber \sw para operar nossos sistema.

Dessa forma, nosso sistema de codificação possui atributos diretamente correspondentes aos atributos expressos graficamente em um símbolo de \sw.

Fizemos essa correspondência baseados principalmente em \cite{manualsw}, obra que descreve de forma extensiva os atributos e seus possíveis valores no \sw; uma complementação de alguns aspectos da notação (possibilidades de movimentação das mãos) foram retirados da obra de \citeonline{ronice1999}.

Dessa forma, pudemos definir uma estrutura de dados capaz de codificar os sinais, representada pela figura \ref{fig:classes}

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.5]{imagens/classes_libras.png}
  \caption{Modelo de dados}
  \label{fig:classes}
\end{figure}

A figura mostra que um \emph{sinal} é modelado como uma sequência de \emph{símbolos}, sendo um símbolo aquilo que pode ser representado por uma símbolo do \sw; criamos essa distinção entre sinal e símbolo devido a certos ``sinais compostos'' como AA-BB, em que ``AA'' possui uma forma de escrita em SignWriting e ``BB'' outra, sendo que dessa forma ``AA-BB'' fica sendo o sinal, enquanto ``AA'' e ``BB'' são símbolos.

Além da sequência de símbolos, agregamos ao sinal também informações de cunho sintático que podem auxiliar o tradutor em sua tarefa.

Dessa forma, temos a seguinte hierarquia de atributos para descrever o sinal:

\begin{verbatim}
Sinal: expressa uma ideia, que normalmente corresponde a uma
	   palavra em português;
    nome: designação do sinal, como se fosse uma palavra;
    palavras: palavras do português que podem corresponder ao
              sinal;
    literais: palavras que devem aparecer no contexto do sinal;
    inerências: classes de palavras que  devem  aparecer  no
                contexto do sinal (ex: palavras que representam
                animais);
    Símbolo: representa uma combinação de aspectos morfológicos
            que podem ser expressos com um símbolo, ou seja,
            uma figura do SignWrite;
        Locação: em que parte do corpo as mãos se posicionam;
        Contato: forma de interação da mão com a locação;
        Mãos em unidade: indica que se as duas mão vão para o
                    ponto de locação ou se a mão não-dominante 
                    permanece em espaço neutro;
        Expressão facial: define características de bochecha,
                    olhos, sobrancelhas, testa, olhar, boca,
                    nariz, dentes, língua e outros;
        Mão (dominante e não-dominante): 
            Configuração: como os dedos estão articulados;
            Orientação: se a palma está voltada para o emissor
                        ou contra ele, voltada para o chão ou
                        para o céu;
            Plano: se o braço com a mão encontram-se na vertical
                   ou na horizontal;
            Dedos: como os dedos se movimentam.
\end{verbatim}

Com base nessa estrutura de dados definida primeiramente sintetiza-se em um conjunto de \emph{classes}, de acordo com o paradigma de Orientação a Objetos.

Essas classes são usadas posteriormente para servir de entrada a processos que definem estruturas em tabelas para um banco de dados capaz de armazenar esses dados e a estrutura (ou \emph{schema}) de documentos XML que também possam representar esses dados.

\subsection{Analisador Morfológico}

A figura~\ref{fig:an_morf} ilustra a especificação deste módulo.

\begin{figure}[!h]
  \centering
  \includegraphics[scale=0.7]{imagens/an_morf.png}
  \caption{Especificação do analisador morfológico}
  \label{fig:an_morf}
\end{figure}

Para que analisadores sintáticos tenham foco na análise sintática das frases, sendo esta, como o nome indica, seu objetivo supremo, faz-se necesserária certa independência quanto à obtenção dos lexemas. Visando a prover esse desacoplamento ao analisador sintático, surge a ideia de se usar um analisador morfológico. Diz-se que esta estrutura subjaz àquela, pois um analisador sintático se utiliza de analisadores morfológicos obtendo \emph{tokens} sintáticos à medida que sua análise, sintática, prossegue. 

Deve-se observar que a verificação de pontuações e, logicamente, de sinais diacríticos, nessa estrutura, cabe ao analisador morfológico. Mas por não ser função deste tratar esses sinais, ele deve notificá-los à camada sobrejacente através de \emph{tokens} sintáticos acordados.

Tipicamente, um analisador morfológico consome \emph{tokens} morfológicos até que a maior quantidade possível destes seja consunta, ao que retorna ao autômato sobrejacente algum \emph{token} correspondente.

No caso de linguagens naturais é comum que à mesma sequência de \emph{tokens} morfológicos se associem mais de uma acepção sintática. Exemplifica-se:
Na frase ''como uma onda no mar'', o analisador morfológico ficaria dúbio sobre decidir se a sequência de letras (e, portanto, de \emph{tokens} morfológicos) ``como'' é um advérbio, uma conjunção ou, ainda, se corresponde à conjugação da primeira pessoa do singular do presente do indicativo da voz ativa do verbo ``comer''. 

De fato, essa decisão não lhe cabe. Ele deve apenas informar ao analisador sintático as possíveis acepções morfológicas do \emph{token} em questão. Ou seja, para o exemplo anterior, as três acepções possíveis para o lexema ``como'' devem ser retornadas.

\subsubsection{Tokens morfológicos}


Foram previstas para os \emph{tokens} morfológicos as classes de características listadas a seguir, sendo que não necessariamente um \emph{token} possui todas essas classes definidas (pelo contrário, há classes de características que gramaticalmente não podem coexistir). Essas classes são muitíssimo inspiradas no dicionário padrão disposto pelo projeto JSpell.

Vale notar ainda que apenas a característica "categoria" é de uso obrigatório, pois é essencial para análises sobrejacentes.

\textbf CAT, "categoria".

Valores possíveis e significados:\\
    adj: adjetivo\\
    adv: advérbio\\
    art: artigo\\
    a\_nc: adejetivo/substantivo comum\\
    card: numeral cardinal\\
    con: conjunção\\
    cp: contração\\
    in: interjeição\\
    nc: substantivo comum\\
    nord: numeral ordinal\\
    np: nome próprio\\
    pass: partícula apassivante\\
    punct: pontuação\\
    ppos: pronome possessivo\\
    pind: pronome indefinido\\
    pdem: pronome demonstrativo\\
    pint: pronome interrogativo\\
    ppes: pronome pessoal\\
    prel: pronome relativo\\
    prep: preposição\\
    v: verbo\\

\textbf{Características para adjetivos e substantivos (\emph{adj, a\_nc, nc , np})}\\
\textbf{nome}: $<$LA$>$

Descrição: "leva artigo", comum para topônimos.
 
Valor possível e significado:\\*
    1: sim\\

\textbf{nome}: $<$G$>$, "gênero"

Valores possíveis e significados:
    \_: indefinido\\
    f: feminino\\
    m: masculino\\
    n: neutro\\
    2: ambos masculino e femíneo\\

\textbf{nome}: $<$N$>$, "número"

Valores possíveis e significados:\\
    n: neutro\\
    p: plural\\
    \_: indefinido\\
    s: singular\\


\textbf{nome}: $<$GR$>$, "grau"

Valores possíveis e significados:\\
    sup: superlativo\\
    dim: diminutivo\\

\textbf{Verbos, \emph{v}}

Os verbos também devem ser rotulados, além de com o número, com as pessoas e transitividade e com o tempo. Assim, são específicos da categoria:

\textbf{nome}: $<$P$>$, "pessoa"

Valores possíveis e significados:\\
    1:   primeira\\
    3:   terceira\\
    2:   segunda\\
    1\_3: primeira/terceira

\textbf{nome}: $<$T$>$, "tempo"

Valores possíveis e significados:\\
    ip:  infinitivo pessoal\\
    inf: infinitivo\\
    pp:  pretérito perfeito\\
    ppa: particípio passado\\
    pc:  presente do conjuntivo\\
    pic: pretérito imperfeito do conjuntivo\\
    c:   condicional\\
    p:   presente\\
    fc:  futuro do conjuntivo\\
    g:   gerúndio\\
    pmp: pretérito mais que perfeito\\
    pi:  pretérito imperfeito\\
    f:   futuro\\
    i:   imperativo\\
  
\textbf{nome}: $<$TR$>$, "transitividade"

Valores possíveis e significados:\\
    \_: transitivo/intransitivo\\
    i: intransitivo\\
    t: transitivo\\

\textbf{Dos Advérbios, \emph{adv}}

Para essa classe gramatical, será retornada marcação também de sua subcategoria, no seguinte molde:

\textbf{nome}: $<$SUBCAT$>$, "subcategoria adverbial"

Valores possíveis e significados:\\
    lugar:	advérbio de lugar\\
    modo:	advérbio de modo\\
    neg:	advérbio de negação\\
    quant:	advérbio de quantidade\\
    tempo:	advérbio de tempo\\

\textbf{Contrações, \emph{cp}}

No caso de contrações envolvendo advérbios, artigos, preposições ou pronomes, as seguintes \emph{tags} serão utilizadas quando conveniente:

Notação:

  \textbf{tag: possibilidade, possibilidade, (...).}

Lista:\\
    Adv: a, onde, ali, algures, aqui, outrora.\\
    Art: as, a, um, o.\\
    Prep:em, por, de, a, com.\\
    Prep2: entre.\\
    Pdem: isto, isso, esse, aquele, aquilo, este.\\
    Pdem2: outro. \\
    Pind: algo, outro, outrem, algum, alguém, o.\\
    Ppes: sigo, ele, te, tigo, nosco, me, vosco, lhe, migo.\\

As marcações \emph{Prep2} e \emph{Pdem2} devem ser utilizadas quando a contração ocorrer entre dois elementos da mesma classe, sendo essas marcações destinadas à identificação do segundo elemento da contração.\\


\textbf{Da Semântica ou das Características Inerentes}

As características de inerência necessárias para uma conversão de português escrito para LIBRAS mais correta devem ser marcadas com o rótulo \emph{SEM}, que já é o modo utilizado pelo analisador morfológico Jspell para informar ao pesquisador sobre características semânticas da palavra. Assim, 

\textbf{Característica: $<$SEM$>$}

Valores propostos e significados:\\
    rio: rio\\
    mes: mês\\
    livro: obra literária\\
    po: povo\\
    ter: localidade\\
    country: país\\
    n: número romano\\
    mar: referente a marca\\
    p: nome português\\
    p1: nome estrangeiro\\
    pl: planeta\\
    sigla: sigla\\
    mitol: seres mitológicos\\
    cont: continente\\
    cid: cidade\\
    lingua: língua\\
    instituicao: instituição\\
    servico: serviço\\
    proj: Projeto\\


\subsection{Analisador sintático}

\begin{figure}[!h]
  \centering
  \includegraphics[scale=0.7]{imagens/an_sint.png}
  \caption{Especificação do analisador sintático}
  \label{fig:an_sint}
\end{figure}

O analisador sintático recebe uma sequência de tokens e primeiramente diz se esta sequência é gramaticalmente correta, ou seja, se pertence a língua portuguesa. Esta operação modela a língua Portuguesa como uma linguagem livre de contexto e baseia-se em uma gramática livre de contexto formulado com base no trabalho Moderna Gramática Brasileira \cite{luft2002}. Sendo a frase gramaticalmente aceita, o analisador sintático deve retornar a árvore sintática da frase para que possa ser operada na próxima fase. Esse é o comportamento descrito pela figura \ref{fig:an_sint}.

Aqui está um dos ponto de maior limitação do trabalho, ao querer tratar a língua portuguesa como uma linguagem livre de contexto. Para isso define-se um escopo de frases formais e ``bem comportadas''.

Nesta etapa já se elimina algumas ambiguidades do analisador morfológico (ex: ''casa'' pode ser substantivo ou verbo (casar)), uma vez que nem todas as combinações lineares de classes gramaticais podem gerar árvores válidas; mas ainda assim poderemos ter mais de uma árvore válida, situação que poderia ser resolvida com análise semântica.

Para que a atuação deste componente possa ser melhorada, as regras da gramática livre de contexto deverão ser passíveis de edição por especialistas linguistas.

\subsection{Transformador Sintático}
\label{sec:ts}
\begin{figure}[!h]
  \centering
  \includegraphics[scale=0.7]{imagens/transformador.png}
  \caption{Especificação do transformador sintático}
  \label{fig:transformador}
\end{figure}

O transformador sintático é o primeiro elemento que realiza a ponte entre as duas línguas no nosso tradutor. Como a tradução que propomos é no nível da sintaxe, cabe ao transformador sintático, através de regras que mapeiam a sintaxe do português para a sintaxe de \libras, modificar a estrutura da frase em português para uma estrutura de \libras, de modo que ela seja sintaticamente correta na língua destino e a sua semântica seja mantida.

Como se vê na figura~\ref{fig:transformador}, o objetivo do módulo do transformador sintático é receber uma árvore sintática numa língua (português) e devolver a sequência de \emph{tokens} (palavras) resultante. Opera, portanto, sobre a árvore sintática obtida, executando transformações definidas numa gramática transformativa a fim de se obter uma frase em ``português simplificado'', que seria a forma de escrita com palavras em português que mais se aproxima da sintaxe da \libras. Essa sequência ainda contém palavras em português, mas organizadas de forma a representar uma frase em \libras, exatamente do mesmo modo que usamos o português para representar as frases em \libras na forma escrita ao longo deste trabalho, com a adição de informações sintáticas e morfológicas de cada palavra.

O transformador sintático é baseado em regras gramaticais da \libras, porém desconhece como as palavras podem ser representadas por sinais (morfologia da \libras). Esta etapa envolve os seguintes problemas:

\begin{itemize}
  \item remoção de artigos e preposições desnecessários
  \item posicionamento dos advérbios de tempo no início das frases
  \item colocação do adjetivo após o substantivo qualificado
  \item detectar comparação (igualdade ou desigualdade), e fazer as trocas adequadas
  \item posicionamento dos pronomes QUEM, ONDE, QUE
  \item posicionamento de QUAL, COMO e PARA-QUE (início) e de POR-QUE (fim)
  \item alteração da ordem da sentença (SVO, SOV, OSV) conforme verbo presente
\end{itemize}

\subsection{Contextualizador}

\begin{figure}[!h]
  \centering
  \includegraphics[scale=0.7]{imagens/contextualizador.png}
  \caption{Especificação do contextualizador}
  \label{fig:contextualizador}
\end{figure}

Esse módulo atua após a oração ter sido simplificada pelo transformador sintático e os sinais correspondentes, obtidos pelo dicionário português--\libras, conforme a figura~\ref{fig:contextualizador}. Será visto que pode haver alterações sobre a realização prevista para os sinais, oriundas puramente de análise de contexto ou da combinação desta com desamgibuação. Alterações de origem contextual ocorrem tipicamente na presença de advérbios, do contexto circunjacente ao verbo principal. Já a desambiguação, essa ocorre quando há mais de um sinal para a palavra portuguesa a ser traduzida.

Sua atuação é particularmente notável em casos como o do advérbio ``rapidamente''. Esse advérbio não é transmitido pelo falante de \libras através de um novo sinal, mas sim alterando características do sinal principal, do verbo. Nesse caso, a informação de que o verbo principal está acompanhado pelo advérbio ``rapidamente'' é adicionada pelo transformador sintático às informações contidas no \emph{token}  verbal. Futuramente, após o módulo contextualisador realizar as conversões básicas de \emph{tokens} para sinais, os quais contêm a descrição sobre como o sinal deve ser realizado, ele deve modificar os atributos descritivos adequadamente, agregando informações fornecidas pelo transformador sintático.

Continuando com o exemplo, o contextualisador aumentaria o atributo \emph{speed} do objeto \emph{HandMovement} das mãos utilizadas pelo sinal correspondente ao verbo modificado.

Para a frase ''comer chocolate rapidamente'', o fluxo de informação ocorre como descrito:

\begin{enumerate}
\item o transformador sintático inclui no \emph{token} de ''comer'' a informação de que o advérbio de intensidade ''rapidamente'' o modifica.
\item o contextualisador relaciona o advérbio ''rapidamente'' à velocidade de realização do sinal ''comer''
\item retorna a lista de objetos \emph{sinais}.
\end{enumerate}

Conforme as características descritas na seção~\ref{sec:libras}, outras alterações podem ser:

\begin{itemize}
\item procura do sinal mais adequado para uma posição ambígua com base na análise de contexto;
\item aspecto tempo pode determinar frequência de movimento;
\item o ponto de articulação pode ser uma marca de concordância verbal com o advérbio de lugar;
\item configuração de mão pode se alterar conforme sujeito; variando se pessoa, animal ou coisa;
\item a orientação pode ser uma concordância número-pessoal;
\item algumas palavras mudam de sinal conforme o contexto (análise de literais ou características de inerência circundantes);
\item negação formada por movimento contrário ou por movimento da cabeça;
\item detectar variações (de número) dos pronomes pessoais;
\item variação do pronome QUEM conforme o contexto;
\item adicionar expressão interrogativa / exclamativa conforme pontuação encontrada;
\item desambiguação de QUANDO (três sinais possíveis);
\item desambiguação de DIA (dois sinais possíveis);
\item desambiguação de numerais.
\end{itemize}

% TODO: colocar isso na implementaçao
Por ora não há definição formal de uma estrutura de dados que seja capaz de dizer ao contextualizador o que fazer. Portanto, embora se possa dizer que este componente é construído com base nos conhecimentos da gramática de \libras, por enquanto não se pode separar este conhecimento, típico do especialista linguista, da implementação da ferramenta (feita pelo desenvolvedor).

Nesse módulo há tratamento especial para algumas palavras, como verbos de ligação e advérbios que alterem a morfologia dos sinais (ex: rapidamente); esse tratamento ''hard-coded'' não é de todo absurdo, uma vez essas categorias são constituídas por listas fechadas de palavras.

\subsection{Sintetizador de sinais 3D}

A saída gerada pelo tradutor, uma codificação dos sinais da sentença em XML, pode ser utilizada por vários tipos de ferramentas, como um sintetizador de \sw ou mesmo por um texto plano que descreva os sinais, mas neste trabalho a solução adotada será uma saída com animação por computação gráfica, em que um avatar virtual realiza os sinais descritos no XML.

Assim, o sintetizador consiste em um módulo acoplável a outras aplicações que recebe a descrição em XML de uma sentença em \libras, descrição essa baseada no nosso modelo de dados, e sintetiza os movimentos necessários de acordo com os atributos setados nessa descrição.

\subsection{Ferramenta colaborativa}

A ferramenta colaborativa trata-se de uma aplicação web voltada para a criação e consulta de verbetes no dicionário Português - LIBRAS de forma colaborativa, conceitualmente similar à Wikipedia, e que permite o acesso via software desses verbetes, na forma de WebServices. Essa ferramenta foi batizada de ``WikiLibras''.

Esta ferramenta é muito importante para o projeto na medida em que permite a colaboração de outras pessoas para o preenchimento de um vocabulário de tradução, que dificilmente atingiria um tamanho significativo se dependesse apenas da equipe de desenvolvimento.

O WikiLibras também deve subsistir como um importante projeto independente, uma vez que o banco de dados por ela gerado pode fornecer dados pra outras aplicações de LIBRAS. Este último aspecto é no que consiste o módulo de Dicionário do sistema.

\subsubsection*{Telas (ou fluxo de navegação)}

As funcionalidades do sistema WikiLibras (para o usuário web) são a inserção, edição e consulta de sinais.

A criação/edição de um sinal é feita através da sequência de formulários das seguintes páginas:

\begin{itemize}
  \item nome do sinal: no caso de criação o sinal não deve existir e no caso de edição já deve existir;
  \item informações sintáticas do sinal: informa-se palavras (em português) que no texto corresponderão ao sinal assim como informações de contexto que poderão ser utilizadas na tradução; 
  \item informações gerais do símbolo: informa-se a localização do sinal e ponto de contato;
  \item informações da mão dominante do símbolo: informa-se a configuração, orientação e plano da mão (neste formulário a escolha da configuração de mão é auxiliada pela exibição de fotos das configurações correspondentes);
  \item informações do movimento da mão dominante: informa-se tipo, direção, velocidade e frequência do movimento desta mão;
  \item informações da mão não dominante;
  \item informações do movimento da mão não dominante;
  \item expressão facial do símbolo: informa-se características das bochechas, sobrancelhas, olhos, testa, olhar, boca, nariz, dentes, língua e outros. 
\end{itemize}

A nomenclatura das informações de contexto são inspiradas na \emph{gramática transformativa} e são os: 

\begin{itemize}
  \item \emph{literais}: palavras que devem aparecer no contexto daquele sinal (exemplo: sinal SENTAR-EM-RODA é substituído no lugar da palavra \emph{sentar} que possua a palavra \emph{roda} em seu contexto);
  \item \emph{inerência}: similar aos literais, mas denotam um conjunto de palavras contextuais representadas por um aspecto mais abstrato que essas palavras possuem em comum (ex: \emph{armas} é inerência de espada, faca, granada etc). 
\end{itemize}

Já a nomenclatura dos atributos dos símbolos foi baseado no modelo de classes anteriormente já modelado, que por sua vez baseia-se em obras como \emph{Lições sobre o SignWriting} \cite{manualsw} e \emph{Língua de Sinais Brasileira - Estudos Linguísticos} \cite{karnopp2004lingua}.

É importante que no processo de preenchimento do formulário permita-se que um sinal tenha vários símbolos, assim como na edição se permita a edição de qualquer um dos símbolos existentes para o sinal.

Além da edição / criação do sinal, o usuário pode também realizar uma busca por sinais já existentes. Para tal o usuário preenche um valor em um campo de texto, e a busca retornará os sinais com nomes similares e os sinais cujas palavras correspondentes em português sejam similares ao argumento da busca.

\subsection{Dicionário}

O dicionário consiste no bloco responsável por converter palavras em português escrito para a representação codificada em \libras, ou seja, implementa uma função que recebe uma string e retorna uma conjunto de sinais (de acordo com o modelo de dados já especificado).

Nosso dicionário irá consumir os dados disponibilizados pelo \emph{WebService} do sistema WikiLibras, sendo esses dados povoados de forma colaborativa pelos usuários do sistema.

As operações definidas no \emph{WebService} são as seguintes:

\begin{verbatim}
    Nome: signByName
    Descrição: Obtêm um sinal pelo seu nome
    Parâmetro: nome exato do sinal (ex: SENTAR-EM-RODA)
    Retorno: o sinal correspondente ou valor nulo 
             em caso de não haver sinal

    Nome: nearSigns
    Descrição: Obtêm os sinais cujos nomes 
               se assemelham ao argumento
    Parâmetro: o nome aproximado do sinal (ex: SENTAR)
    Retorno: os sinais correspondentes 
    	(ex: SENTAR, SENTAR-EM-RODA, SENTAR-NA-CADEIRA)

    Nome: translate
    Descrição: Traduz uma palavra em português para LIBRAS
    Parâmetro: palavra em português
    Retorno: lista dos sinais que possivelmente 
             correspondem à palavra dada

    Nome: simpleTranslate
    Descrição: Traduz uma palavra em português para LIBRAS; 
    	caso haja vários possíveis sinais correspondentes, 
    	apenas um sinal será retornado
    Parâmetro: palavra em português
    Retorno: um sinal em LIBRAS que 
             corresponde à palavra dada 
\end{verbatim}

Para garantir a demonstração do sistema em caso de ausência de conexão com a Internet, o dicionário deve ser capaz de especificar a localização do \emph{WebService} a ser consumido, para que assim possamos definir o \emph{WebService} em \emph{localhost} e utilizar um WikiLibras local.