Você está na página 1de 41

Unitex

Manual de utilização

Université Marne-la-Valée
http://www-igm.univ-mlv.fr/~unitex
unitex@univ-mlv.fr

Sébastien Paumier
novembro de 2002

1
Introdução

Unitex é um conjunto de programas que possibilitam o tratamento de


textos em língua natural utilizando recursos lingüísticos. Esses recursos encontram-se
sob a forma de dicionários eletrônicos, gramáticas e tábuas de léxico-gramática e têm
origem nos trabalhos desenvolvidos pelo lingüista Maurice Gross no Laboratoire
d'Automatique Documentaire et Linguistique (LADL). Esses trabalhos têm sido
desenvolvidos também em outras línguas pela rede de laboratórios RELEX.
Os dicionários eletrônicos descrevem as palavras simples e compostas de
uma língua, associando a cada uma um lema e uma série de códigos gramaticais,
semânticos e flexionais. A presença desses dicionários constitui um grande diferencial
em relação às ferramentas usuais, pois pode-se fazer referência às informações contidas
e descrever uma grande classes de palavras com motivos bem simples. Esses dicionários
são representados com o formalismo DELA e foram elaborados por equipes de
linguistas para várias línguas (francês, inglês, grego, italiano, espanhol, alemão, tai,
coreano, polonês, norueguês, português...).
As gramáticas são representações de fenômenos lingüísticos por redes de
transição recursivas (RTN), um formalismo semelhante ao dos autômatos de estados
finitos. Vários estudos demonstraram a adequação dos autômatos para a abordagem de
problemas lingüísticos, tanto em morfologia, quanto em sintaxe ou fonética. As
gramáticas manipuladas por Unitex retomam esse princípio, utilizando um formalismo
ainda mais abrangente que os autômatos. As gramáticas são representadas por meio de
grafos que o usuário pode facilmente criar e atualizar.
As tábuas de léxico-gramática são matrizes binárias que descrevem as
propriedades de certas palavras. Foram elaboradas tábuas para os verbos simples do
francês, com a descrição de sua sintaxe. A experiência demonstrou que cada palavra
tem um comportamento quase único. As tábuas possibilitam estabelecer a gramática de
cada palavra, daí a denominação “léxico-gramática”. Com Unitex, pode-se construir
gramáticas a partir dessa tábuas.
Unitex tem como características técnicas a portabilidade, a modularidade a
possibilidade de se tratar diversos sistemas de escrita, como os das diversas línguas
asiáticas. Além disso, Unitex segue a filosofia de Software Livre, podendo ser
livremente distribuído e/ou modificado.
As características lingüísticas de Unitex são as mesmas que motivaram a
elaboração de seus recursos lingüísticos: precisão, exaustividade e a atenção aos
fenômenos de fixidez, sobretudo no que diz respeito às palavras compostas.

O primeiro capítulo descreve a instalação e a inicialização do Unitex


O capítulo 2 apresenta as fiferetes etapas do tratamento de um texto.
O capítulo 3 descreve o formalismo dos dicionários eletrônicos em formato DELA
assim como as diversas operações que podem ser aplicadas nesses dicionários.
Os capítulos 4 e 5 apresentam as diferentes maneiras de se efetuar buscas de seqüências
e padrões em textos. O capítulo 5 descreve em detalhe a utilização do editor de grafos.
O capítulo 6 é dedicado às diversas possibilidade de utilização das gramáticas. Nele são
apresentadas as particularidades de cada tipo de gramática.
O capítulo 7 introduz o conceito de autômato do texto e desverve as particularidades
desse objeto.
O capítulo 8 é constituído de uma introdução às tábuas do léxico-gramática, seguida da
descrição do método que possibilita a construção de gramáticas a partir dessas tábuas.
O capítulo 9 descreve em detalhe os diferentes programas que constituem Unitex.
O capítulo 10 dá a descrição dos formatos do arquivos utilizados por Unitex.

Para quaisquer dúvidas e sugestões sobre a tradução deste manual para o português do
Brasil, pede-se contactar alexis@cpunet.com.br ou oto@letras.ufg.br
ou no sítio: http://ladl.univ-mlv.fr/brasil/

2
Capítulo 1

Instalação do Unitex
Unitex é um programa que pode funcionar tanto em Windows® quanto em
Linux. Neste capítulo descreve-se a instalação e a inicialização do Unitex em cada um
desses sistemas operacionais. Apresenta-se também os procedimento de introdução de
novas línguas no programa. Além disso, mostra-se como desinstar o Unitex.

1.1 O ambiente Java


Unitex é composto de uma interface gráfica programada em Java e de programas
externos escritos na linguagem de programação C. Esta mistura de linguagens de
programação possibilita que o aplicativo tenha uma rapidez de funcionamento, além de
sua portabilidade para diferentes sistemas operacionais. Para utilizar a interface gráfica,
é necessária a instalação da máquina virtual Java, também conhecida com JRE (Java
Runtime Environment).
Para que Unitex funcione com a interface gráfica, é necessário que esteja
instalada a versão Java JRE 1.4 (ou mais recente). Se você tiver uma versão mais antiga
de Java, Unitex ficará bloqueado (congelado) assim que for escolhida a língua de
trabalho. Você pode pegar livremente o ambiente Java JRE para o seu sistema
operacional no sítio http://java.sun.com da Sun Microsystems. Se você trabalha
com Linux ou utiliza uma versão de Windows que necessita de gerenciamento de
usuários, será necessário solicitar ao administrador da máquina que faça a instalação do
ambiente Java.

1.2 Instalação em Windows®


