\documentclass[a4paper]{article}
\usepackage{verbatim}
\usepackage{latin}
\usepackage{fullname}
\usepackage{portugues}

%\def\thepage{}
\def\t#1{{\tt #1 }}
\def\fr#1{

\noindent{\tt #1}}
\def\ex#1{(Ex.:\emph{#1})}
\newenvironment{exemplo}{\begin{quotation}\noindent Exemplo:}{\end{quotation}}

\def\ptc{{\sc Ptc }}
\def\jspell{{\sc Jspell }}

\title{Tratamento automático de termos compostos}
\author{Ulisses Pinto, José João Dias de Almeida \\
       \normalsize Departamento de Informática\\
       \normalsize Universidade do Minho\\
       \normalsize Campus de Gualtar, 4700 Braga\\
       \normalsize \t{{ulisses,jj}@di.uminho.pt}}
\date{}

 \begin{document}
 \maketitle
 \begin{abstract}

 Em Linguagem Natural são frequentes as situações em que certas sequências
de palavras tem um significado diferente daquele que seria inferível a
partir dos significados das partes.

 Estas situações correspondem a diferentes fenómenos linguísticos como
idiomatismos, lexias complexas, locuções, etc. que por simplicidade serão
o designados por {\bf termos compostos}.

 Para  processamento de  linguagem natural, há necessidade de pré-agrupamento 
das palavras em termos compostos para um tratamento correcto destes.

 Neste artigo apresenta-se uma ferramenta \ptc, para detecção e tratamento
automático de termos compostos baseada num dicionário externo.

Na sua versão actual o \ptc
permite:
\begin{itemize}
\item  controlar o tipo de flexões possíveis e a que palavras podem ser aplicadas
\item  devolver informação morfo-sintáctica associada ao termo
composto. Essa informação resulta do dicionário e das flexões encontradas
\item  tratar as ambiguidades léxicas e de sobreposição de termos compostos
\item  percorrer textos  e anotar os termos compostos
\item  tratar sobreposições de termos compostos
\end{itemize}


 Uma descrição da estrutura interna de representação bem como a arquitectura
geral da ferramenta será apresentada, juntamente com exemplos de utilização.

 \end{abstract}
{Palavras chave:} termos compostos, PLN, morfologia, verbos operacionais

\newpage
%\begin{comment}
\tableofcontents
\newpage
%\end{comment}

\section{Introdução}
\subsection{Terminologia}
Dada a sua complexidade e variedade, os conceitos e terminologia portuguesa
associados a lexias complexas, idiomatismos, locuções etc, não
conseguiu ainda consenso.

Neste documento usaremos {\bf termos compostos} para designar genericamente as
sequências de palavras que têm características não dedutíveis a partir 
das características das partes constituintes
\[ TC \neq f(P_1, P_2, P_n)\]

Alguns exemplos de compostos
\begin{itemize}
\item  Ideomatismos  \ex{ pezinhos de lã}
\item  Lexias complexas \ex{ máquina de escrever}
\item  Locuções  \ex{ para com, de modo que}
\end{itemize}


\begin{comment}
Lexia complexa - corresponde a uma sequência fixa de palavras que forma
uma única entidade significativa.

 features (ou traços) - A categoria, o Género, Número, Tempo, Pessoa,
 etc.

 strings - conjunto de caracteres

 \jspell - analisador morfológico de palavras independentes.
\end{comment}

\subsection{Motivação}
\begin{comment}
 Em Linguagem Natural são muito frequentes situações em que certas
sequências de palavras tem um significado diferente daquele que
seria inferível a partir dos significados das partes.

 Estas situações correspondem a diferentes fenómenos linguísticos como
idiomatismos, lexias compostas ou complexas, locuções, etc. e
simplificadamente, serão designados neste texto por {\bf termos compostos}.

\end{comment}

O processamento de linguagem natural necessita normalmente do 
pré-agrupamento das palavras em termos compostos.
 Cite-se  por exemplo as áreas de:
\begin{description}
\item[tradução  automática] 
 a generalidade dos termos compostos não pode ser traduzido "à letra".
 No processo de tradução tem de haver um pré-processamento que encontre
os termos compostos e só então pode ser feita uma correcta produção de
equivalentes. 
  \begin{exemplo}\fr{short circuit -- *circuito pequeno}

    é uma tradução palavra-a-palavra incorrecta. A produção de equivalentes tem
    de ser orientada ao termo.
\end{exemplo}

\item[localização de informação] (information retrieval): para aceder
  selectivamente a partes de
uma grande colecção de documentos, é necessário normalizá-los e indexá-los.
Não faz sentido que as palavras constituintes  de  um
termo composto sejam agrupadas com a palavra isolada.
\begin{exemplo}
a palavra "gato" no composto "gato pingado" não está
relacionada  com o mamífero gato, por isso  quem
pesquisar informação sobre gatos não tem interesse em encontrar
a entrada relativa a "gato pingado"
\end{exemplo}
Na pesquisa, pode haver utilização de termos compostos,
havendo por isso a necessidade de existência de entradas indexadas dos mesmos.
\begin{exemplo}
Para encontrar textos sobre "base de dados" interessa
também "bases de dados", mas não interessa apenas "base" ou apenas
"dados" 
\end{exemplo}

\item[tratamento sintáctico de linguagem natural]  
 a não consideração dos termos compostos como locuções, leva a situações
em que a análise sintáctica falha ou em que há necessidade de uma 
análise muito mais complexa.\ex{... para com ...}

\item[tratamento semântico de linguagem natural] 
 No caso do tratamento semântico o caso é ainda mais
grave, já que (por definição) o significado do composto não é dedutível
a partir da semântica das palavras que o constituem, logo a única
hipótese de tratamento semântico correcto desses casos é ter a 
indicação explícita da semântica do termo composto.
\ex{Apesar de tudo fomos embora}.
\end{description}


\begin{comment}
 Na definição de expressões regulares são usados alguns  sinais
com o seguinte significado:
\begin{description}
\item[+] indica uma ou mais repetições da expressão que o antecede.
\item[*] indica zero ou mais repetições da expressão que o antecede.
\item[$|$]  indica "ou"     (Ex.: \{a $|$ b $|$ c\}   significa a ou b ou c)
\item[\t{[ ]}] significa opcionalidade
\end{description}


 O  reconhecimento de um termo composto não se limita evidentemente  a
uma  simples  comparação de sequência palavras, já que as próprias  palavras
componentes podem ser flexionadas ou derivadas.
\end{comment}

\subsection{Questões básicas a considerar}
 O  reconhecimento de um termo composto não se limita evidentemente  a
uma  simples  comparação de {\it strings}, já que as próprias  palavras
que  compõem o termo composto podem ser flexionadas. Em alguns  casos  é
importante:
\begin{itemize}
\item  restringir o tipo de flexões que podem ser  feitas  a partir  das  palavras.
\item  dar a  possibilidade de indicar {\it features} para o termo
  definido (de outro modo a sua utilidade em gramáticas seria muito limitada)
\item  permitir a herança de {\it features} de algumas das palavras que a 
  constituem.
\begin{exemplo} 
a análise do termo composto  "acertei  em  cheio" deve 
retornar informação sobre o  tempo,  o  número e a pessoa, sendo esta
informação herdada de "acertar" \t{[CAT=v,T=preper,N=s,p=1]} 
\end{exemplo}
\end{itemize}



\begin{description}
\item[Ambiguidade]
Há problemas no armazenamento dos termos compostos devido a ambiguidades
léxicas dos termos constituintes.
O reconhecimento levanta também problemas porque uma palavra pode ter
mais que um radical diferente o que obriga a seguir simultaneamente vários
caminhos diferentes na árvore de termos compostos.

\item[Categorização e semântica]
Aos termos compostos são associadas categorias gramaticais e respectivas
semânticas, não sendo, em grande parte dos casos possível atribuir uma
categoria atómica como {\em adjectivo, nome comum}, etc., correspondendo-lhes
por vezes categorias gramaticais de nível superior - {\em frase nominal,
frase verbal, frase,} etc.
\end{description}
 

\begin{comment}
\subsubsection*{Interdependência com o nível sintáctico} Certos termos compostos têm constituintes que podem ser preenchido  por
um largo número de possibilidades podendo estas ter várias palavras. 
\begin{exemplo}
o termo composto  "levar  à
certa" também é usado em casos do tipo "levar alguém à certa"  em
que  este alguém seria o nome de uma pessoa, ou uma referência  à
mesma. Isto deve poder ser indicado usando uma sintaxe do tipo
\fr{levar [NP] à certa}

que devem incluir expressões como:
\fr{levei o meu rico tio à certa}
\end{exemplo}

\subsubsection*{Verbos reflexivos e restrições} Durante  a  construção  do dicionário de compostos  verificou-se
frequentemente o caso de expressões que só faziam sentido  quando
o  verbo  que  fazia parte da sua constituição  estava  na  forma
reflexiva,  todas  as  {\it flags} podiam  variar  -  tempo,  pessoa,
número, etc. - mas o verbo tinha de estar na forma reflexiva.
 ex. fazer-se engraçado
 pode  correctamente incluir "fiz-me engraçado",  "fez-se
engraçado", mas não com "fez engraçado".
   No  fundo  o  que  se  pretende é a introdução  de  restrições
associadas  a  palavra(s) do termo que indiquem  que  todas  as
flexões   são   possíveis  desde  que  se  verifique  determinada
condição.

\end{comment}

\section{Formato de definição de termos compostos}
\subsection{Morfologias}
 A  principal dificuldade na implementação dum sistema deste tipo
é  o  tratamento de flexões.
Por ex. "andar à nora"  deve incluir "andei à  nora",  "andou  à
nora",  etc. mas não "andei às noras". Isto  significa que devemos 
dar a indicação de qual(ais) a(s) palavra(s) passíveis de serem 
flexionadas, o que pode ser expresso na seguinte notação:
\fr{andar* à nora}

que tem o significado de
\fr{[todas as flexões associadas a andar] à nora.}\\

 Normalmente  é  útil associar ao composto as suas {\it features} que 
podem ser indicadas explicitamente ou herdadas de uma das palavras que a 
compõem.
O operador "*" indica flexão universal com herança de {\it features}.

No caso de existirem duas palavras
flexionáveis no mesmo termo composto
\ex{"acesso directo"  no plural é "acessos directos"},
devem associar-se dois  operadores de flexão.
 O operador "\%" é usado para flexão universal sem herança e o
operador "\&" para herança sem flexão.


\begin{exemplo} 
 \fr{andar*  depenado\%G-N}

 Ambas as palavras são flexionáveis, a palavra "andar" 
é flexionável e é a base para extracção das {\it features} do termo composto.
"Depenado"  é flexionável em Género (G) e Número (N).
Se pretendermos indicar  que  este termo composto é uma frase verbal (FV)
optaríamos por:
 \fr{andar* depenado\%G-N/CAT=FV}

A anotação /CAT=FV explicita {\it features}(neste caso a categoria) a 
adicionar (reescrever) ao termo composto.
\end{exemplo}

\noindent
Sendo assim podemos definir uma entrada no dicionário como:

{\small\begin{verbatim}
 entrada   = (palavra[sinal[nfeatures]])+ ['/' def_feat]
 sinal     = '*' | '%' | '&'
 nfeatures = feat ['-' feat]*
 def_feat  = feat '=' valor (',' feat '=' valor)*
 feat      = sequência de letras que são normalmente iniciais da
                 feature que representam
\end{verbatim}}


\subsection{Grafo como resultado da análise de termos compostos}
Durante a análise a extracção de um termo pode conduzir a uma situação ambígua
que iremos representar por um grafo acíclico (ver figura).

Para uma sequência palavras que  formem
um termo composto pode existir uma subsequência 
de palavras que também seja um termo composto.  Pode
ainda acontecer  que  as  palavras  devam  ser   interpretadas
separadamente.

\begin{exemplo}

 Com o Dicionário:
\fr{a pé}
\fr{a pé firme}

A representação de "foi a pé firme" é
\end{exemplo}

\input{ret.latex}\\
fig. Grafo de análise

\subsection{Interface}
\subsubsection{Como programa etiquetador}
 Neste  modo de utilização, o programa recebe texto de entrada
gerando um novo texto em que cada uma das
expressões  encontradas  é marcada com chavetas e respectiva categoria.

\begin{exemplo} 
 \fr{a Joana abriu os cordões à bolsa alegremente}

tem como resultado
 \fr{a Joana \{abriu os cordões à bolsa\}[CAT=v,T=pp,P=3,N=s] alegremente}
\end{exemplo}

\begin{exemplo}
resultado da anotação dum pequeno texto (sem classificação):\\

{\em
O João \{\{a pé\}firme\}, foi com os \{gatos pingados\} \{a altas horas\}
\{abaixo de Braga\} \{abanar o capacete\}, \{abriu o apetite\}, indo a uma
\{casa de tias\}, já que \{a carne é fraca\}, entrou \{à bruta\} e \{ficou
entregue à bicharada\}.

\{Andou por maus caminhos\}, \{armou-se em parvo\} e levou um \{balde de água 
fria\}. Para \{salvar a pele\} pôs-se a mexer, o \{pobre diabo\} que era 
\{pessoa de bem\} \{perdeu a cabeça\} e \{passou um mau bocado\}.

\{Fez \{o diabo a quatro\}\}, descobriram-se-lhe \{os podres\} e as coisas
foram \{de mal a pior\}. \{Deu \{tudo por tudo\}\}, \{correu riscos\} desnecessários,
ficou \{para sempre\} a \{ovelha ranhosa\}, \{vendeu caro a vida\} mas ele no 
fundo até \{tinha pinta\}.
}
\end{exemplo}

\subsubsection{Como biblioteca C:}
 A existência desta biblioteca permite utilizar o módulo de
 reconhecimento de compostos como componente de outros programas.
 A  função básica desta biblioteca é \verb"get_next_lexia", que
a partir de uma {\it string}, retorna um conjunto de pares posição, lexia:

 \[ get\_next\_lexia: posição \rightarrow (lexia \times posição)*\]


\begin{description}
\item[lexia] -- a próxima lexia (pode ser um termo simples ou composto)
\item[posição] -- a posição imediatamente a seguir ao fim da lexia, 
      (para facilitar a próxima chamada a \verb"get_next_lexia").
\end{description}
 

Sendo assim para uma  dada {\it string} de input há na realidade uma
lista de lexias possíveis  e respectivas  posições  de  continuação
correspondendo às várias hipóteses de análise.

{\small\begin{verbatim}
get_next_lexia(char *pos, comp_sol solutions[]);
\end{verbatim}}

A estrutura \t{comp\_sol} é definida da seguinte forma:
{\small\begin{verbatim}
typedef struct comp_sol {
   char *lex_end;
   char is_comp;   /*indica se se trata de um termo composto*/
   sol_type sol;   
} comp_sol;

\end{verbatim}}

{\small\begin{verbatim}
void arv_from_disk(char *filename);
\end{verbatim}}
Esta função é invocada para inicializar o \ptc.\\

\noindent
{\bf Programa exemplo de uso da biblioteca}
{\small\begin{verbatim}

#include "jslib.h"
#include "ptc.h"

main()
{
   ...
   comp_sol solutions[MAXPOSSIBLE];

   init_jspell("-d port -T lat -W 0 -g -a");
   arv_from_disk("expr.out");

   while (gets(X)) 
    { p_i = X;
      while (p = get_next_lexia(p_i, solutions))
         for(i = 0; solutions[i].sol[0] != '\0'; i++) 
         {
            ...
         }
    }
}
\end{verbatim}}

\subsection{Arquitectura do sistema \ptc e sua invocação}
 A utilização do sistema \ptc passa primeiro pela criação de
um  ficheiro intermédio que contém as expressões num formato mais
manuseável  que  o  ficheiro  de texto  inicial  que  continha  a
definição  de  compostos  dada  pelo  utilizador.  Mais  tarde  o
ficheiro  criado  será usado no reconhecimento  de termos compostos  num
texto.\\
\input{arch.latex}

\subsubsection*{Construção de dicionário de termos compostos }
{\small\begin{verbatim}
   build_ptc expr-por.txt port.hash expr.out
\end{verbatim}}
\noindent
\t{expr-por.txt} -- lista de termos compostos\\
\t{ port.hash}  --  dicionário morfológico (criado  pelo jbuild/\jspell)\\
\t{expr.out} -- o dicionário de termos compostos criado.\\

A invocação  do  programa para etiquetação das expressões será:
{\small\begin{verbatim}
   ptc port.hash expr.out
\end{verbatim}}


\section{Estrutura interna de representação}
 As  palavras são armazenadas sob a forma de uma árvore.
Cada nó tem uma quantidade variável de células, (igual ao número de
termos cujas palavras anteriores são comuns e diferem neste nível).
Por razões de eficiência, optou-se por  guardar  nos
nós da árvore a forma normalizada das palavras, sendo acrescentadas nas folhas
da árvore as condições que restringem as flexões de acordo com o dicionário 
original.\\

Exemplo:  os compostos
{\small\begin{verbatim}
 a braços
 abrir mão
 abrir o coração
 abrir o jogo
 abrir os braços
\end{verbatim}}

\noindent
dão origem a uma árvore do tipo:\\

\input{arv1.latex}

Na árvore aparece "braço" e não "braços"  porque
"braços" não é forma normalizada.

Nas folhas são indicadas  as  {\it features} do termo composto e de cada 
uma das palavras que o constituem, bem como a indicação da palavra a partir
da qual será feita a herança de {\it features}.

 Cada folha tem uma estrutura tipo:
{\small\begin{verbatim}
   n_def_feat [features]+ / feature_glob
\end{verbatim}}
\noindent
\t{n\_def\_feat} - número de ordem da palavra cujas {\it features} serão herdadas\\
\t{features} - {\it features} que restringem as flexões possíveis da palavra\\
\t{feature\_glob} - {\it features} do composto indicado explicitamente  no
dicionário inicial.

\begin{exemplo} o composto \verb"bom senso&" dá origem à descrição em {\it features}:
\fr{2[CAT=adj][CAT=nc, G=m]/}\\
\t{2} -- indica que vai haver herança de {\it features} da 2ª palavra,\\
\t{[CAT=adj]} -- são  as  {\it features} de "bom" \\  
\t{[CAT=nc,  G=m]} --  são  as {\it features} de "senso".

 A  seguir a "/" não aparece nada porque no dicionário também não há
classificação global do composto.
\end{exemplo}

\begin{comment}
 Surgiu  um problema de representação na árvore quando se deparou
com compostos em que um continha completamente o outro:
{\small\begin{verbatim}
 ex.
 a pé
 a pé firme
\end{verbatim}}
 já que a árvore correspondente a criar seria do tipo

\input{arv2.latex}

o que como se vê, está num formato não standard,  já  que
cada  célula  não  pode simultaneamente apontar  para  uma  folha
abaixo e para a sequência de {\it features}.

 O  problema foi resolvido criando uma folha com conteúdo nulo, e
assim a nossa árvore passa a ser:

\input{arv3.latex}


\subsection{Representação das palavras do composto}
 Na  figuras das árvores acima, são mostradas as palavras  dentro
da célula. Na realidade o que é posto nas células não é a própria
palavra, mas sim um identificador único que a representa e que  é
retornado pelo \jspell. No entanto foi também considerado  o  caso
de  palavras constituintes do composto que por qualquer razão não
se pretende que façam parte do dicionário, talvez por não fazerem
sentido  isoladamente,  mas  apenas  dentro  do  composto  a  que
pertencem. Assim em vez do identificador, pode-se ter  a  própria
palavra guardada por extenso, no nosso ficheiro de output, embora
normalizada.  Pode  ser no entanto  recomendável,  emitir  um
aviso quando se se deparou com uma palavra desconhecida já que se
pode tratar mesmo de um erro de dactilografia ou caso se pretenda
acrescentar essa palavra ao dicionário.

\end{comment}

\section{Análise de resultados e trabalho Futuro}
 Na concepção do programa de reconhecimento de compostos, houve
alguma preocupação de eficiência.

 Num teste realizado com um dicionário de termos compostos de frases de tipo
idiomáticos com cerca de 4500 frases aplicado a um sub-corpus com cerca de
1.5 milhões de palavras (retirado do corpus Natura-Público\cite{natura})
tendo sido encontrados 4716 termos idiomáticos\footnote{O número de 
lexias complexas, locuções existentes seria muito maior que o número de
termos compostos de tipo idiomático. As frases idiomáticas foram
escolhidas por serem estruturalmente mais complexas e assim 
constituírem um teste mais rico ao poder expressivo do sistema} em 53
minutos.

O computador utilizado foi um 486-DX2, a 80Mhz com 16Mb de RAM, com o
sistema operativo Linux.\\

Quanto a trabalho futuro são várias as linhas de acção previstas,
correspondendo a fenómenos/características que gostaríamos de melhorar.


\subsubsection*{Restrições}
 Já  foi referido a importância da existência de restrições  para
limitar certo tipo de flexões.
 Se assumirmos que o \jspell já retorna a indicação que a palavra
era reflexiva, podemos ter uma entrado do tipo:
{\small\begin{verbatim}
 fazer*R=1 engraçado
\end{verbatim}}
\noindent
 em que "R=1" indica que a reflexividade tem de existir.
 Outra hipótese possível consiste em indicar a condição no fim da frase:
{\small\begin{verbatim}
 fazer* engraçado/$1.R=1
\end{verbatim}}
\noindent
 esta  segunda  aproximação tem a vantagem de poder  ser  usada
também para restringir concordâncias
{\small\begin{verbatim}
 ex. gato*N pingado%N/$1.N=$2.N
\end{verbatim}}
\noindent
 A  condição  final $1.N=$2.N impede a inclusão de termos compostos
como "gatos pingado"

\subsubsection*{Alternativos e opcionais}
 Existem  muitas  expressões  que podem  ser  escritas  de  forma
ligeiramente diferente, mas que  significam o mesmo.  Essa
diferença  pode resultar da possibilidade de remoção de uma palavra ou de
substituição por outra(s).

Torna-se portanto importante a existência de um mecanismo de indicação de
palavras alternativas e palavras opcionais.

 Ex. de entrada com alternativas: " andar* (no $|$ ao) engate"

 Esta entrada incluirá tanto "andar no engate" como
"andar ao engate".
\begin{comment}

 Ex. de entrada com opcionais: "alto e [a] bom som"

 Esta entrada faria matching tanto com "alto e bom som" como  com
"alto e a bom som"

\end{comment}
\subsubsection*{Padrões  na definição de termos compostos:}
 Muitas  vezes um termo composto pode ter no seu interior um componente
variável, em que é impraticável enunciar todas as hipóteses e que
pode ser constituído por mais que uma palavra.

 Esse componente pode ser por exemplo uma frase nominal.
\begin{exemplo}
 o composto
\begin{verbatim}
 fazer de alguém gato sapato
\end{verbatim}
deve incluir os casos:
\begin{verbatim}
 fazer do irmão gato sapato
 fazer da irmã gato sapato
 fez dele gato sapato
 faz do meu rico tio gato sapato
\end{verbatim}
\end{exemplo}

 A  introdução  desta  potencialidade  implica  naturalmente  uma
interacção com o nível gramatical.


\subsubsection*{Verbos operativos e classes}
 Há certo tipo de verbos que aparecem com bastante frequência nos
termos compostos e  que  funcionam um pouco como verbos  auxiliares,  na
medida  em que o seu conteúdo semântico no termo é virtualmente
nulo.

 Ex.  no composto "chegar para as encomendas",  o verbo  "chegar"
não tem  aqui a sua semântica habitual.

 Acontece também que muitos destes verbos podem substituir-se sem
alterar o significado do termo.

 Ex. "vir tarde e a más horas" é equivalente a "chegar tarde e  a
más horas"

 em  vez de ter duas entradas independentes ou apenas uma entrada
do tipo
{\small\begin{verbatim}
 {vir | chegar} tarde e a más horas
\end{verbatim}}
 poder-se-ia  incluir estes dois verbos numa classe  sendo  usada
essa  classe  querendo indicar que é aceitável  qualquer  um  dos
verbos que a constituem.

\subsubsection*{Estruturação}
 Em muitos casos a sobreposição pura e simples de {\it features} não  é
satisfatória,  já  que  desta forma  se  pode  perder  informação
importante.  Para se lidar com um resultado único em que  existam
{\it features}  com  o  mesmo nome é necessária a existência  de  algum
nível de estruturação.

\subsubsection*{Adivinhar a categoria e {\it features} de um termo}
 Dada   a  enorme  quantidade  de  expressões  existentes,  seria
extremamente útil haver uma forma de determinar automaticamente a
sua classificação gramatical. Isto teria de ser feito com base em
pistas.  Por  exemplo um verbo seguido de um FN,  pode  ter  como
categoria um FV.
 Há  no  entanto  muitos casos em que isto não é possível,  tendo
então o utilizador de indicar explicitamente a categoria.

\section*{Agradecimentos}
Os autores agradecem a Álvaro Sanroman pelo esforço de clarificação das 
questões terminológicas envolvendo {\em colocações, frases feitas, fraseologia,
idiomatismos, lexemas, lexias, locuções, modismos, solidariedades léxicas, etc.}

\nocite{Simoes,Baptista,jspell,Xavier92,natura}

\bibliographystyle{fullname}
\bibliography{/home/jj/LN/ln,/home/jj/LN/dic}

% Dicionário de expressões populares portuguesas
% de: Guilherme Augusto Simões

% Estabelecimento e formalização de classes de nomes compostos
% de: Jorge Manuel Evangelista Baptista

 \end{document}
