MAC 499 - Trabalho de Formatura Supervisionado

Emilio de Carmargo Francesquini
emilio@linux.ime.usp.br

Professor responsável: Carlos Eduardo Ferreira
cef@ime.usp.br

Professor supervisor: Marcelo Finger
mfinger@ime.usp.br

Novembro de 2002


Aproximação ortográfica de palavras do português


 

Objetivos do Projeto

Desenvolver um sistema de aproximação ortográfica de palavras do português utilizando, para isso, sua fonética (pronúncia) e um léxico dado. Tal trabalho deve ser útil, para citar alguns exemplos, no auxílio da alfabetização de crianças que neste processo tendem a escrever as palavras pelo seu som e portanto muitas vezes não utilizam a grafia correta, para uso em editores de texto e, além disso, deve servir como uma grande ajuda para o projeto Corpus onde deve auxiliar no reconhecimento de palavras cuja grafia foi modificada com o tempo mas a pronúncia da palavra não teve grandes alterações.

Esquema de funcionamento

O sistema, após uma fase de treinamento, vai possuir informações suficientes para que seja possível a criação (automática) de uma função de conversão de textos em português para a sua transcrição fonética. A transcrição fonética de uma palavra será comparada com a transcrição fonética já pré-calculada de outras palavras de um dado léxico de forma que seja possível determinar sua proximidade e assim poder escolher a palavra do léxico mais próxima da palavra de entrada.

Detalhamento do esquema de funcionamento

Em geral, na maioria das línguas escritas, não há uma correspondência direta entre as regras de pronúncia e as regras de escrita [6]. Para ser mais claro, não há uma regra, ou um mapeamento direto, entre as letras e os seus fonemas. Na verdade, o português se destaca neste momento por ser uma língua onde os sons de suas palavras são muito próximos de sua ortografia [4]. Um fonema é qualquer um dos sons elementares (vocálicos ou consonantais) da linguagem. Por isso o sistema necessita de uma fase de treinamento para que, heuristicamente, o saiba como tratar palavras desconhecidas.
Em português existem 34 fonemas diferentes, ou seja, o som de qualquer palavra do português pode ser escrito utilizando-se apenas 34 símbolos diferentes. [4]
Existem, porém, palavras que apesar de serem escritas de forma diferente, possuem o mesmo som, tais palavras são chamadas homófonas e, neste caso, as suas transcrições fonéticas são idênticas. Neste caso, durante a fase de aproximação fonética haverá um empate, e o critério para desempate será o uso de distancia entre palavras que é definido pelo número de inserções, remoções e substituições necessárias para transformar a palavra original na candidata a correspondente dentro de um léxico. Exemplos de tais palavras são: seção/sessão, laço/lasso, concerto/conserto. Também há palavras, que apesar da grafia ser muito próxima, senão iguais, têm significados completamente diferentes e o som muito semelhante (se não iguais). Alguns exemplos de tais palavras são: pelo (conjunção de per + o e a produção filiforme que recobre o corpo dos animais, este segundo pode também (!!!) ser escrito como pêlo), ele (pronome, que na forma escrita se aceitava a grafia como êle, e a letra ‘L’), gelo (conjugação do verbo gelar e água solidificada, que antigamente se escrevia como gêlo), máquina/maquina, sabia/sábia/sabiá, para/pára/Pará. Por tais motivos os acentos serão ignorados, salvos casos especiais (como o uso de ~ que indica nasalidade do som), durante a transcrição fonética das palavras e a palavra mais apropriada, do conjunto candidato a resposta, será escolhida pelos critérios de desempate já definidos.
Existem letras, entretanto, que dependendo do contexto (entende-se por contexto as letras que estão à esquerda e à direita da letra em questão) em que estão inseridas, seu som, ou seja, sua transcrição fonética, é alterada. [7]. Por exemplo, a letra ‘s’ se está no inicio da palavra como em sapo, sócio ou sala tem um som de /s/ que é totalmente distinto de quando está inserida no meio da palavra, salvas algumas exceções ('usa' ou 'portuguesa' onde tem som de /z/ e ainda se em seu contexto existir um ‘s’ logo em seguida, como em passarela). A letra ‘x’ por exemplo, pode ter o som de /z/ como em exemplo, ou pode ter som de /x/ como em xadrez, pode ter som de /s/ como em texto. Existem também letras, que independentemente do contexto onde estão inseridas, que o som é sempre o mesmo, como a letra ‘z’ e a letra ‘j’.
Chamaremos essas idiossincrasias, que ocorrem na transcrição do português escrito para a transcrição fonética, de regras, e o conjunto de tais regras juntamente com suas prioridades uma sobre as outras será o conjunto ciência do programa, em outras palavras sua heurística.
Defininamos agora o concento de regra de forma mais clara: uma regra é composta de quatro partes: (1) padrão do contexto à esquerda, (2) padrão do texto de correspondência obrigatória, (3) padrão de contexto à direita e (4) a transcrição fonética para tal regra.[2]
Note que tal definição não se limita (na parte 2) à correspondência de apenas uma letra, mas sim uma seqüência delas, ou ainda uma expressão regular.
Uma regra r1 tem prioridade sobre outra regra r2 se r1 deve ser aplicada antes de r2 sobre um dado segmento de uma palavra para que a transcrição resultante seja correta.
Um exemplo de uma regra que tem prioridade sobre outra é ‘r’ no início da palavra que tem som de /R/ como em rato (/R/ato), roupa (/R/oupa) e rei (/R/ei), e r no meio da palavra onde tem som de /r/ como em arara, dicionário e arauto. Caso a segunda regra seja aplicada antes da primeira poderíamos acabar com uma transcrição errada das primeiras palavras: /r/oupa, /r/ei ou ainda /r/a/r/a ao invés de rara.
A transcrição e correspondência de uma palavra de entrada com a palavra correta do léxico será feita com o conjunto ciência em mãos além de um léxico. Caso a palavra de entrada conste no léxico não há o que ser feito e a própria palavra é retornada, caso contrário são utilizadas as regras. O processo de transcrição é feito da seguinte forma: para cada segmento da palavra o conjunto de regras é varrido até que uma regra apropriada seja encontrada e aplicada, após isso o próximo segmento da palavra é coletado e o processo se repete até que toda a palavra esteja transcrita [2].