Se você quiser instalar Unitex em uma máquina Windows com gerenciamento
de usuários, é preferível pedir ao administrador da máquina para fazê-lo. Se você for o
único usuário da máquina ou se ela não necessita de gerenciamento de usuários, você
pode fazer a instalação sozinho.
Descompacte o arquivo Unitex_1.0.zip (ou uma versão mais recente que pode
ser baixada no sítio: http://www-igm.univ-mlv.fr/~unitex) em uma pasta chamada
Unitex criada antecipadamente. É recomendável que essa pasta seja criada dentro da
pasta Arquivos de programas (ou Program Files no Windows em inglês). Após a
descompactação, a pasta Unitex conterá várias outras pastas. Numa delas, chamada
App, existe um arquivo chamado Unitex.jar. Trata-se do arquivo executável que
inicializa a interface gráfica. Basta clicar duas vezes sobre esse arquivo para fazer
funcionar o programa. É preferível criar um atalho para esse arquivo na Área de
Trabalho para facilitar o lançamento do programa.

3
1.3 Instalação em Linux
Para instalar Unitex em Linux, é altamente recomendável pedir ao administrador
da máquina para proceder à instalação. Caso você seja o administrador da máquina,
descompacte o arquivo Unitex_1.0.zip (ou uma versão mais recente que pode ser
baixada no sítio: http://www-igm.univ-mlv.fr/~unitex) em um diretório nomeado
Unitex. No diretório Unitex/App faça rodar o script shell make_exe para recompilar
os programas externos. É recomendável limitar os direitos somente à leitura e à
execução. Em seguida, crie um alias de acordo com o seguinte modelo:

alias unitex='cd /..../Unitex/App/ ; java -jar Unitex.jar'

1.4 Utilizando Unitex pela primeira vez


Se trabalha com Windows, o programa pedirá para escolher uma pasta de
trabalho pessoal. Você poderá modificá-la posteriormente. Para criar uma pasta, clique
no ícone de “Criar Nova Pasta” (Cf. Figura 1.3).
Se você trabalha em Linux, o programa criará automaticamente um diretório
/unitex na sua área $HOME. Esse diretório possibilita que você armazene os seus dados
pessoais.
Para cada língua que você for utilizar, Unitex faz uma cópia das pastas e dos
arquivos necessários em seu diretório pessoal (com exceção dos dicionários). Assim,
você pode modificar à vontade sua cópia sem correr o risco de causar danos à instalação
de Unitex.

Figura 1.1 – Primeira utilização em Windows

Figura 1.2 – Primeira utilização em Linux

4
Figura 1.3 – Para criar uma nova pasta, basta clicar no ícone indicado nesta figura.

1.5 Introdução de novas línguas de trabalho


Existem duas maneira de introduzir novas línguas para o trabalho. Caso você
queira introduzir uma nova língua acessível a todos os usuários, é necessário copiar o
diretório correspondente a essa língua no diretório Unitex do sistema. Será necessário
solicitar esse serviço ao administrador da máquina. Entretanto, caso a língua interesse
somente a um usuário, ele poderá copiar o diretório em questão em sua área de trabalho
pessoal. Assim, ele poderá trabalhar com essa língua sem que ela seja proposta aos
demais usuários.

1.6 Desinstalação de Unitex


Para desinstalar o Unitex, basta apagar manualmente a pasta ou diretório
Unitex, além dos atalhos (em Windows) ou alias (em Linux).

5
Capítulo 2

Carregando um texto.

Uma das principais funcionalidades do Unitex é a busca de expressões


em textos. Para tanto, os textos de trabalho devem passar por várias operações de
preparação, como a normalização das formas não ambíguas e a segmentação do texto
em frases. Após essas operações, aplica-se os dicionários eletrônicos nos textos. Pode-se
então efetuar vários tipos de busca nesses textos com o auxílio das gramáticas.
Este capítulo descreve diferentes etapas da preparação dos textos

2.1 Seleção do idioma


No lançamento do Unitex, o programa pede para você escolher o idioma de
trabalho. As línguas propostas são aquelas presentes na pasta sistema Unitex, assim
como aquelas que eventualmente são instaladas em sua pasta pessoal de trabalho.
Quando você escolhe uma língua pela primeira vez, o Unitex recopia uma pasta dessa
língua para a sua pasta pessoal (exceto os dicionários). A escolha da língua permite ao
Unitex saber o local de alguns dados, como por exemplo o arquivo alphabet.txt.
Pode-se mudar de língua clicando sobre “Change Language ...” no menu “Text”. Se
mudar de idioma, o programa fechará todas as janelas relativas ao texto atual; e a barra
do titulo de Unitex indicará a nova língua escolhida.

Fig. 2.1 – Seleção da língua no lançamento inicial de Unitex

6
2.2 Formato dos textos
O Unitex manuseia textos em Unicode. Unicode é um padrão que descreve uma
codificação universal dos caracteres. A cada caractere é atribuído um número único, o
que possibilita representar textos independentemente das codificações especificas a
várias máquinas ou sistemas operacionais. Unitex usa uma código com 2 bytes do
padrão 3.0, chamado Little-Endiam (para mais detalhes, veja
http://www.unicode.org).
Usa-se um editor de texto comum (wordpad Fig. 2.2) e salvar com opção
“Text Unicode”. Geralmente, o código proposto sobre um PC é sempre Unicode Little-
Endian. Se o seu arquivo texto é um arquivo sem formatação (sem informação de fonte,
cores, etc.) gerado com Windows, pode-se usar o programa de Asc2Uni na linha de
comando (DOS). Este programa converte em Unicode arquivos de texto bruto
codificados em ASCII estendido Windows ANSI ( cf. capitulo 9)

FIG. 2.2 – Salvar em Unicode com Wordpad

Os textos convertidos não contêm informações de formatação e podem ser


usados com Unitex.

2.3 Abrindo um texto


Unitex propõe abrir dois tipos de textos. Os arquivos com a extensão .snt são
arquivos textos preprocessados por Unitex e estão prontos para serem manuseados pelas
diferentes funções do programa. Os arquivos com a extensão .txt são arquivos de
texto bruto. Para usar um texto, deve-se começar por abrir o texto .txt com
“Open...”no menu “Text” .

7
FIG. 2.3 – Menu Text

Escolha o Tipo de Arquivo “Raw Unicode Texts “e selecione o texto desejado.

FIG. 2.4 – Abertura de arquivo texto Unicode.

8
2.4 Preprocessamento de texto
Selecionado o texto, Unitex faz a proposta de preprocessá-lo. O
preprocessamento do texto é composto das seguintes operações: Normalização de
separadores, Segmentação em unidades lexicais; Normalização das formas não-
ambíguas, Segmentação em frases, Aplicação dos dicionários. Se você não quiser fazer
o preprocessamento do texto, mesmo assim, o texto será normalizado e segmentado em
unidades lexicais, pois essas operações são necessárias para o bom funcionamento de
Unitex. Pode-se sempre refazer o preprocessamento numa fase ulterior clicando sobre
“Preprocess Text...” no menu “Text”. Se aceitar o preprocessamento, Unitex exibirá os
parâmetros da janela da Fig. 2.5.

FIG. 2.5 – Janela de preprocessamento.

A opção “Apply FST2 in MERGE mode” serve para efetuar a segmentação do texto em
frases. A opção “Apply FST2 in Replace mode” serve para efetuar substituições no
texto, a maioria das vezes a normalização de formas não-ambíguas (substitui, por
exemplo daqui por de aqui; mas não substitui desse por de esse pois existe uma
forma idêntica nas primeira e terceira pessoas do singular do pretérito imperfeito do
subjuntivo do verbo dar) . A opção “Apply All default Dicionaries” permite aplicar os
dicionários no formato DELA (Dicionários eletrônicos do LADL). Finalmente,
“Construct Text Automaton” é usado para construir o autômato do texto ( Veja capítulo
7). Essa última opção consome muita memória e por isso não vem marcada por default.

Nota: Mesmo se clicar sobre “Cancel but tokenize text “, o programa efetua a
normalização dos separadores e a segmentação em unidades lexicais. O comando
“Cancel and close text” fecha o texto e não faz nenhuma operação sobre ele.

9
2.4.1 Normalização dos separadores
Os separadores usuais são o espaço, as tabulações (<TAB>), retorno à linha
(<Enter>). Pode-se encontrar vários separadores consecutivos nos textos, mas como
isso não tem nenhuma utilidade para uma análise lingüistica, normalizamos esses
separadores segundo as seguintes regras:
- toda seqüência de separadores contendo pelo menos um <Enter> será
substituída por um único <Enter>.
- Toda outra seqüência será substituída por um espaço.

A distinção entre um espaço e um <Enter> é conservada nesta etapa pois a


presença de <Enter> pode influir sobre a segmentação do texto em frases. O resultado
da normalização de um arquivo chamado meu_texto.txt é um arquivo localizado
no mesma pasta com o nome meu_texto.snt.

Quando o comando é feito pela interface gráfica, uma pasta chamada


meu_texto_snt é criada imediatamente após a normalização. Essa pasta contém
todos os dados relativos ao texto.

2.4.2 Segmentação em frases


A segmentação em frases é uma etapa importante no preprocessamento pois
possibilitará a definição das unidades de processamento lingüistico. Essa segmentação
será usada pelo programa de construção do autômato do texto. Ao contrario do que se
pensa, a definição de fronteira de frases não é um problema trivial.

Consideremos o seguinte texto:

A família chamou o Sr. Ferreira para resolver o problema.

O ponto que segue Sr é seguido por um palavra iniciada por uma letra maiúscula; ele
poderia ser considerado como o ponto final de uma frase, que é incorreto. A fim de
evitar problemas desse tipo, originados pela ambigüidade dos símbolos de pontuação,
deve-se utilizar gramáticas que descrevem os diferentes contextos em que podem
aparecer os limites de frases. Eis um exemplo de gramática de segmentação em frases:

10
FIG.2.6 – Exemplo de gramática de segmentação em frases do português.

Quando o caminho da gramática reconhece uma seqüência no texto e esse


caminho produz símbolos separadores de frases {S}, o símbolo é inserido no texto.
Assim, na figura acima, quando um dos caminhos reconhece, por exemplo, a seqüência
composta por um ponto de interrogação e por uma palavra iniciada por uma letra
maiúscula, insere o símbolo {S} entre os pontos de interrogação e a palavra seguinte. O
texto

Que horas são? São oito horas.

torna-se :

Que horas são?{S} São oito horas.

Uma gramática de segmentação pode manusear os seguintes símbolos especiais ou


predefinidos:
- <E> o elemento vazio, ou Epsilon. Reconhece a seqüência vazia;
- <MOT> : qualquer seqüência de letras (do alfabeto).
- <MIN> : reconhece qualquer seqüência de letras minúsculas;
- <MAJ> : reconhece qualquer seqüência de letras maiúsculas;
- <PRE> : reconhece qualquer seqüência de letras começando pela maiúscula;
- <NB> : reconhece qualquer seqüência de algarismos (a seqüência 1234 é
reconhecida e mas a seqüência 1 234 não);
- <PNC> : reconhece os sinais de pontuação ; , ! ? : assim como o ponto de
exclamação e de interrogação invertido do espanhol e alguns sinais de
pontuação asiáticos;

11
- <^> : reconhece um retorno à linha <Enter>;
- # : interdita a presença de espaço e do retorno à linha.

Por default, o espaço e o o retorno à linha <Enter> são opcionais entre dois estados ou
caixas. Para excluir esses separadores, usa-se o símbolo especial #. As letras
minúsculas e maiúsculas são definidas pelo arquivo alphabet.txt (V. Cap. 10); e para
detalhes sobre as gramáticas capitulo 5. A gramática usada chama-se Sentence.fst2
localizada na pasta :

/(Pasta de trabalho)/(Idioma atual)/graphs/Preprocessing/Sentence

A aplicação dessa gramática a um texto é efetuada pelo programa Fst2Txt no modo


MERGE. Isto significa que o símbolo {S} é inserido na saida texto do programa. Esse
programa tem como entrada um arquivo texto com extensão .snt e efetua a
modificação .

2.4.3 Normalização das formas não ambíguas


Algumas formas presentes nos textos podem ser normalizadas (p. ex. a palavra
disso que pode ser reescrita de isso) cada usuário pode efetuar as substituições em
função das necessidades. Todavia, deve-se tomar cuidado para que as formas
normalizadas não sejam ambíguas, e que a desaparecimento da ambigüidade sejam sem
conseqüências para a aplicação em questão. Se decidimos substituir por exemplo a
forma desse por de esse na frase :

José queria que Maria desse um presente ao João.

será substituída pela frase errônea:

José queria que Maria de esse um presente ao João.

Portanto, é necessário ter bastante cuidado quando se manipula as gramáticas de


normalização.

Os símbolos aceitos pela gramática de normalização são os mesmos que foram descritos
pelas gramáticas de segmentação de frase (cf. 2.4.2). a gramática usada chama-se
Replace.fst2 e localizada no repertório:

/(Pasta de trabalho)/(Idioma atual)/graphs/Preprocessing/Replace

Como para a gramática de frases, essa gramática é usada no programa


Fst2Txt, porém no modo REPLACE, isto significa que as entradas reconhecidas pela
gramática serão substituídas por seqüências produzida por esta.

12
Fig.2.7 Gramática de normalização de algumas contrações do português.

2.4.4 Segmentação do texto em unidades lexicais.


Algumas línguas, em particular as asiáticas, utilizam os separadores de maneiras
diferentes das línguas ocidentais; os espaços podem ser proibidos, opcionais ou
obrigatórios. A fim de poder gerenciar essa particularidades, a segmentação de um texto
em Unitex depende da língua. Assim, no que diz respeito às línguas ocidentais, como o
português, Unitex utiliza o princípio de que uma unidade lexical pode ser :
- um separador de frases {S};
- uma seqüência contínua de letras (as letra são definidas no arquivo do
alfabeto da língua);
- um caractere que não é uma letra; no caso de retorno à linha <Enter>, será
substituído por um espaço.

Para as outras línguas, a segmentação é efetuada caractere por caractere, exceto para o
separador {S}. Essa segmentação básica garante o bom funcionamento de Unitex,
embora limite a otimização da pesquisa de padrões. Qualquer que seja o modo de
segmentação, o retorno à linha <Enter> presente no texto será substituído por espaços.
Essa segmentação é efetuada pelo programa Tokenize. Esse programa produz vários
arquivos armazenados no diretório do texto:
- tokens.txt contém a lista das unidades lexicais na ordem que elas
aparecem no texto;

13
- text.cod contém um vetor de números inteiros; a cada inteiro corresponde o
índice de uma unidade lexical no arquivo tokens.txt;
- tok_by_freq.txt contém uma lista de unidades lexicais ordenada pela
freqüência;
- tok_by_alph.txt contém uma lista de unidades lexicais ordenada
alfabeticamente;
- stats.n contém algumas estatísticas sobre o texto.

A segmentação do texto :

Um gato é um gato.

produz um arquivo tokens.txt, com as seguintes unidades lexicais:

Um
(ESPAÇO)
gato
é
um
.

Observe-se a presença no arquivo de duas unidades lexicais distintas Um e um pois o


programa leva em conta as diferenças entre maiúscula e minúscula; além disso cada
unidade é codificada uma vez somente. Ao enumerar as unidades de 0 a 5, esse texto
pode ser representado pela seguinte seqüência de inteiros :

Indice 0 1 2 1 3 1 4 1 2 5
Unidade lexical Um gato é um gato .
correspondente

Para mais detalhes ver o capítulo 10

14
2.5.2 Aplicação de dicionários
A aplicação de dicionários consiste em construir um subconjunto de dicionários
que conterão unicamente as formas presentes no texto analisado.

Fig. 2.9 Resultados da aplicação de dicionários sobre um texto português.

Assim, o resultado da aplicação dos dicionários do português (Label) ao texto

Igor perdeu dinheiro na bolsa de valores

produz o seguintes dicionário de palavras simples:

Fig. 2.10. – Unidades lexicais de "Igor perdeu dinheiro na bolsa de valores" por ordem
de freqüência.

15
Fig.2.11 Resultado da aplicação dos dicionários sobre a frase "Igor perdeu ..."

No quadro DLF:11 existe a indicação de que o dicionário de formas simples


dessa frase tem 11 entradas; o DLC:1 indicou que o dicionário de formas compostas tem
uma entrada única e uma forma desconhecida é indicada no quadro ERR:1.

A palavra Igor não é uma forma simples do português, nem uma parte de forma
composta, foi considerada como uma forma desconhecida. A aplicação de dicionários
efetua-se com o programa Dico. Os três arquivos produzidos(dlf para a palavras
simples, dlc para as palavras compostas e err para as palavras desconhecidas) são
gerados no diretório do texto analisado. Uma vez a aplicação dos dicionários
completada, Unitex apresenta por ordem alfabética as palavras simples, compostas e
desconhecidas em três janelas. Como mostra a Figura 2.11.

Pode-se também aplicar os dicionários independentemente da fase de


preprocessamento do texto. Para tanto, basta clicar em "Apply Lexical Ressources ..."no
menu "Text". Unitex visualiza então a janela como na Fig. 2.12 que permite de
selecionar os dicionários para aplicar.

A lista de "User resources" relaciona todos os dicionários comprimidos presentes no


diretório (Língua Atual)/Dela do usuário. Os dicionários do sistema são relacionados
no quadro "System Ressources". Usa-se <Ctrl-click> para selecionar vários
dicionários. O botão "Set Default" permite definir a seleção corrente de dicionários
como a seleção por default. Essa seleção será usada durante o preprocessamento se
escolhermos a opção "Apply all Default Dicionaries".

16
Fig. 2.12 Parâmetros da aplicação do dicionários.

17
Capitulo 3

Dicionários

3.1 Os dicionários DELA.


Os dicionários eletrônicos do Unitex utilizam o formalismo DELA (Dicionários
Eletrônicos LADL). Esse formalismo possibilita descrever as entradas lexicais simples e
compostas de uma língua associando opcionalmente informações gramaticais,
semânticas ou flexionais. Nesse formalismo existem dois tipos de dicionários
eletrônicos. O tipo mais usual é o dicionário das formas flexionadas (DELAF) ou das
formas compostas flexionadas (DELACF). O outro tipo é o dicionário das formas
canônicas simples (DELA) e compostas (DELAC). Utilizamos de uma maneira genérica
os termos DELAF e DELAS para designar os dois tipos de dicionários indiferentemente
do tipo de entradas que eles possam ter: simples, composta ou mista.

3.1.1 Formato dos DELAF.


Sintaxe das entradas

Uma entrada do DELAF é uma linha de texto terminando com quebra de linha e que
tem o seguinte formato:

mercantis,mercantil.A+z1:ms:fp/isto é um exemplo

os elementos que compõem a linha são os seguintes:


- mercantis é a forma flexionada da entrada. Essa forma flexionada é
obrigatória;
- mercantil é a forma canônica da entrada. Para os substantivos e adjetivos,
coloca-se em geral a forma masculina singular; para os verbos, o infinitivo.

Essa informação pode ser omitida como no seguinte exemplo:

bolsa de valores,.N+NDN+z1:fs

o que significa que a forma canônica é idêntica a forma flexionada. A forma canônica é
separada por uma virgula

- N+z1 é a seqüência de informações gramaticais e semânticas. No exemplo, N


designa o substantivo, e z1 indica que se trata de uma palavra usual (cf.
quadro 3.2). Toda entrada deve incluir pelo menos um código gramatical ou
semântico, separado da forma canônica por um ponto. Se existirem vários
códigos, estes devem ser separado pelo caractere +;

18
- :mp:fp é a seqüência de informações flexionais. Essas informações
descrevem o gênero o número e eventualmente o grau; o tempo e o modo das
conjugações. Essas informações são opcionais. O código flexional é
composto de um ou vários caracteres codificando essa informação. Os
códigos flexionais devem ser separados pelo caractere : . No exemplo, m
significa masculino, p plural e f feminino (veja o quadro 3.3). O caractere :
se interpreta como OU lógico :mp:fp significa “masculino plural” ou
“feminino plural”. Como cada caractere corresponde a uma informação, é
inútil usar vários caracteres para codificar uma mesma informação como por
exemplo o particípio passado codificado sobre :PP seria estritamente
equivalente a :P sozinho;
- /isto é um exemplo é um comentário. Os comentário são opcionais e se
iniciam com o caractere /. Os comentários são eliminados quando da
compressão do dicionário.

OBSERVAÇÃO IMPORTANTE: Podemos também usar a virgula e o ponto nas


entradas dos dicionários. Para tanto, basta inserir o caractere \ para uma interpretação
literal :

3\,1415,PI.NUMERO
Organização das Nações Unidas,O\.N\.U\.,SIGLA

CUIDADO: a codificação leva em conta cada caractere numa linha de dicionário. Por
exemplo, se forem introduzidos espaços na linha, esses serão considerados como parte
integrante do código. Na linha seguinte :

mesas,mesa.N201:fp / cuidado com os espaços!

o espaço anterior ao caractere / será considerado parte do código flexional com três
caracteres e será composto de f, p, e o espaço.

Palavras compostas com espaço ou hífen

Algumas palavras compostas, como caixa-preta, podem aparecer em textos com


ou sem hífen. Para evitar uma duplicidade de entradas, pode-se utilizar o caractere =.
Quando da compressão do dicionário, o programa Compress verificará em cada linha se
a forma flexionada ou a forma canônica possuem o caractere = não protegido pelo
caractere \. Se for o caso, o programa substitui a entrada por duas outras entradas: em
uma o caractere = é substituido por um espaço, na outra ele é substituido por um hífen.
Assim, a seguinte entrada:

caixas=pretas,caixa=preta.N:fp

é substituida pelas duas linhas seguintes:

caixas pretas,caixa preta.N:fp


caixas-pretas,caixa-preta.N:fp

19
NOTA: se você quiser colocar uma entrada que contenha o caractere =, especifique-o
com o caractere \, como no seguinte exemplo:
E\=mc2,.FORMULA

Fatorização das entradas

Várias entradas tendo as mesmas formas flexionada e canônica podem ser


agrupadas em uma entrada única a condição que tenham os mesmos códigos gramaticais
e semânticos. Isso permite entre outras coisas agrupar as conjugações idênticas do
mesmo verbo :

gasta,gastar.V:P2s:P3s:Y2s

Se as informações gramaticais e semânticas diferem, deve-se criar entradas distintas:

livro,.N:ms
livro,livrar.V:P1s

Algumas entradas tendo o mesmo código gramatical podem ter significados diferentes,
como é o caso da palavra caixa, que pode designar, entre outras coisas, no feminino, um
receptáculo para guardar objetos, no masculino, um livro de pagamento, e com os dois
gêneros um funcionário ou funcionária encarregado de pagamentos. Pode-se estabelecer
uma distinção de entradas

caixa,.N:fs/ receptáculo para guardar objetos


caixa,.N:ms/ fluxo de pagamentos
caixa,.N:ms:fs/ funcionário que cuida dos pagamentos

Na prática, essa distinção só faz aumentar o número de entrada do dicionário. O


programas que compõem Unitex darão exatamente os mesmos resultados que se
houvesse uma entrada única

caixa,.N:ms:fs

A menos que se introduza uma informação semântica que permita distinguir as entradas
como concreto, abstrato e humano:

caixa,.N+Conc:fs/ receptáculo para guardar objetos


caixa,.N+Abst:ms/ fluxo de pagamentos
caixa,.N+Hum:ms:fs/ funcionário que cuidado dos pagamentos

O interesse de se estabelecer estas distinções fica a cargo portanto de quem está


construindo o dicionário e de suas finalidades.

3.1.2 Formato do DELAS.


O formato dos DELAS é parecido com o dos DELAF. A diferença é que só de
deve incluir a forma canônica seguida dos códigos gramaticais e/ou semânticos. A

20
forma canônica é separada dos diferentes códigos por uma vírgula. Segue abaixo um
exemplo de entrada :

cavalo,N201+ Anl,

O primeiro código gramatical ou semântico será interpretado pelo programa de


flexão assim como o nome da gramática para efetuar a flexão das entradas. A entrada do
exemplo acima indica que a palavra cavalo deve ser flexionada de acordo com a
gramática chamada N201. É possível inserir mais códigos de flexões às entradas, mas a
natureza de flexão limita o interesse dessa possibilidade. Para mais detalhes sobre a
flexão, veja nesse capítulo a seção 3.4

3.1.3 Conteúdo dos dicionários.


Os dicionários fornecidos com Unitex contêm as descrições das palavras simples
e compostas. Essas descrições indicam a categoria gramatical de cada entrada,
eventualmente seus códigos de flexões, assim como as informações semânticas diversas.
Os quadros seguintes resumem sumariamente os diferentes códigos usados nos
dicionários fornecidos com Unitex. Esses códigos têm o mesmo significado para quase
todas as línguas, mesmo se alguns tem o sentido específico como o gênero neutro para a
língua alemã, etc. ...

Código Significado Exemplos


A Adjetivo fabuloso
ADV Adverbio ontem, de repente
CONJC Conjunção de coordenação mas
CONJS Conjunção de subordinação embora, a menos que
DET Determinante uma, seus, vinte
INTJ Interjeição tchau,
N Substantivo mesa, bolsa de valores
PREP Preposição sem, à margem de
PRO Pronome ela, a gente
V Verbo cantar, ver
Quadro 3.1 códigos gramaticais usuais

21
Código Significado Exemplos
z1 Língua usual piada
z2 Língua especializada encafuar
z3 Língua muito especializada dzeta
Abst Abstrato bom gosto
Conc Concreto mesa
Hum Humano diplomata
Anl Animal cavalo
ConcColl Concreto coletivo trânsito
AnlColl Animal coletivo manada
HumColl Humano coletivo velha guarda
x Intransitivo encalhar
t Transitivo morder
Quadro 3.2 - Alguns códigos semânticos e gramaticais.

Apesar de existir uma codificação comum, quando possível, para a maioria das línguas,
os dicionários contêm especificidades próprias de cada língua. Assim, o código de
infinitivo pessoal é especifico ao português. Para uma descrição exaustivo dos código
usados, é melhor entrar em contato com o próprio autor do dicionário.

Código Significado
m Masculino
f Feminino
n Neutro
s Singular
p Plural
1,2,3 1ra, 2da,3ra pessoa
P Presente do indicativo
I Imperfeito do indicativo
S Presente do subjuntivo
T Imperfeito do subjuntivo
Y Presente do imperativo
C Presente do condicional
J Pretérito
W Infinitivo
G Gerúndio (particípio presente)
K Particípio passado
F Futuro
Quadro. 3.3 Códigos flexionais usuais.

Todavia esses códigos não são restritivos. Cada usuário pode introduzir o seus próprios
códigos, e criar os seus próprios dicionários. Por exemplo, para fins pedagógicos,
podemos introduzir nos dicionários de inglês marcas indicando os falsos-amigos como :

cask,.N+falso-amigo/tonel
journey,N+falso-amigo/viagem

22
é possivel também usar os dicionários para armazenar informações. Assim podemos
usar a forma flexionada de uma entrada para descrever uma sigla e a forma canônica
para dar a forma completa :

ADN,Ácido Desoxirribonucleico.SIGLA
DNA,Ácido Desoxirribonucleico.SIGLA
LADL,Laboratoire d'Automatique Documentaire et Linguistique.SIGLA
MEC,Ministério da Educação e Cultura.SIGLA

3.2 Verificação do formato de um dicionário


Quando os dicionários são de tamanho importante, tornam-se trabalhosos as
verificações manuais. Unitex contém o programa CheckDic que verifica
automaticamente os dicionários DELAF e DELAS.

Esse programa efetua uma verificação da sintaxe das entradas. Para cada entrada
mal formada, o programa mostra na tela o número da linha, o conteúdo da linha e a
natureza do erro. Os resultados de análise são guardados num arquivo chamado
CHECK_DIC.TXT que é visualizado uma vez a análise feita. Além das mensagens de
erros, esse arquivo contém a lista de todos os caracteres usados nas formas flexionadas e
canônicas, a lista dos códigos gramaticais e semânticos, assim como a lista dos código
flexionais usados. A lista dos caracteres possibilita verificar a coerência entre os
caracteres dos dicionários e os caracteres do arquivo alfabeto do idioma. As listas dos
códigos usados permite saber que não houve erro de digitação nos códigos dos
dicionários.
O programa funciona com os dicionários não-comprimidos ou seja, com o
arquivo texto. A convenção geralmente dada a essas extensões é .dic. para verificar o
formato de um dicionário, clicar sobre "Open ..." no Menu "DELA" .

Fig. 3.1 - Menu "DELA"

Uma vez que a carga é feita aparece tela da figura 3.2 :

23
FIG. 3.2 Exemplo de dicionário carregado.

Para lançar a verificação automática, clicar sobre "Check Format ... " no Menu
"DELA". A caixa de diálogo da figura 3.3 aparece então:

Fig. 3.3 - Verificação automática de um dicionário

Esta janela permite escolher o tipo de dicionário para verificar. Os resultados da


verificação do dicionário da Fig. 3.2 são apresentados na janela da figura 3.4.

24
Fig. 3.4 Resultado da verificação automática.

O primeiro erro é devido ausência de vírgula entre a forma flexionada e a forma


canônica; o segundo erro é devido à inexistência de ponto na linha ou seja não existe
código gramatical ou semântico.

3.3 Ordenação

Unitex manuseia os dicionários sem levar em conta a ordem das entradas.


Todavia, por razões de apresentação, é melhor ordenar os dicionários. A operação de
ordenação varia segundo vários critérios, especialmente o idioma do texto. Assim, a
ordenação de um dicionário thaï se efetua segundo uma ordem diferente da ordem
alfabética, que foi desenvolvido especialmente para isto ( cf. Capítulo 9).
Para as línguas européias, a ordenação se efetua geralmente segundo a ordem
lexicográfica, com algumas variantes. Por exemplo, no caso do português não existe
ordenação especial para letras acentuadas. Assim, a diferença entre a e á é ignorada se
quisermos comparar analisar e análise pois o final de cada palavra permite decidir a
ordem. A distinção não é feita quando os contextos são idênticos como em no e nó.

25
A fim de levar em conta esse fenômeno, o programa de ordenação de SortTxt
usa um arquivo que define as equivalência de caracteres. Esse arquivo chama-se
Alphabet_sort.txt e está localizado na pasta do usuário. Eis as primeiras linhas deste
arquivo usado para o francês :

AÀÂÄaàâä
Bb
CÇcç
Dd
EÉÈÊËeéèêë

Os caracteres da mesma linha são considerados como equivalentes quando os


contextos o permitem. Quando deve-se comparar os caracteres equivalentes,
comparamos segundo a ordem que aparecem de esquerda a direita. Podemos ver no
pedaço do arquivo acima que não fazemos diferença entre maiúscula e minúscula e que
ignoramos os acentos assim como a cedilha.
Para ordenar o dicionário, clique sobre "Sort Dicionary" no menu "DELA”. Por
default, o programa usa o arquivo Alphabet_sort.txt. Se o arquivo não estiver
presente na pasta do usuário, a ordenação se efetuará segundo a ordem de caractere do
Unicode.

3.4 Flexão automática


Como foi descrito na seção 3.1.2, uma linha DELAS é composta geralmente de
uma forma canônica e de uma seqüência de códigos gramaticais ou semânticos :

total,N211+z1
tribunal,N211+z1
túnel,N211+z1

O primeiro código encontrado é interpretado como o nome de uma gramática


utilizada para flexionar a forma canônica. As gramáticas de flexões devem ser
compiladas (Cf. cap. 5). No exemplo acima, todas as entradas serão flexionadas
segundo a mesma gramática chamada N211.
Para lançar a flexão, clique sobre "Inflect ..."no menu "DELA" . A caixa de
diálogo da figura 3.5 possibilita a localização da pasta das gramáticas de flexões. Por
default, é a sub-pasta Inflection do repertório da língua atual

Fig. 3.5 Configuração da flexão automática.

26
Fig. 3.6 Gramática de flexão N211

A janela da figura 3.6 mostra um exemplo de gramática de flexão

Os caminhos descrevem os sufixos a acrescentar ou subtrair para obter a forma


flexionada a partir da forma canônica, e as saídas (texto em negrito abaixo da caixa)
fornecem os códigos flexionais a acrescentar na entrada do dicionário. No exemplo, dois
caminhos são possíveis. O primeiro não modifica a forma canônica e acrescenta o
código flexional :ms. O segundo retira uma letra graça ao operador L, acrescenta depois
o sufixo is e acrescenta o código flexional :mp. Dois operadores são possíveis :
- L (Left) tira uma letra da entrada;
- R (Right) recoloca uma letra na entrada. Por exemplo em francês, vários
verbos do primeira conjugação são flexionados retirando o r final do
infinitivo e trocando o e por um è da quarta letra contando a partir do final :
peler => pèle, acheter => achète, gérer =>gère etc. para que não
seja necessário descrever vários sufixos para cada flexão (LLLLèle,
LLLLère, LLLLère), podemos usar o operador R para escrever só um
suffixo : LLLLèRR.

O programa de flexão Inflect explora todos os caminhos da gramática de


flexão gerando todas as formas flexionadas. O programa substitui o código a gramática
de flexão (N211 no exemplo) pelo código gramática sem o número da classe de flexão
(N no exemplo).
Veja na fig. 3.7 o dicionário flexionado do nosso exemplo

27
Fig. 3.7 Resultado da flexão automática.
3.5 Compressão
Unitex utiliza dicionários comprimidos na análise dos textos. A compressão
permite reduzir o tamanho dos dicionários e acelerar a consulta. Essa operação efetua-se
pelo programa Compress. Este tem como entrada um dicionário sob a forma de arquivo
texto (Meu_dico.txt) e produz dois arquivos:
- Meu_dico.bin contém o autômato mínimo das formas flexionadas dos dicionários;
- Meu_dico.inf contém os códigos que tornam possível a reconstrução do dicionários
de origem a partir das formas flexionadas contidas em Meu_dico.bin.
O autômato mínimo contido em Meu_dico.bin é uma representação das formas
flexionadas onde todos os prefixos e sufixos comuns são fatorizados. Por exemplo, o
autômato mínimo das palavras me, te, se pode ser representado pelo grafo da figura
3.8.

Fig. 3.8 Representação de um exemplo de autômato mínimo .

28
Para efetuar a compressão, abra o dicionário e clique em "Compress into FST" no menu
"DELA". A compressão é independente da língua e do conteúdo do dicionário. As
mensagem produzidas pelo programa são visualizadas numa janela; podemos ver assim
o tamanho do arquivo em formato .bin o número de linhas lidas assim como o número
de códigos flexionais produzidos. A figura 3.9 monstra o resultado da compressão de
um dicionário de palavras simples :
A titulo informativo, as taxas de compressão são geralmente da ordem de 95%
para os dicionários de palavras simples e de 50% para os de as palavras compostas.

Fig 3.9 Resultado da compressão do dicionário do exemplo.

3.6 Aplicação de dicionários.


Os dicionários podem ser aplicados ou na etapa de pré-processamento, ou
explicitamente chamando "Apply Lexical Resources ..." no menu texto (Seção 2.3.5).
Nesta seção iremos detalhar as regras de aplicação dos dicionários.

3.6.1 Prioridades
A seguinte regra de prioridade é respeitada: se uma palavra do texto foi achada
num dicionário, ela não será levada em conta quando for aplicado um dicionário com
prioridade inferior.
Isto permite eliminar ambigüidades quando aplicar os dicionários. Por exemplo,
a palavra uma é uma forma do verbo umar, um regionalismo do português europeu. Se
não quisermos se preocupar com essa interpretação basta criar um dicionário filtro

29
contendo somente essas entradas como uma,.DET:fs e lhe dar uma prioridades mais
alta. Desta maneira, mesmo os dicionários de palavras simples contêm outras entradas,
estas serão desprezadas através o jogo das prioridades.
Existem três níveis de prioridades. Os dicionários tendo o nome sem extensão
que finalizam-se com “-“ tem a prioridade mais alta; aqueles que finalizam com “+”
tem a prioridade baixa os outros dicionários tem a prioridades média. A ordem de
aplicação de varios dicionários que tem a mesma prioridade é sem importância.
Em linha de comando, temos

Dico texto.snt alph.txt Paises+.bin Cidades-.bin Rios.bin Regioes-.bin

os dicionários serão aplicados na seguinte ordem (texto.snt é o texto a ser tratado


alph.txt é o alfabeto do idioma) :

1.Cidades -.bin
2 Regioes-.bin
3 Rios.bin
4 Paises+.bin

3.6.2 Regras de aplicações dos dicionários.


Além das regras de prioridades, a aplicação dos dicionários se efetua levando em conta
as letras maiúsculas e os espaços. Para as letras maiúsculas, a regra é a seguinte:
- se existir maiúscula no dicionário, então deve haver uma maiúscula no texto.
- se existir minúscula no dicionário, então pode existir uma minúscula ou
maiúscula no texto.

Assim, a entrada porto,.N:ms reconhece as palavras porto, Porto, PORTO,


enquanto Porto,.N+Cidade não reconhecerá porto mas somente Porto e PORTO. As
letras maiúsculas e minúsculas são definidas pelo arquivo alphabet.txt colocado
como primeiro parâmetro do programa Dico.
O respeito aos espaçamentos tem uma regra muito simples : para uma seqüência
de caracteres seja reconhecida com a entrada de dicionário, ela deve ter exatamente os
mesmos espaços.

30
Capítulo 4

Busca com expressões regulares


Neste capítulo veremos como formalizar uma busca de padrões num texto
utilizando expressões regulares.

4.1 Definição
Este capítulo não tem por objetivo fazer uma introdução às linguagens formais,
mas somente demonstrar a utilização de expressões regulares em Unitex para efetuar
busca de padrões em textos. Quem se interessar pelo assunto poderá buscar obras
específicas sobre as expressões regulares.
Uma expressão regular pode ter umas das seguintes formas:

- uma unidade lexical (livro)


- um padrão (<saber.V>) todas as formas conjugadas do verbo saber e não o
substantivo saber;
- a concatenação de duas expressões regulares (eu como);
- a união de suas expressões regulares (José+Manuel);
- asterisco de Kleene de uma expressão regular (muito*).

4.2 Unidades Lexicais


Numa expressão regular, uma unidade lexical é uma cadeia de caracteres. Os
símbolos ponto, adição, asterisco, menor que ,maior que assim como os parênteses têm
um significado especial. Coloca-se o caractere \ para especificar um significado literal e
pesquisá-lo no texto. Seguem abaixo alguns exemplo de unidades lexicais válidas

gato
O\.N\.U\.
\(1984\)
{S}

Normalmente, Unitex tem uma tolerância para que as letras minúsculas reconheçam as
palavras escritas com maiúsculas : porto identifica a palavra porto mas também Porto
e PORTO. É possível forçar a busca apenas em minúsculas com a utilização de aspas:
“porto” identifica a palavra porto mas não as palavras Porto ou PORTO. No caso de se
necessitar de uma presença obrigatória de um espaço na expressão, é necessário colocá-
lo entre aspas .

31
4.3 Padrões
4.3.1 Símbolos especiais
Existem dois tipos de padrões. A primeira categoria agrupa os símbolos já apresentados
em 2.4.2. Os símbolos autorizados são :

- <E> o elemento vazio, ou epsilon. Identifica a seqüência vazia;


- <MOT> : identifica qualquer seqüência de letras (do alfabeto).
- <MIN> : identifica qualquer seqüência de letras minúsculas;
- <MAJ> : identifica qualquer seqüência de letras maiúsculas;
- <PRE> :identifica qualquer seqüência de letras começando por maiúscula;
- <NB> : identifica qualquer seqüência de algarismos (1234 é identificado
mas não 1 234);
- <PNC> : identifica o símbolo de pontuação ; , ! ? : assim como os pontos de
exclamação e de interrogação invertido do espanhol e alguns sinais de
pontuação asiáticos;
- <^> : identifica um retorno à linha (<Enter>).
- # : interdita a presença de espaço.

4.3.2 Referência aos dicionários


A segunda categoria de padrões pode incluir informações codificadas dos
dicionários do texto. As quatro formas possíveis são:

- <jantar> : identifica todas as entradas que tem jantar como forma


canônica .
- <jantar.V> : identifica todas as entradas que têm a forma canônica jantar
e o código gramatical V.
- <V> : identifica todas as entradas que tiverem o código gramatical V.
- <jantei,jantar.V> identifica todas as entradas que têm jantei como
forma flexionada, e jantar como forma canônica e que têm o código
gramatical V. Esse tipo de expressão é útil somente quando se trabalha com o
autômato de texto (ver capitulo 7) em que são explicitadas as ambiguidades
das palavras. Quando se efetua uma busca em texto, este padrão reconhece a
mesma coisa que seria reconhecida pelo padrão simples jantei.

4.3.3 Restrições gramaticais e semânticas


A referência ao dicionário (V) dos exemplos acima é básica. Pode-se
também pesquisar padrões mais complexos ao se indicar vários códigos gramaticais e
semânticos separados pelo símbolo +.. Uma entrada no dicionário será identificada
somente se ela possuir todos os códigos presentes na expressão. O padrão <N+z1>
identifica as entradas :

mesas,mesa.N+z1:fp
capitais européias,capital européia.N+NA+Conc+HumColl+z1:fp

32
mas não:

Descartes,René Descartes.N+Hum+Npróprio:ms
aceso,. A+z1:ms;

Podemos também excluir códigos usando o caractere - no lugar de +. Para ser


identificada, a entrada deve incluir todos os códigos presentes e nenhum dos códigos
proibidos. A expressão <A–z3> identifica todos os adjetivos que não possuem o código
z3 (cf. Tabela 3.2). Caso a busca seja por um código que contenha o caractere -, é
necessário especificar esse caractere com o auxílio da barra invertida \.
Assim, o padrão <N+falso\-amigo> poderá identificar todas as entradas do dicionário
que contenham os códigos N e falso-amigo.
A ordem dos códigos gramaticais e semânticos é sem importância. Os seguintes
padrões são equivalentes:

<N-Hum+z1>
<z1+N-Hum>
<-Hum+z1+N>

Finalmente , notemos que não é possível usar padrões com códigos somente proíbidos
assim como <-N> ou <-A-z1>. Esses padrões são incorretos.

4.3.4 Restrições flexionais

Pode-se também especificar restrições sobre os códigos flexionais. Essas


restrições devem obrigatoriamente incluir pelo menos um código gramatical ou
semântico. Elas têm o mesmo formato que se apresentam nos dicionários.

Seguem abaixo alguns exemplos usando essas restrições:

- <A:m> identifica um adjetivo masculino;


- <A:mp:f> identifica um adjetivo masculino-plural ou feminino;
a a
- <V:2:3> identifica um adverbio na 2 ou 3 pessoa; isso exclui os tempos
que não admitem 2a ou 3a pessoa (infinitivo impessoal, gerúndio, particípio) e
as todas as formas da 1ª pessoa.

Para que uma entrada do dicionário X seja reconhecida por um padrão Z, ele
deve ter pelo menos um código flexional de X que contenha todos os caracteres do
código flexional de Z, por exemplo :

X= abandona,abandonar.V:P2s:P4s:P3s:Y2s
Z=<V:P3p:Y2>

Nenhum código flexional contém ao mesmo tempo o caractere P, 2 e s.


Todavia, o código Y2s de X contém todos os caracteres Y e 2. O código Y2 está incluído

33
no pelo menos um código de X, o padrão Z então identifica a entrada X. A ordem de
caracteres dentro de um código flexional é sem importância.

4.3.5 Negação de um padrão


Podemos também efetuar a negação de um padrão através do caractere ! após o
caractere <. A negação é possível sobre os padrões <MOT>, <MIN>, <MAJ>, <PRE> e <DIC>
assim como sobre os padrões comportando apenas códigos gramaticais, semânticos ou
flexionais. O padrão # é a negação do padrão “ ” (espaço). A negação do padrão Z é
tudo que não é identificado por Z. Assim, como o padrão <!MOT> pode identificar todas
as unidades lexicais que não são compostas por letras do alfabeto.
A negação é interpretada de uma maneira especifica nos padrões <!DIC>,
<!MIN>,<!MAJ> e <!PRE>. Em vez de identificar todas as formas que não são
identificadas pelo padrão sem a negação, esses padrões fornecem como resultado
somente formas compostas de seqüências de letras. Assim, o molde <!DIC> permite
identificar todas as palavras desconhecidas do texto analisado. Essas formas
desconhecidas são na maiorias das vezes nomes próprios, neologismo ou erros
ortográficos.

FIG. 4.1 – Resultado da pesquisa do padrão <!DIC>.

Eis vários exemplos de padrões que mesclam diversos tipos de restrição :


<A-Hum:fs> : adjetivo não-humano no feminino singular;
<ler.V:P:F> : o verbo ler no presente e no futuro;
<canto,cantar.V> : a palavra canto como forma conjugada do verbo cantar e não o
substantivo canto;
<modelo.N-Hum> : todas as entradas nominais que têm as formas canônicas do
substantivo modelo e que não possuem o código semântico Hum.;
<!PRE>: todas as seqüências de letras que não iniciam por uma letra maiúscula;

34
<!MOT>: todos os caracteres que não são letras (veja Fig. 4.2)

Fig. 4.2 Resultado da pesquisa do padrão <!MOT>

4.4 Concatenação
Pode-se concatenar expressões regulares de três maneiras. A primeira é usando o
operador de concatenação anotado como ponto. Assim a expressão:

<DET>.<N>

identifica um determinante seguido por um substantivo. O espaço pode servir também


para concatenar; como na seguinte expressão :

o <A> gato

identifica a unidade lexical o, seguida por um adjetivo e da unidade lexical gato. Enfim,
é possível omitir o ponto e o espaço antes da abertura deparêntese ou antes do caractere
<, assim como após um fechamento de parêntese ou após >. Os parênteses servem para
delimitar as expressões regulares. Todas as seguintes expressões são equivalentes :

35
o <A> gato
(o <A>)gato
o.<A>.gato
(o) <A>.gato
(o (<A>)) gato

4.5 União
A união de expressões regulares pode ser feita através do caractere +. A expressão :

(eu+tu+você+ele+ela+a gente+nós+vós+eles+elas) <V>

reconhece um pronome pessoal sujeito seguido por um verbo. Pode-se também deixar
um elemento opcional utilizando a união com o elemento vazio <E> ou epsilon como
nos exemplos :

o (lindo + <E>) gato

identifica o gato e o lindo gato.

(<E>+franco-)(brasileiro + argentino)

identifica as palavras brasileiro, argentino assim como franco-brasileiro, ou


franco-argentino.

4.6 Asterisco de Kleene


O asterisco de Kleene, representado pelo caractere *, permite identificar zero, uma
ou várias ocorrências de uma expressão. O asterisco deve ser colocado a direita do
elemento em questão.

está ficando muito* quente.

identifica está ficando quente , está ficando muito quente, está ficando
muito muito quente, etc. O asterisco é prioritário sobre os outros operadores. É
necessário utilizar parênteses para aplicar o asterisco a uma expressão complexa:

0,(0+1+2+3+4+5+6+7+8+9)*

identifica um zero seguido por uma virgula e eventualmente uma seqüência de


algarismos.
CUIDADO: a pesquisar a palavra vazia com uma expressão regular como no
exemplo (0+1+2+3+4+5+6+7+8+9)*, não é permitida. O programa sinalizará um erro
como monstra a figura 4.3

36
Fig. 4.3 Erro sinalizado por Unitex quando pesquisar uma expressão com
palavra vazia

4.7 Busca
4.7.1 Configuração da busca
Para localizar uma expressão dentro de um texto, deve-se abrir um texto (veja
capitulo 2). Em seguida, cliquer em “Locate Pattern ... “ no menu “Text”. A janela de
figura 4.4 aparece então.

Fig. 4.4 - Janela de pesquisa de expressões

37
No quadro “Locate Pattern in the form of” permite escolher entre expressão regular e
uma gramática. Clicar sobre “Regular expressão”.

O quadro “Index” permite de selecionar o modo de reconhecimento :

- “Shortest matches” dá a prioridade às seqüências mais curtas;


- “Longest matches” : dá a prioridade às seqüências mais longas; é a opção
default;
- “All matches” : fornece todas as seqüências reconhecidas.

O quadro “Search limitation” permite de limitar ou não a pesquisa a número máximo


de ocorrências. Por default, a pesquisa é limitada às primeiras 200 ocorrências.

As opções do quadro “Grammar outputs” não são relacionadas às expressões


regulares e serão descritos nos próximos capitulos.

Digite uma expressão e clique “Search” para lançar a pesquisa. Unitex


transformará a expressão em uma gramática no formato .grf . Essa gramática será
compilada para uma gramática no formato .fst2 que será usada pelo programa de
busca.

4.7.2 Visualização dos resultados


Após o término da pesquisa, a janela da figura 4.5 é apresentada, indicando o
número de ocorrências achadas, o número de unidade lexical reconhecidas, assim como
a taxa de ocorrências no texto.

Fig. 4.5 – Resultados da pesquisa

Após de clicar “OK", a janela da figura 4.6 aparece afim de permitir configurar a
lista de concordâncias achadas. Podemos visualizar essa janela pelo menu “Text”
clicando sobre o menu “Display located Sequences ... ”.

38
Fig. 4.6 - Configuração da visualização das ocorrências encontradas

A caixa “Modify text” permite de substituir as ocorrências achadas por saídas


produzidas (cf. capítulo 6).
Na caixa de “Show Matching Sequence in Context”, pode-se selecionar o
comprimento do texto do contexto esquerdo e direito que serão visualizados na
concordância. Se uma concordância tem um número de caracteres inferior ao tamanho
do contexto direito, a linha de concordância será completada pelo número de caracteres
necessário. Se uma ocorrência tiver um tamanho superior ao contexto direito, ela será
totalmente visualizada .
Pode-se selecionar a ordem de visualização a aplicar na lista “Sort According
to”. O modo “Text Order” visualiza as ocorrências na ordem do texto. Os outros modos
de configuração permitem ordenar as colunas. As três áreas de ordenação de uma linha
são o contexto esquerdo, a ocorrência e o contexto direito. As ocorrências e o contexto
direito são ordenados da esquerda para a direita. O contexto esquerdo é ordenado da
direita para a esquerda. O modo usado por default é “Center, Left Col.”. A concordância
produz um arquivo HTML.

Fig. 4.7 – Exemplo de concordância

39
Quando as ocorrências atingem de vários milhares, é preferível utilizar um browser
Web (Internet Explorer, Mozilla, NetScape, Opera...). Para escolhê-lo, clique sobre
“Preferences...” no menu “Info” e em seguida sobre a aba "Text Presentation”;
selecione o browser desejada para usar na caixa “HTML Viewer”

Fig. 4.8 - Seleção de um navegador para a visualização das concordâncias.

40