Arquitetura do sistema

A arquitetura do sistema é dividida da seguinte forma:

1. Transcrição fonética

Esta parte do sistema é a responsável pela obtenção da transcrição fonética de uma palavra ou um texto. Nesse pacote estarão compreendidas as regras de transcrição, suas prioridades e diversos conjuntos ciência (um conjunto para cada língua com a qual se deseja trabalhar, por exemplo). Também está nesse pacote um módulo que se destina ao treinamento da aplicação, ou seja, adição, modificação ou remoção de alguma regra pré-existente a algum conjunto ciência do programa. Pode-se dizer que este pacote é o mais importante do sistema, uma vez que, é onde a aproximação das palavras realmente se dará.

Veja o pacote transcritor na documentacao do sistema disponível em [8].

2. Procura de palavras

Este pacote é o encarregado de, basicamente, uma só tarefa: receber uma palavra (escrita provavelmente de modo incorreto segundo um léxico dado) e adquirir a sua grafia correta, para isso, utilizando-se de aproximações fonéticas (usando o pacote acima) e métricas de distância entre palavras.
Ambos os pacotes, tanto o de transcrição fonética quanto o de procura de palavras, foram implementados em Java e poderão ser utilizados por quaisquer aplicações Java que o necessitarem para isso simplesmente fazendo o uso da diretiva import dos módulos apropriados.

Veja o pacote aproximador na documentacao do sistema disponível em [8].

3. Suporte ao acesso externo

A utilização dos pacotes acima da forma menciona restringe, em muito, o modo de utilização deste sistema. Exemplos disso são: apenas aplicações Java poderiam utilizar esses pacotes e que cada execução em Java do programa teria uma cópia da aplicação rodando, em suma, existiriam duas máquinas virtuais (muitas vezes no mesmo computador) rodando o mesmo código.
Sendo assim, é importante que esta aplicação possa ser disposta como um servidor de procura de palavras, seja este servidor apenas para utilização local da máquina onde o processo está executando, ou seja, em uma rede. Aplicações escritas nos mais diversos tipos de linguagens de programação e arquiteturas de hardware devem ser capazes de acessar este servidor e, sendo assim, a tecnologia escolhida para efetuar a comunicação entre os clientes e o servidor é CORBA pela sua natureza heterogênea.
Da forma como a arquitetura do sistema foi desenhada a implementação de um servidor CORBA de aproximação de palavras fica extremamente simples, desta forma provendo ao usuário deste sistema uma maneira trivial de implementar tal servidor.

Detalhes da arquitetura podem ser vistos em [8].