Reconhecimento Automático de Locuções Prepositivas em

Propaganda
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL
FACULDADE DE CIÊNCIAS DA COMPUTAÇÃO
BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO
Reconhecimento Automático de
Locuções Prepositivas em
Sentenças na Língua Portuguesa
por
DANIEL COSTA MÜLLER
EDEMAR BÜRGER
MARCIO PITREZ CASADO
Trabalho de Conclusão II
Prof. Marco Gonzalez
Orientador
Porto Alegre, agosto de 2003
SUMÁRIO
1.
Introdução....................................................................................................................8
2.
OBJETIVOS................................................................................................................10
3.
PROCESSAMENTO DE LINGUAGEM NATURAL............................................11
3.1
Sintaxe .......................................................................................................................12
3.2
Semântica ..................................................................................................................13
4.
4.1
REPRESENTAÇÃO DO CONHECIMENTO.........................................................15
Problemas de Representação do Conhecimento....................................................16
5.
ETIQUETAGEM DE TEXTOS ................................................................................18
6.
LOCUÇÃO PREPOSITIVA......................................................................................20
6.1
7.
Análise das Locuções Prepositivas ..........................................................................21
APLICAÇÕES PARA O RECONHECIMENTO DE
LOCUÇÕES PREPOSITIVAS.........................................................................................24
7.1
Recuperação de Informação....................................................................................24
7.2
Extração de Informação...........................................................................................29
7.3
Sumarização..............................................................................................................30
7.4
Outras aplicações .....................................................................................................31
8.
PROPOSTA PARA RECONHECIMENTO DE
LOCUÇÕES PREPOSITIVAS.........................................................................................33
8.1
9.
Base de Dados ...........................................................................................................35
SISTEMA PARA RECONHECIMENTO DE
LOCUÇÕES PREPOSITIVAS.........................................................................................36
9.1
Introdução .................................................................................................................36
9.2
Objetivo .....................................................................................................................36
9.3
Visão Geral................................................................................................................37
9.4 Especificação .............................................................................................................39
9.4.1
Modela gem Estrutural............................................................................................40
Modelagem Dinâmica..........................................................................................................41
9.4.3
9.4.4
Modelagem Funcional...........................................................................................47
Dicionário de Dados ..............................................................................................51
9.5
Alternativas de Implementação...............................................................................52
9.6
Resultados do sistema ..............................................................................................54
10. CONCLUSÕES ...........................................................................................................57
ANEXO 1: MANUAL DO SISTEMA..............................................................................63
ANEXO 2: BASE DE DADOS ..........................................................................................69
ANEXO 3: FONTES “HTML” E “C” .............................................................................73
3
LISTA DE ABREVIATURAS
ADV - Advérbio
ELP – Elemento de Locução Prepositiva
IA – Inteligência Artificial
LINGA – Sistema Linguistic Analysis
LP – Locução Prepositiva
PLN – Processamento de Linguagem Natural
PRP – Preposição
RALP – Sistema de Reconhecimento Automático de Locuções Prepositivas
TC – Trabalho de Conclusão
VTI – Verbo Transitivo Indireto
4
LISTA DE FIGURAS
Figura 1. Algoritmo de Dias em fluxograma adaptado por Gonzalez [GON2000].........33
Figura 2. Diagrama de Contexto......................................................................................37
Figura 3. Algoritmo de reconhecimento de LPs ..............................................................38
Figura 4. Diagrama de Objetos ........................................................................................40
Figura 5. Reconhecimento de LP – Tipo 1. .....................................................................41
Figura 6. Reconhecimento de LP – Tipo 2. .....................................................................42
Figura 7. Reconhecimento de inexistência de LP – sem PRP após. ................................43
Figura 8. Reconhecimento de inexistência de LP – sem PRP antes. ...............................44
Figura 9. Reconhecimento de LP – Verbo anterior não pede preposição........................45
Figura 10. Reconhecimento de inexistência de LP – Existe advérbio antes....................46
Figura 11. Diagrama de contexto.....................................................................................47
Figura 12. DFD nível 0 ....................................................................................................48
Figura 13. DFD nível 1 – Analisa Palavra.......................................................................49
Figura 14. DFD nível 2 – Verifica Classe........................................................................50
Figura 15. LPs corretas X LPs incorretas. .......................................................................55
Figura 16. LPs corretas identificadas x LPs não identificadas. .......................................56
5
LISTA DE TABELAS
Tabela 1. Tabela de Etiquetas. .........................................................................................18
Tabela 2. Lista das LPs mais empregadas [DIA1984].....................................................21
Tabela 3. Tipos de erro de identificação de LPs..............................................................55
6
RESUMO
Este trabalho tem como objetivo discutir o que é uma locução prepositiva, e de que
forma ela pode ser vital para o entendimento correto de uma sentença, bem como apresentar os
critérios e procedimentos para o seu reconhecimento automático em linguagem natural.
Com o reconhecimento de locuções prepositivas, a tarefa de eliminar ambigüidades
ganha mais um recurso, pois as sentenças podem ser analisadas sendo conhecida a correta função
de cada uma das palavras constituintes de tais locuções.
O trabalho também apresenta algumas aplicações que podem ser beneficiadas com o
reconhecimento das locuções prepositivas. Estas são, em geral, aplicações que necessitam
interpretar de forma automática a informação contida em textos.
Visto que atualmente a quantidade de informações disponível é gigantesca e, com a
chegada da Internet tornou-se ainda maior, a implementação de um sistema reconhecedor de
locuções prepositivas em sentenças será de grande utilidade para o processamento da linguagem
natural, com benefícios para a qualidade dos sistemas que tentam ter acesso a toda essa
informação.
Portanto, outro objetivo deste trabalho é o de implementar um sistema de
reconhecimento de locuções prepositivas em sentenças da língua portuguesa que poderá unir a
teoria, aqui apresentada, com a prática, desenvolvendo um trabalho de pesquisa e modelagem.
7
1. INTRODUÇÃO
Por volta da década de 70, as áreas de Ciência da Informação, Inteligência Artificial
e Lingüística Computacional foram sendo altamente desenvolvidas com a meta de utilizar o
computador para formalizar algum tipo de procedimento em termos de informação
(armazenamento, recuperação e acesso rápido à informações), conhecimento (simular o
comportamento inteligente) ou de linguagem (analisar traços estruturais da linguagem) [DIA1984].
O ser humano não domina totalmente os processos de produção e de codificação de
estruturas da língua portuguesa como, por exemplo, concordâncias e variações léxicas e sintáticas
[DIA1984]. Esses tipos de processos lingüísticos necessitam de regras e procedimentos objetivos
para serem utilizados numa máquina que tentará simulará os processos mentais humanos.
Certas construções da língua portuguesa constituem casos em que determinados
termos se combinam de tal forma que não é permitida a variação seja qual for o contexto em que
estão inseridas. Normalmente, tratam-se de locuções, ou seja, conjunto de palavras que formam
uma unidade expressiva [MON2000]. Este trabalho trata de um desses casos, ou seja, das locuções
prepositivas. Vejamos algumas definições básicas relacionadas a esse contexto, antes de
continuarmos.
Locução: “Reunião de palavras equivalente a uma só” [AUR1975].
Preposição: “Palavra invariável que liga partes da preposição dependentes umas das
outras, estabelecendo entre elas numerosas relações” [AUR1975].
Locução Prepositiva (LP): “ É um conjunto de duas ou mais palavras que funcionam
como uma preposição. Nestas locuções, a última palavra é sempre preposição. As locuções
compõem a estrutura gramatical de um texto e é importante destacá-las pois alguns elementos que
constituem uma locução podem pertencer a outras categorias e outros contextos” [MON2000].
As LPs são elementos que não variam em gênero (feminino ou masculino) e número
(singular ou plural). São, portanto, expressões fixas na língua portuguesa. Outra característica
notada, quanto à forma dessas locuções, além da não variação de gênero e número, é que, no
decorrer da história da língua portuguesa, determinadas formas consagraram-se. Muitos gramáticos
8
postulam a adequação de uma forma e não outra para a língua escrita. Por isso, o emprego
inadequado dessas construções se configura um problema de linguagem [MON2000].
Uma LP é um conjunto de dois ou mais vocábulos, em que o último é sempre uma
preposição simples. Estes vocábulos ou palavras são originados de diversas categorias gramaticais.
Sua formação também pode ser, preposição seguida de substantivo seguido de preposição. LP é,
em suma, uma combinação de vocábulos, em que o primeiro termo é explicado ou complementado
pelo segundo, sendo este uma preposição [CUN1976, MEL1978].
Por serem formadas de estruturas gramaticais diversas, as LPs prejudicam a
interpretação sintática e semântica da sentença, pois, para obter o significado correto da frase,
torna-se necessário analisá-la em um contexto global [DIA1984].
Portanto, é necessário adotar critérios ou procedimentos para reconhecer uma LP.
Segundo Dias [DIA1984], os gramáticos costumam fazer listas das LPs, mas estas listas não são
exaustivas. Além disso, estas diferem de um para outro gramático, não existindo uma única lista de
locuções que dê conta de todas elas e que não admita a inclusão de mais nenhuma. Existem
divergências quanto aos elementos que compõem uma lista de LPs, e sua formação é incerta.
É preciso definir critérios mais precisos, tanto formais quanto semânticos ou de
emprego, para que se possa ter certeza ao apontar uma expressão como LP. Necessitam ser
adotadas regras de definição mais consistentes para o reconhecimento de locuções prepositivas.
Para isto é preciso levar em conta a colocação, formação e função das locuções [DIA1984].
A grande motivação do estudo do reconhecimento automática de locuções
prepositivas em sentenças na língua portuguesa, reforçando a idéia de Dias, está na grande
utilidade dos critérios de reconhecimento para a indexação automática de textos; para a melhora da
interpretação automatizada da informação na comunicação usando linguagem natural em sistemas
de informação, ou seja, no armazenamento e recuperação da informação armazenada; e para o
desenvolvimento da tradução automática de textos.
9
2. OBJETIVOS
O objetivo principal deste trabalho de conclusão é estudar o reconhecimento
automático de LPs em sentenças, usando como base a proposta de Dias [DIA1984]. Nesta proposta
são definidos critérios que servem para decidir se um conjunto de palavras é uma locução e
determinar em qual categoria ela melhor se encaixa.
O segundo objetivo, como uma aplicação prática do primeiro, é implementar um
software que possa realizar o reconhecimento automático de LPs, de acordo com tais critérios.
Utilizamos, como ponto principal, o algoritmo proposto por Dias, com o qual podemos reconhecer
e categorizar as LPs.
10
3. PROCESSAMENTO DE LINGUAGEM NATURAL
“A linguagem é um dos aspectos fundamentais do comportamento humano. Na sua
forma escrita, permite o registro de conhecimento possibilitando perpetuá-lo para gerações futuras.
Na forma falada é o meio primário para coordenar nossos relacionamentos diários com outras
pessoas” [ALL1995].
A área de Inteligência Artificial (IA) concentra-se na caracterização do pensamento
humano aos computadores, por isso o processamento da linguagem em máquinas procura ser
semelhante àquele desempenhado pelos seres humanos.
Possibilitar o fornecimento de técnicas práticas de interação entre o computador e o
homem assim como incentivar os estudos referentes aos processos de comunicação em linguagem
natural, permite uma utilização mais eficaz de documentos arquivados uma vez que precisam ser
elaboradas regras e procedimentos objetivos para serem implementados numa máquina, a qual
estará simulando processos mentais humanos.
Para se compreender a linguagem natural devemos partir da análise morfológica de
uma sentença e montarmos um estrutura de conhecimento do mundo, passando por etapas
denominadas Níveis Lingüísticos de Processamento. Entre os níveis lingüísticos que são
componentes da linguagem natural, estão a sintaxe e a semântica [ALL1995, DIN2001].
O processamento sintático consiste em estabelecer e estruturar unidades de
significado em uma sentença expressa em linguagem natural. Enquanto que o processamento
semântico atribui ou tenta captar os significados em tais unidades.
Em muitos casos, à disposição de um sistema que processa linguagem natural, é
necessário que exista uma base de conhecimento do mundo contendo todas as informações
necessárias para interpretação ou produção de sentenças baseadas nas informações recebidas por
uma entidade externa. Para a criação deste banco de conhecimento é preciso uma estrutura
fundamental denominada léxico ou dicionário, que deve ser utilizada em todas as fases de
processamento da linguagem, armazenando palavras e associando às mesmas informações
[ALL1995, DIN2001].
11
A estrutura comum aplicada à maioria dos sistemas, envolvidos com processamento
lingüístico através da IA, está no fato de fazer uso de um léxico, tanto durante o processo de
compreensão como na geração de uma sentença, por exemplo, na comunicação com um usuário.
Para que uma máquina possa obter a interpretação de sentenças em linguagem
natural, com todo o conhecimento necessário para ser utilizado em alguma tarefa requisitada pelo
usuário, são necessárias as seguintes etapas de processamento conhecidas como níveis lingüísticos
de processamento [DIN2001]:
• Análise Léxico-Morfológica da Sentença: analisa palavras isoladas da sentença
em termos de seus componentes, atribuindo categorias sintáticas a elas;
• Análise Sintática: constrói estruturas a partir de palavras isoladas e suas
categorias, que mostrem como estas se relacionam entre si na sentença;
• Análise Semântica: Utiliza as estruturas criadas durante a análise sintática
mapeando-as de forma a receberem significado;
• Integração de Discurso: É responsável por vincular referências entre elementos da
sentença e do contexto, pois até então eles haviam sido analisados
isoladamente.
3.1 Sintaxe
“Corresponde à sintaxe o estudo da relação lógica da palavras em um frase”
[TER1992].
Para que uma máquina compreenda uma sentença escrita em um linguagem natural
qualquer, é preciso que se estabeleçam as suas unidades de significado. O processamento sintático
desempenha este papel através da conversão da sentença de entrada em uma estrutura hierárquica
correspondente a tais unidades de significado [ALL1995, DIN2001].
A sintaxe estabelece uma relação de ligação entre os vocábulos a fim de que uma
frase possa ser dividida em componentes menores com funções definidas.
12
A análise sintática consiste em dividir uma sentença em seus elementos
constituintes a fim de verificar a relação lógica entre os mesmos [DIN2001]. Desta forma, a
divisão de uma frase em sujeito e predicado é um exemplo de análise sintática.
Na análise sintática é exigida uma gramática que contém os fatos sintáticos da
linguagem. Esta gramática serve de base para o analisador, que irá comparar as formalizações
descritas na gramática com a sentença em questão. O analisador então gera a árvore gramatical.
Para a construção da estrutura hierárquica que contém as unidades de significado da
sentença, podem ser utilizadas duas abordagens: Top-Down e Bottom-Up. Na primeira, a
comparação tem início com o símbolo inicial da gramática, já na análise Bottom-Up as regras são
aplicadas de trás para frente, partindo dos elementos contidos na sentença.
Alguns componentes sintáticos oferecidos pela língua portuguesa que são muito
explorados em análise sintática, são os termos essenciais da oração (sujeito, predicado, tipos de
sujeito e predicado, predicativo e tipos de predicativo), os termos integrantes da oração
(complementos verbais e nominais, agentes da passiva, etc), os termos acessórios da oração
(adjunto adnominal, adjunto adverbial, aposto, etc), a concordância (verbal ou nominal) e a
regência (relações entre os termos de uma oração) [DIN2001].
3.2 Semântica
O processamento semântico consiste na atribuição de significado às estruturas
geradas pela análise sintática. Obtêm-se assim, para toda sentença de entrada, um significado
atribuído pelo processamento semântico [DIN2001].
A semântica refere-se ao significado de palavras, frases e sentenças e como elas se
combinam. A semântica não trata o significado de expressões ou diálogos e significados não
literais, pois estes dependem do estudo do contexto e não do significado propriamente dito.
Em geral, no processamento da linguagem natural, a semântica está dirigida aos
objetivos do sistema, para que o significado encontre-se dentro do contexto.
13
Existem duas formas opostas de se fazer o mapeamento semântico de um frase.
Uma consiste em aplicar a interpretação semântica na geração de um componente sintático, e a
outra consiste em aplicá-la somente quando toda a frase tenha sido analisada sintaticamente
[DIN2001].
A primeira forma permite destacar elementos sintáticos válidos, mas sem sentido
semântico, porém os componentes sintáticos que serão rejeitados no decorrer da análise sintática
não possuem uma eliminação imediata. Já a segunda não oferece a vantagem de eliminar
automaticamente as frases com semântica incorreta.
Independente do método escolhido para o tratamento semântico de uma sentença,
este processo sempre começará utilizando uma etapa auxiliar chamada processamento léxico, a
qual será responsável pela busca de palavras em um dicionário e pela extração de seu significado
[DIN2001]. O processamento léxico é sempre a primeira etapa (é necessário para a morfologia e a
sintaxe).
O maior problema neste processo é que a uma palavra podem ser atribuídos
contextos e sentidos diferentes, resultado da grande variedade de significados que estas podem
assumir. Este problema chama-se ambigüidade [BEA1991, ALL1995, DIN2001]. Por exemplo, a
palavra “porca” pode identificar tanto um animal, quanto uma peça de metal utilizada para fixar
parafusos, bem como uma pessoa com hábitos pouco higiênicos.
Assim que o processamento léxico selecionar as palavras e estas estiverem
corretamente identificadas, deve-se considerar restrições adicionais que, após combinadas,
permitem perceber que as palavras formam unidades maiores de significado.
14
4. REPRESENTAÇÃO DO CONHECIMENTO
“A metáfora consiste em dar a uma coisa um nome que pertence a outra”
[ARI1944].
A metáfora assume diferentes significados enquanto indicativa das possíveis
percepções do ser humano sobre os objetos. É por existirem inúmeras coisas fora do alcance da
compreensão humana, que freqüentemente utilizamos termos simbólicos para representar conceitos
que não podem ser definidos ou compreendidos integralmente [JUN1964].
A representação do conhecimento reveste-se de grande complexidade pois se
concretiza nas mais diversas formas, seja na estrutura de registros de bases de dados, de programas
de computador, na estrutura sintática e semântica da linguagem natural ou na representação do
conhecimento em Inteligência Artificial.
O conhecimento é, na verdade, a informação [WAT1986]. Para fazer uso do
conhecimento (informação) em uma máquina é preciso uma forma de representá-lo. Nenhum
programa de computador resolve um problema se não tem o conhecimento sobre este determinado
problema. Na inteligência artificial, o modelo de estruturação de um sistema separa o código
executável dos dados, ou seja, do conhecimento do sistema. Em inteligência artificial, o termo
“conhecimento” significa a informação que um programa de computador necessita para que possa
comportar-se inteligentemente.
A representação do conhecimento está essencialmente relacionada com as formas
possíveis de expressar a informação. Os sistemas de representação podem ser adequados
especificamente para um determinado problema, mas muitas pesquisas são realizadas com a
finalidade de desenvolver um sistema de representação de propósito geral, sem levar em conta
como ele será utilizado.
Uma representação não deve meramente prescrever como trechos individuais de
informações são representados, mas deve especificar como a totalidade da informação é
estruturada e organizada de modo que as informações relevantes possam ser recuperadas e que as
inferências adequadas apresentem um nível aceitável de eficiência [SHA1991].
15
4.1 Problemas de Representação do Conhecimento
“A representação do conhecimento na forma simbólica é uma questão que vem
preocupando o mundo da documentação desde a sua origem” [VIC1992].
As linguagens naturais, utilizadas na comunicação entre as pessoas, não apresentam
restrições rígidas como as encontradas nas linguagens artificiais [BEA1991], e devido a este fato,
podem ocasionar uma grande quantidade de ambigüidades. Dizer que uma sentença apresenta
ambigüidade é dizer que esta mesma sentença admite várias interpretações [NUN1999], ou seja,
pode ter diversos significados dependendo da variação de seu contexto [BEA1991].
O primeiro problema a ser considerado consiste no fato de que as frases de uma
língua são geralmente descrições incompletas das informações que pretendem transmitir
[HAS1994]. Frases que contêm uma apresentação incompleta podem ocultar muitas informações.
O reflexo da ambigüidade, além de estar fortemente relacionado à analise sintática,
também está diretamente relacionado à análise semântica, entre outras razões pela grande
quantidade de significados distintos que podem existir para um vocábulo.
Quando tratamos de linguagem natural, um dos principais problemas existentes é a
ambigüidade. Podemos ter os seguintes tipos [BEA1991]:
• Ambigüidade Lexical: Quando uma palavra apresenta múltiplos significados;
• Ambigüidade Estrutural Local: Quando há mais de um significado possível para
uma sentença, sendo que a resolução da ambigüidade pode ser feita localmente,
independente do contexto;
• Ambigüidade Estrutural Global: Quando a sentença pode apresentar mais de um
significado possível e a resolução da ambigüidade depende do contexto.
16
Uma das alternativas de solução para o problema das ambigüidades seria a inserção
de marcadores semânticos nas palavras com a finalidade de registrar informações semânticas
associadas às palavras.
Nos casos em que sentenças com estruturas sintáticas diferentes possuem o mesmo
significado, deveria ser possível obter uma única representação semântica das mesmas [BEA1991].
Às vezes, apenas um conjunto muito detalhado de marcadores pode solucionar o
problema. Após terem sido corretamente identificadas, as palavras devem passar ainda por
combinações adicionais, para que, ao serem combinadas umas com as outras, formem unidades
maiores de significado [BEA1991].
Também torna-se um problema a aparição de novas palavras e vocábulos. Novas
expressões e significados, tais como gírias, são livremente criados, e isto contribui para que o
léxico nunca seja completo.
O uso de LPs pode contribuir para gerar ambigüidade. Por exemplo, a LP "a partir
de" contém o item lexical "partir" que pode ser confundido com um verbo. Esse poderia ser um
exemplo de ambigüidade lexical, se a LP não fosse identificada.
17
5.
ETIQUETAGEM DE TEXTOS
A etiquetagem de textos serve para eliminar a ambigüidade das palavras que tenham
mais de uma categoria gramatical, segundo o contexto em que se encontram.
Etiquetar um texto significa associar cada palavra em contexto a uma categoria
morfo-sintática teoricamente atribuível a essas palavras [MFI2000].
Por exemplo, dada a seguinte sentença de entrada:
isso tem sido um desafio constante principalmente a partir das últimas décadas.
A saída do processo de etiquetagem seria a mesma sentença no formato
<palavra>_<etiqueta>:
isso_PD
tem_VB
sido_VB_AJ
um_AR
desafio_SU
constante_SU_AJ
principalmente_AV a_PR partir_VB de_PR as_AR últimas_SU_AJ décadas_SU_VB_AJ ._PN
Para clareza do exemplo:
_AJ = adjetivo
_AR = artigo
_AV = advérbio
_PD = pronome demostrativo
_PN = pontuação
_PR = preposição
_SU = substantivo
_VB = verbo
Tabela 1. Tabela de Etiquetas.
O sistema que desenvolvemos serve para complementar um processo de
etiquetagem automática, com o reconhecimento correto das LPs.
No exemplo de saída acima a expressão a_PR partir_VB de_PR está incorretamente
etiquetada. O correto seria a_partir_de_LP. Este é um exemplo do benefício que o sistema que
desenvolvemos pode prestar em um processo de etiquetagem automática de textos.
18
Etiquetadores de textos podem ser definidos como programas que têm como entrada
uma seqüência de palavras e como saída a seqüência correspondente de etiquetas, por exemplo,
categorias sintáticas.
Devido à complexidade das linguagens naturais, existem muitas dificuldades em se
construir ferramentas que tratam textos sem limitar o domínio [STO1997].
Existem dois tipos de etiquetagem de textos: as manuais e as automáticas.
A etiquetagem manual é aquela onde os textos são etiquetados com a intervenção
humana. Já a etiquetagem automática é aquela onde os textos são submetidos a um algoritmo que
determina as categorias morfológicas, sem utilização de um analisador sintático, baseadas apenas
em regras e dicionários previamente determinados.
O processo de etiquetagem automática realiza a formatação e filtragem dos textos e
em seguida cada palavra é associada a uma etiqueta, caracterizando uma fase de etiquetagem
inicial. Após, inicia-se a fase principal de etiquetagem, onde as regras contextuais modificam a
etiquetagem inicial de acordo com o contexto em que cada palavra aparece no texto.
Alguns algoritmos de etiquetagem possuem um procedimento de refinamento
contendo informações lingüísticas, tanto morfológicas quanto conceituais, que realiza o processo
de complementar com um sufixo a etiqueta básica obtida no método normal.
19
6.
LOCUÇÃO PREPOSITIVA
Entende-se por Locução Prepositiva (LP), um conjunto de dois um mais vocábulos,
em que o último é uma preposição simples [CUN1976].
LP é uma variação da preposição, podendo esta ser um simples vocábulo, ou uma
combinação de vocábulos, caso em que são chamadas de locuções [ALI1969].
LP é um grupo de palavras com valor e emprego de uma preposição [BEC1980].
Preposição é a palavra que estabelece uma relação entre dois ou mais termos da
oração. Essa relação é do tipo subordinativa, ou seja, entre os elementos ligados pela preposição
não há sentido dissociado, separado, individualizado; ao contrário, o sentido da expressão é
dependente da união de todos os elementos que a preposição vincula [MON2000].
Esse tipo de relação é considerada uma conexão, em que os conectivos cumprem a
função de ligar elementos. A preposição é um desses conectivos e se presta a ligar palavras entre si
num processo de subordinação denominado regência.
As LP’s são elementos que não variam em gênero (feminino ou masculino) e
número (singular ou plural). São, por isso, expressões fixas na língua portuguesa. No decorrer da
história da língua portuguesa, determinadas formas se consagraram. Muitos gramáticos postulam a
adequação de uma forma e não outra para a língua escrita. Por isso, o emprego inadequado dessas
construções configura-se um problema de linguagem [MON2000].
Deve ser salientado que o presente trabalho não se destina a analisar o uso adequado
das LP’s, mas identificá-las no contexto de uma sentença.
20
Há diversos exemplos de LP’s. A tabela 1 apresenta uma lista das mais empregadas.
a despeito de,
a fim de,
à frente de,
à mercê de,
a modo de,
a par de,
a respeito de,
à roda de,
a troco de,
à volta de,
abaixo de,
acerca de,
acima de,
adiante de,
além de,
antes de,
ao encontro de,
ao lado de,
ao longo de,
ao redor de,
ao sabor de,
apesar de,
aquém de,
atrás de,
através de,
cerca de,
com referência a,
com relação a,
com respeito a,
daqui a,
de acordo com,
de cima de,
de conformidade com,
de dentro de,
de encontro a,
debaixo de,
defronte de,
dentro de,
depois de,
detrás de,
devido a,
diante de,
embaixo de,
em cima de,
em conformidade com,
em conseqüência de,
em detrimento de,
em face de,
em falta de,
em favor de,
em frente a,
em frente de,
em harmonia com,
em lugar de,
em prol de,
em razão de,
em redor de,
em relação a,
em roda de,
em torno de,
em vez de,
em virtude de,
em volta de,
fora de,
graças a,
junto a,
junto de,
longe de,
mercê de,
para baixo de,
para cima de,
para com,
para dentro de,
para detrás de,
para fora de,
para trás de,
perto de,
por baixo de,
por causa de,
por cima de,
por dentro de,
por detrás de,
por diante de,
por entre,
por meio de,
por trás de,
por volta de,
quanto a,
sem embargo de,
tirante de.
Tabela 2. Lista das LPs mais empregadas [DIA1984].
6.1 Análise das Locuções Prepositivas
As LP’s são expressões com a função das preposições e, em geral, são formadas de
advérbio (ou locução adverbial) mais preposição.
Os quatro tipos de formação baseados nas classes gramaticais tradicionais que
podem compor uma LP são os seguintes:
1- Advérbio seguido de preposição (ex: depois de);
2- Locução adverbial seguida de preposição (ex: em cima de);
21
3- Preposição seguida de substantivo, seguido de outra preposição (ex: de acordo
com);
4- Outras categorias seguidas de preposição (ex: devido a).
Advérbios são palavras que modificam o sentido de um verbo, de um adjetivo ou do
próprio advérbio (sim, certamente, talvez, muito, pouco, mais, menos, abaixo, acima, além, bem,
mal, assim, como, não, agora, hoje, ontem, etc).
Locuções adverbiais são aquelas expressões que têm a função dos advérbios e
iniciam ordinariamente por uma preposição (em cima, por fora, por trás, de perto, etc).
Existem palavras que não aparecem sozinhas na língua portuguesa (como por
exemplo a palavra “trás”), portanto algumas preposições assumem uma posição de prefixo e se
unem a estas palavras formando assim um advérbio (“atrás”) ou uma locução adverbial
[BEC1980].
Um fato que prejudica o reconhecimento de LP’s formadas por substantivos é que
um mesmo conjunto de palavras (preposição + substantivo + preposição) pode ocorrer sem formar
uma locução. Por exemplo:
O oficial caminhou na frente de manhã à noite.[DIA1984]
Isto acontece pois alguns conjuntos deste tipo estão divididos entre locuções e
meros ajuntamentos de palavras.
Outro complicador para o reconhecimento das LP’s está no fato de que, em alguns
casos, existe um verbo que pede a presença de uma preposição. Por exemplo:
Os russos não querem nem ouvir falar de acordo com os americanos.
22
Os elementos sublinhados desta sentença não formam uma LP, confundindo assim o
sistema de reconhecimento.
Isto acontece pois uma classe de verbos (regência verbal) pede a união de uma
preposição ao verbo. É o caso dos Verbos Transitivos Indiretos (VTI).
O sistema deve então conter um meio de ligar a preposição não ao núcleo da LP e
sim ao verbo imediatamente anterior.
Uma lista de verbos que pedem preposição (PRP) está relacionada na base de dados
do anexo 2.
Neste trabalho não utilizamos as classes gramaticais tradicionais para formação de
locuções. As LP’s são tratadas de acordo com a proposta de Dias onde os núcleos das LP’s passam
a ser tratados não como substantivos ou advérbios e sim como elemento de locução prepositiva,
reduzindo assim a formação das LP’s em dois tipos:
1- ELP seguido de PRP;
2- PRP seguido de ELP, seguido de PRP.
Onde:
ELP = elemento de locução prepositiva e
PRP = preposição.
Ou seja, necessariamente, as formações vêm seguidas de uma preposição e
antecedidas ou não de uma outra preposição.
23
7. APLICAÇÕES PARA O RECONHECIMENTO DE
LOCUÇÕES PREPOSITIVAS
A quantidade de informação a que uma pessoa tem acesso atualmente é
extremamente grande e, com a popularização da Internet, cresce a todo instante. A dificuldade de
localizar e acessar esse grande volume de dados deve-se principalmente à maneira desestruturada
de seu armazenamento, ou seja, na forma de texto [WIV1999].
Estas dificuldades acabam prejudicando também o tratamento e entendimento das
informações, gerando um problema conhecido por sobrecarga de informações, que pode ser
minimizado com algumas técnicas que serão estudadas.
Quanto ao estudo específico deste trabalho (Locuções Prepositivas) a relevância da
identificação das LP’s é grande devido ao fato de não serem elementos informacionais, mas
componentes da estrutura gramatical do texto. É importante categorizá-las como um grupo à parte
para que se possa realizar uma análise sintática completa.
A seguir serão apresentadas aplicações de PLN onde o reconhecimento de LPs é
útil. Essas aplicações incluem algumas formas de processar a informação disponível e tratá-la de
forma que o usuário tenha acesso à mesma com mais eficiência e eficácia. Esses processos são
complexos e envolvem diversas etapas, como filtragem de dados, aplicação de algoritmo de
identificação de componentes do texto e interpretação dos resultados [FAY1996].
7.1 Recuperação de Informação
É a área que busca indexar e encontrar documentos (ou partes destes) com base em
textos ou palavras, a partir de determinados padrões pré-estabelecidos [LOH1997].
A tarefa de recuperar informações não é recente visto que surgiu junto com as
grandes bibliotecas, há milhares de anos [BAE1999]. Desde então, as pessoas necessitam, de
alguma forma, localizar as informações mais relevantes para as suas necessidades.
24
“A Internet é agora um dos maiores repositores mundiais de informação”
[CHA1995].
Com a evolução do processo de armazenamento de informações, é crescente a
quantidade de informação que chega aos meios eletrônicos. Essa informação, porém, chega com
falta de padronização e distribuição sem controle. Por isso o processo de localização e recuperação
de informação deve evoluir para se adaptar às novas características dos meios de armazenamento
[WIV1999].
A área de recuperação de informação trata justamente de procurar informação nos
meios de distribuição, e para isto, estuda as melhores técnicas de armazenamento e localização das
informações nestes meios.
As ferramentas de recuperação de informação, geralmente, trabalham com técnicas
de indexação, capazes de identificar e acessar mais rapidamente documentos de uma base de dados
textual. [BAE1996].
São identificados três tipos de indexação [YAT 1996]:
• Indexação Tradicional: Fazem parte do índice, todos os termos descritivos ou
caracterizadores em um documento, selecionados manualmente para representálo;
• Indexação Full-Text (Indexação do texto completo): Fazem parte do índice, todos
os termos que compõem o documento; e
• Indexação por Tags (por partes do texto): Apenas algumas partes do texto são
escolhidas, automaticamente, para gerar as entradas do índice (somente as mais
importantes ou mais caracterizadoras).
O primeiro tipo de indexação é objeto de estudo na área de ciência da informação e
pode ser encontrado na maioria das bibliotecas. Seu maior problema é a geração de falhas no
25
índice devido à má escolha dos termos descritivos e caracterizadores, além de ser uma atividade
difícil e consumir muito tempo.
Estes problemas ocorrem porque os documentos, numa típica atividade de
catalogação, devem ser encaixados em hierarquias pré-definidas e também analisados para se
determinar a sua categoria. Se o conteúdo do documento não for corretamente analisado, ou não
forem definidas categorias intermediárias que encaixem corretamente o documento (este pode ser
encaixado em uma categoria que não expresse realmente o seu significado), ocorrem erros de
classificação.
Um problema ocorre quando o usuário tenta recuperar documentos, não sendo bem
determinado o assunto de busca, ou não existindo uma categoria adequada para sua classificação,
talvez sejam recuperados documentos irrelevantes ou nenhum documento seja recuperado.
O segundo tipo de indexação (Full-Text) não utiliza estruturas hierárquicas e
procura indexar todos os termos. Esta técnica gera índices volumosos já que as ferramentas
indexam automaticamente todas a palavras do documento.
Podem ser aplicados filtros a esta técnica para diminuir o problema do tamanho dos
índices e para evitar a indexação de termos indesejados ou inconsistências no índice [YAT1996,
CHE1996].
Nesta técnica podem ser eliminadas as chamadas stopwords, palavras que não fazem
diferença no conteúdo (como preposições e artigos), datas e números podem ser normalizados,
pronomes substituídos pelos nomes correspondentes, sinônimos substituídos por um termo padrão
e palavras compostas substituídas por um termo sinônimo simples (composto de uma só palavra)
[LOH1997].
No terceiro tipo de indexação, cada documento é analisado para localizar marcas
(tags) que identifiquem as partes mais importantes que serão indexadas.
26
Tem sido sugerida a geração de descrições dos documentos, usando generalizações
(resumos em uma frase) do seu conteúdo [CHA1995]. Tais descrições precisam ser feitas
manualmente por pessoas, o que aumenta o trabalho inicial, apesar de diminuir o esforço para
recuperação.
A forma de identificação das partes significativas (que serão indexadas) pode ser
feita automaticamente [MOU1992]. Pode-se declarar que os documentos possuem uma
macroestrutura (composta por cabeçalhos, títulos, capítulos, etc), uma microestrutura (contendo o
conteúdo lógico do documento e que pode ser identificada por um palavra-chave que introduz
condições, exceções, referências, etc) e uma camada de domínio (contendo as demais
informações).
Existem ferramentas que extraem palavras-chave com base em marcas (tags) da
macroestrutura dos documentos [HAR1993]. Pode ser construída uma tabela de tags específica
para cada tipo de arquivo (por exemplo: programas conteriam procedures, funções, comentários,
etc; mensagens de correio eletrônico conteriam destinatário, remetente, assunto, etc).
Entretanto, essas ferramentas encontram problemas quando o documento não possui
uma macroestrutura pré-concebida (tal como acontece nos textos livres armazenados em arquivos
“.txt”). Neste caso, somente as palavras das 100 primeiras linhas seriam indexadas, para evitar uma
indexação full-text. A premissa utilizada é a de que no início do documento é que se encontra a sua
descrição [HAR1993].
Para indexação por tags, a maioria dos trabalhos adota o uso de gramáticas, parsers,
expressões regulares e autômatos finitos para a definição e identificação das marcas [LOH1997].
O problema das técnicas de indexação por tags é que o tipo de conteúdo que
compõe os documentos e as marcas que identificam as partes relevantes de um documento já
devem ser conhecidos, ou seja, devem ser previamente analisados [LOH1997].
Como as técnicas tradicionais de recuperação de informação são baseadas na
presença ou não de palavras nos documentos, muitas vezes documentos importantes não são
recuperados, enquanto que outros irrelevantes são apresentados ao usuário. Este problema é
denominado de indexação imprecisa e ocorre porque a pessoa que descreve e indexa os
27
documentos muitas vezes utiliza termos diferentes da pessoa que procura pelos documentos
[LOH1997]. Técnicas de indexação semântica ou por contexto tentam solucionar estes problemas.
• Índices semânticos devem estar mais relacionados ao real significado de um texto
em particular e não baseados na presença de termos sem identificação do
contexto [COW1996].
• Contexto ou espaço contextual como sendo um conjunto de palavras que definem
um assunto ou área do conhecimento [CHE1996]. Assim, algumas técnicas
fazem a procura baseada no contexto dos documentos.
São discutidas técnicas com base na freqüência de termos em documentos
[CHE1996]. Para determinar a importância de um termo em determinado contexto, identificam-se
os termos que fazem parte do documento e quantas vezes este termo aparece no mesmo.
Um outro tipo de técnica [CHA1995] é a que utiliza expansões semânticas de
palavras para tratar o problema de busca contextual. Essa técnica consiste em encontrar outras
palavras relacionadas a um determinado termo, e utilizar esse conjunto de palavras para busca de
documentos. São utilizadas as definições de um dicionário para encontrar as palavras que se
relacionam, eliminando stopwords, e são modeladas essas relações através de redes semânticas. O
problema é que palavras que não fazem realmente parte do contexto podem ser relacionadas
através dessa expansão e, assim, recuperar documentos irrelevantes na busca.
A imprecisão dos termos é a raiz do problema de contextos diferentes. Termos com
significados diferentes podem ser notados tanto na criação do índice quanto no momento da busca.
Isso se dá porque as pessoas utilizam vocabulários diferentes para exprimir suas intenções
[FUR1987].
Quando a etiquetagem de textos é utilizada para auxiliar a análise dos itens lexicais
presentes em um documento, precedendo a indexação do mesmo, a correta identificação das LPs é
crucial para se obter êxito nesse processo.
28
7.2 Extração de Informação
Os sistemas que fazem extração de informações procuram solucionar o problema de
achar informações dentro dos textos [LOH1997].
As técnicas de extração de informação transformam dados não estruturados em
informações explícitas, isolando partes relevantes do texto, extraindo informação destas partes e
transformando-as em informações melhor analisáveis [COW1996]. Essa área ainda se preocupa em
formatar as informações coletadas nos textos para os padrões de saída [LOH1997].
A técnica de extração de informação não se caracteriza em estabelecer uma base de
regras ou um modelo de domínio, e sim reconhecer e apresentar dados específicos que estão
implícitos em texto, ignorando informações irrelevantes [LOH1997]. É uma técnica direcionada a
aplicações específicas. A importância dessas técnicas consiste na diminuição do esforço com
aquisição do conhecimento [COW1996].
Técnicas de extração de informação reconhecem estruturas de um texto através da
análise de tags. Essas técnicas utilizam templates para formatar os dados de saída para texto em
linguagem natural. Templates são frases com lacunas a serem preenchidas pelas informações dos
slots. Slots são itens de dados ou partes de informação que representam as informações que devem
ser extraídas de um texto [COW1996].
Uma análise léxico-sintática para o reconhecimento da informação, para fins de
extração de informação, pode utilizar gramáticas regulares, parsers parciais e autômatos finitos.
Entretanto algumas técnicas podem utilizar meios mais complexos para o estudo do significado de
termos, frases e textos, como análise semântica. Durante a análise léxico-sintática teremos
dificuldades se não houver o reconhecimento adequado das LPs.
Hersh discute um problema que pode ocorrer durante a extração de informações que
é a falta de qualidade das informações recuperadas [HER1995]. Diversas vezes são encontradas
informações redundantes ou contraditórias extraídas dos documentos. Deve-se ter cuidado ao
extrair informações de diversos documentos, pois as informações de apenas um documento podem
estar desatualizadas, e informações de diferentes documentos podem ser contraditórias.
29
A ferramenta utilizada por Hersh apresenta dois componentes: um planejador de
conteúdo (seleciona as informações com base nos slots) e um componente lingüístico (utilizado
para gerar as frases de saída em linguagem natural). A aplicação dessa ferramenta é sugerida para
evitar a sobrecarga de informações resultante de uma procura na internet.
A necessidade de especificidade dos sistemas e ferramentas gerados é um dos
grandes problemas da Extração de Informação. Muitos sistemas podem ser aplicados somente nos
casos para os quais foram criados (problemas jurídicos, textos jornalísticos, etc) ou em um
determinado domínio [LOH1997]. Nesses casos, há a necessidade do aprendizado das aplicações e
suas particularidades. É necessário conhecer o conteúdo e estruturas do sistema, e isso exige muito
trabalho. Os padrões de texto devem ser analisados por alguma pessoa. Por outro lado, as técnicas
que tentam ser genéricas ocasionam falhas no sistema, devido ao excesso de informações
recuperadas. Muitas destas informações são vagas e não se encaixam nos casos específicos por não
considerarem as diferenças de contexto. Neste caso, estas informações não podem ser aplicadas.
A imprecisão dos termos encontrados nos textos é outro grande problema que pode
afetar o processo de Extração de Informações. A escolha de palavras, frases e estruturas de
sentença afeta a precisão do significado [WIE1996], o que dificulta a Extração de Informações. Por
isso os processos de interpretação e significação na Linguagem Natural apresentam falhas. Neste
sentido a etiquetagem de categorias gramaticais pode dar sua parcela de contribuição, e a
identificação de LPs encaixa-se neste processo.
7.3 Sumarização
A produção de um resumo ou sumário através da abstração das partes importantes
do conteúdo do texto é chamada de sumarização [WIV1999].
Uma das abordagens para esta técnica é apresentada por Miike [MII1994], que
através de interações com o usuário consegue gerar resumos em tempo de execução. De acordo
com o seu ponto de vista, o usuário pode definir as partes que farão parte do resumo, assim como o
seu tamanho.
30
A análise do texto é feita sobre sua organização (seções, parágrafos, título,
subtítulos) sobre as sentenças que o compõem (análise morfológica e sintática com o uso de um
dicionário), sobre a estrutura do texto (conectivos lógicos, expressões idiomáticas entre parágrafos
e frases) e com a extração de papéis(roles) ou funções semânticas por tags. Durante a análise
léxico-sintática teremos dificuldades se não houver o reconhecimento adequado das LPs.
7.4 Outras aplicações
Algumas outras aplicações próximas à extração de informação e sumarização
também teriam benefícios com o reconhecimento automático de LPs.
Saggion apresenta um técnica que identifica informações usando palavras-chave
(como hipóteses, conclusões, experimentos, etc), através da análise de uma estrutura de
resumos/sumários, e com o uso de templates traduz estas palavras para outra língua [SAG1995].
Esse tipo de técnica (baseada no reconhecimento de tags semânticos) pode ajudar na
eliminação de ambigüidades dos termos e pode detectar relações entre nomes e pronomes e
relações entre frases [WIE1996].
A técnica de clustering extrai categorias através da análise do texto. Categorias
básicas ou complexas são deduzidas utilizando os próprios termos do texto [WIE1996].
O trabalho de McKeown e Radev [McK1995] apresenta técnicas para a análise de
diversos artigos sobre um mesmo assunto e a criação de um resumo em Linguagem Natural,
visando resolver o problema de informações redundantes e contraditórias. A técnica extrai
informações de partes dos textos e as estrutura em slots, com o objetivo de, posteriormente,
encontrar similaridades e diferenças de informações com base nos slots. Frases similares (com
informações sobre os mesmos slots) são colocadas juntas para a construção dos resumos de saída.
Para combinar as informações extraídas de artigos diferentes, são aplicados operadores que geram
frases combinadas através do uso de conectivos lógicos e palavras-chave. Este operadores podem,
no resumo final, exprimir contradição, adição, refinamento de informação, concordância, falta de
informação, etc. Os operadores podem também, decidir quais informações devem constar no
31
resumo final, de acordo com o grau de importância delas, segundo critérios (exemplo: informações
que aparecem em maior número de artigos são mais importantes).
32
8. PROPOSTA PARA RECONHECIMENTO DE
LOCUÇÕES PREPOSITIVAS
“Os elementos das locuções não devem ser classificados em separado,
deverá haver uma forma de identificar o grupo de palavras que
compõem uma LP” [DIA1984].
Este trabalho utiliza o algoritmo proposto por Dias, apresentado na figura 1, para
identificar LPs [DIA1984]. A proposta de Dias baseia-se no estudo detalhado das LP’s para incluílas num sistema de indexação automática.
sim
há palavra?
início
fim
comparar com
dicionário de
freqüência
pode ser
ELP?
não
sim
não
há PRP
após?
não
não reconhecer
sim
reconhecer
ELP
não
não
há ADV
antes?
sim
não
sim
PRP = a,
de, com?
palavra
tipo 1?
verbo
anterior pede
esta PRP?
não
palavra
tipo 2?
sim
não reconhecer
sim
PRP = a, de,
com, em, para,
por sem?
sim
há PRP
antes?
não
não
ELP- Elemento de Locução Prepositiva; PRP- Preposição; ADV- Advérbio
Figura 1. Algoritmo de Dias em fluxograma adaptado por Gonzalez [GON2000]
33
sim
Dias define, em sua dissertação, critérios para decidir se um conjunto de palavras é
ou não uma locução, e determinar a que categoria pertence (advérbio, substantivo ou locução
adverbial).
A definição de critérios contribuiu para a indexação automática do sistema LINGA1 ,
e assim, as LP’s passaram a ser reconhecidas pelo sistema eliminando-se também o problema de
ambigüidade.
Para reconhecer a LP verifica-se a necessidade de identificar o grupo de palavras
que a compõe. Não se deve analisar seus elementos individualmente.
O núcleo da LP foi denominado Elemento de Locução Prepositiva (ELP) na lista de
categorias do LINGA e deve ser reconhecido imediatamente pelo sistema. Um ELP sempre vem
seguido de uma preposição, podendo ou não vir antecedido de outra.
Com o Reconhecimento das LPs através do seu núcleo, não é necessário que o
sistema verifique a existência da mesma cada vez que encontrar uma preposição, o que torna o
sistema mais eficaz, visto que as preposições aparecem inúmeras vezes.
Ao encontrar uma palavra o programa verifica no dicionário de freqüência se a
mesma pode ser um ELP. Em caso positivo, precisa-se saber se a palavra seguinte é uma
preposição e se esta é uma das três (a, de, com) que podem vir depois do núcleo. Se as condições
forem satisfeitas o sistema precisa saber se deve voltar para procurar uma preposição que antecede
o ELP, ou se pode seguir adiante rejeitando ou considerando a possibilidade de ter uma LP
reconhecida. As preposições que podem vir à frente do núcleo são: a, de, com, em, para, por, i.
A maneira usada para saber se o sistema deve ou não voltar atrás é simples. Atribuise, no dicionário de freqüência, um número às colunas que indicam o tempo verbal no caso de
formas verbais. Se encontrar o número 1 nessa coluna o sistema pode prosseguir, caso contrário, se
achar o número 2, deve procurar uma preposição que anteceda o núcleo.
Existem casos em que conjuntos de palavras poderiam formar LP’s, mas isso não
ocorre porque os verbos anteriores aos conjuntos necessitam de um complemento, exatamente a
1 Sistema de análise automática de textos em linguagem natural.
34
preposição que antecede o ELP. Outro caso que poderia confundir o sistema é a existência de
advérbios que precedem o ELP, isso deve ser verificado se a locução for formada por apenas dois
elementos.
O algoritmo descrito acima consegue identificar corretamente grande parte das LP's,
porém existem casos que o sistema não cobre. Se a sentença possuir um advérbio que antecede a
LP, o sistema desconsiderará a possibilidade de uma locução, e nem sempre ele estará agindo
corretamente. Entretanto, a quantidade de erros na interpretação da sentença será extremamente
pequena, segundo DIAS, e não prejudica a eficácia do sistema.
8.1 Base de Dados
No presente estudo das locuções prepositivas, foi elaborada uma base de dados onde
se encontram relacionadas as Locuções Prepositivas (LP), os Elementos de Locução Prepositiva
(ELP), os Verbos Transitivos Indiretos (VTI), os Advérbios (ADV) e as Preposições (PRP).
É importante salientar que as bases de dados de verbos, LPs e todas as outras foram
construídas independentes do corpus. Portanto, podem ser usadas em outros corpus.
Esta base de dados utilizada encontra-se no anexo 2 deste trabalho.
35
9. SISTEMA PARA RECONHECIMENTO DE
LOCUÇÕES PREPOSITIVAS
9.1 Introdução
O Sistema para reconhecimento automático de locuções prepositivas (RALP),
utiliza o algoritmo de Dias para fazer o reconhecimento de LPs. O programa executa o algoritmo
para cada item léxico da sentença de entrada e verifica se a mesma pode ou não estar constituindo
uma LP.
9.2 Objetivo
O objetivo principal deste sistema é receber um texto de entrada em Português
etiquetado e retornar outro texto contendo o mesmo texto de entrada apenas modificado com as
LP’s presentes marcadas (reconhecidas).
A sentença de entrada corresponde a um texto previamente etiquetado onde cada
palavra da sentença se encontra no formato <palavra>_<etiqueta>.
Ao retornar o texto de saída, e reconhecendo alguma LP, o conjunto de palavras que
caracterizam a LP recebem a etiqueta “_LP”, indicando o reconhecimento da mesma.
36
9.3 Visão Geral
Início
Reconhecer
LP
Ler
Palavra
do
Texto
Sim
Há Mais
Palavras no
Texto
Não
Fim
Figura 2. Diagrama de Contexto.
A figura 2 apresenta uma visão geral do sistema, onde se pode observar a
característica recursiva do processo, repetindo para cada palavra da sentença de entrada o
algoritmo de reconhecimento de LPs.
O algoritmo de reconhecimento de LPs, que está representado na figura 3, foi
montado a partir do algoritmo de Dias com as alterações necessárias para o reconhecimento de LPs
em textos de entrada etiquetados.
Visto que a entrada do sistema é um texto etiquetado, o algoritmo teve que ser
adaptado para reconhecer LPs onde a preposição anterior ao núcleo vinha separada deste por um
artigo. Esta adaptação realizada foi decorrente do processo de etiquetagem de textos que servem de
entrada para o sistema.
37
Outro foco de contribuição para este trabalho voltou-se para a criação de uma base
de dados que serviria de consulta e também como ponto fundamental para os primeiros testes do
sistema.
Nesta base de dados encontram-se as LPs, os núcleos das locuções prepositivas, os
advérbios e os verbos transitivos indiretos. Esta base de dados não é finita e pode ser incrementada
ou atualizada conforme a necessidade do sistema.
sim
há palavra?
início
sim
palavra é
SU,VB,…
comparar com
dicionário de
freqüência
há PRP
após?
sim
não
não
fim
sim
pode ser
ELP?
não
não
não reconhecer
sim
reconhecer
ELP
não
não
há ADV
antes?
sim
não
sim
PRP = a,
de, com?
palavra
tipo 1?
verbo
anterior pede
esta PRP?
não
palavra
tipo 2?
sim
não reconhecer
sim
PRP = a, de,
com, em, para,
por sem?
sim
há PRP
antes?
não
não
sim
há PRP
antes?
sim
não
há AR
antes?
não
ELP- Elemento de LP; PRP- Preposição; ADV- Advérbio; AR- Artigo; SU- Substantivo; VB- Verbo.
Figura 3. Algoritmo de reconhecimento de LPs
38
O sistema RALP foi implementado sobre a plataforma C. Sua execução é chamada
por um formulário criado no ambiente HTML onde a visualização é simples, bem como a sua
utilização. O programa executável implementa um CGI em ambiente UNIX.
Os fontes do HTML e do programa C estão presentes no final deste documento no
anexo 3.
Já as telas do sistema e o manual do usuário encontram-se no anexo 1 deste
trabalho.
9.4 Especificação
Nas figuras a seguir são apresentados os diagramas dos modelos estrutural,
dinâmico e funcional, de acordo com a metodologia OMT.
Foram construídos, para o modelo estrutural, o diagramas de objetos (figura 3), para
o modelo dinâmico, os diagramas de eventos para todos os casos possíveis de reconhecimento ou
não de LP’s (figuras 4 a 9) e, para o modelo funcional, foram construídos o diagrama de contexto
(figura 10), o diagrama de fluxos de dados (dfd) de nível zero (figura 11) e os outros dfd’s (figuras
12 e 13) necessários para completar a modelagem do sistema. Finalmente, é apresentado um
dicionário de dados para facilitar a leitura dos diagramas.
39
9.4.1 Modelagem Estrutural
Sentença
conteúdo
Recebe_sentença
Informa_palavra
Informa_palavra_após
Informa_palavra_ant
Informa_verbo
1+
Palavra
LP
conteúdo_LP
num_PAL
conteúdo_PAL
Recebe_palavra
Solicita_palavra_após
Recebe_palavra_após
Solicita_palavra_ant
Recebe_palavra_ant
Solicita_verbo_ant
Recebe_verbo_ant
Reconhecer_LP
Verifica_ELP
Verifica_PRP
Verifica_PRP1
Verifica_ADV
Verifica_VB
PRP
ELP
conteúdo_PRP
ADV
conteúdo_ELP
1-2
Armazena_LP
VB
conteúdo_ADV conteúdo_VB
1
PRP1
conteúdo_PRP1
Figura 4. Diagrama de Objetos
40
9.4.2 Modelagem Dinâmica
Sentença
Informa
Sentença
(SENT)
PRP1
Palavra
ELP(Núcleo)
Verbo
PRP
ADV
Informa palavra(PAL)
Verifica ELP (PAL)
Verificação OK
solicitação de palavra após
Informa palavra após (POS)
Verifica se é PRP1 (POS)
Verificação OK
solicitação de palavra anterior
Informa palavra anterior (ANT)
Verifica se é PRP (ANT)
Verificação Não OK
Verifica se é ADV (ANT)
Verificação Não OK
Reconhecimento como Tipo1
Figura 5. Reconhecimento de LP – Tipo 1.
A figura 4 apresenta o diagrama de eventos para o caso do reconhecimento de uma
LP do tipo 1 pelo algoritmo (ELP + PRP).
41
Sentença
Informa
Sentença
(SENT)
Palavra
PRP1
ELP(Núcleo)
Verbo
PRP
ADV
Informa palavra(PAL)
Verifica ELP (PAL)
Verificação OK
solicitação de palavra após
Informa palavra após (POS)
Verifica se é PRP1 (POS)
Verificação OK
solicitação de palavra anterior
Informa palavra anterior (ANT)
Verifica se é PRP (ANT)
Verificação OK
solicitação de verbo anterior
Informa verbo (VB)
Verbo pede PRP (VB)
Verificação Não OK
Reconhecimento como tipo2
Figura 6. Reconhecimento de LP – Tipo 2.
Na figura 5, o algoritmo faz o reconhecimento de uma LP do tipo 2 pois existe uma
preposiçao antecedendo o núcleo (PRP + ELP + PRP).
42
Sentença
Informa
Sentença
(SENT)
Palavra
PRP1
ELP(Núcleo)
Informa palavra(PAL)
Verifica ELP (PAL)
Verificação OK
solicitação de palavra após
Informa palavra após (POS)
Verifica se é PRP1 (POS)
Verificação Não OK
Reconhecimento não OK
Figura 7. Reconhecimento de inexistência de LP – sem PRP após.
Já na figura número 6, o algoritmo não reconhece a LP na sentença, pois não existe
preposição após o núcleo (ELP). Nestes casos o algoritmo não precisa executar as outras etapas
pois a hipótese de ser LP está descartada.
43
Sentença
Informa
Sentença
(SENT)
Palavra
PRP1
PRP
ELP(Núcleo)
Informa palavra(PAL)
Verifica ELP (PAL)
Verificação OK
solicitação de palavra após
Informa palavra após (POS)
Verifica se é PRP1 (POS)
Verificação OK
Solicitação de palavra anterior
Informa palavra anterior (ANT)
Verifica se é PRP (ANT)
Verificação Não OK
Reconhecimento Não OK
Figura 8. Reconhecimento de inexistência de LP – sem PRP antes.
A figura 7 apresenta um diagrama de eventos onde o possível reconhecimento de LP
só se dará para uma LP do tipo 1 (ELP + PRP), pois não existe a preposição anterior ao núcleo, o
que caracterizaria como uma LP tipo2 (PRP + ELP + PRP).
44
Sentença
Informa
Sentença
(SENT)
Palavra
PRP1
ELP(Núcleo)
Verbo
PRP
ADV
Informa palavra(PAL)
Verifica ELP (PAL)
Verificação OK
solicitação de palavra após
Informa palavra após (POS)
Verifica se é PRP1 (POS)
Verificação OK
solicitação de palavra anterior
Informa palavra anterior (ANT)
Verifica se é PRP (ANT)
Verificação OK
solicitação de verbo anterior
Informa verbo (VB)
Verbo pede PRP (VB)
Verificação OK
Reconhecimento Não OK
Figura 9. Reconhecimento de LP – Verbo anterior não pede preposição.
A figura 8 mostra o reconhecimento de LP tipo 2, pois não existe nenhum verbo que
exige a presença da preposição anterior ao núcleo (Verbos Transitivos Indiretos).
45
Sentença
Informa
Sentença
(SENT)
PRP1
Palavra
ELP(Núcleo)
Verbo
PRP
ADV
Informa palavra(PAL)
Verifica ELP (PAL)
Verificação OK
solicitação de palavra após
Informa palavra após (POS)
Verifica se é PRP1 (POS)
Verificação OK
solicitação de palavra anterior
Informa palavra anterior (ANT)
Verifica se é PRP (ANT)
Verificação Não OK
Verifica se é ADV (ANT)
Verificação OK
Reconhecimento Não OK
Figura 10. Reconhecimento de inexistência de LP – Existe advérbio antes.
No diagrama da figura 9, o algoritmo de reconhecimento de LP não confirma a
caracterização da LP pois existe um advérbio antecedendo o núcleo.
46
9.4.3 Modelagem Funcional
USUÁRIO
Texto
etiquetado
R.A.L.P.
Texto etiquetado
c/LP’s
Figura 11. Diagrama de contexto
47
USUÁRIO
Texto
etiquetado
Separa
Palavra
sentença
POS, ANT, VB
palavra
[palavra analisada]
Lê
Próxima
Palavra
Analisa
Palavra
[há mais palavras] palavra
[não há mais palavras]
LP
Armazena
LP
Informa
LP’s
sentença
Figura 12. DFD nível 0
48
Texto etiquetado
c/LP’s
palavra
POS, ANT,
VB
Verifica
ELP
Verifica
Classe
LP’s
ELP
[palavra analisada]
Figura 13. DFD nível 1 – Analisa Palavra.
49
POS
ANT
VB
VB
Verifica
Preposição
[ANT não OK]
ADV
Verifica
Classe
ADV
PRP1
[OK]
PRP
[Não OK]
LP’s
[palavra analisada]
Figura 14. DFD nível 2 – Verifica Classe.
50
9.4.4 Dicionário de Dados
A seguir apresentamos a listagem organizada dos elementos de dados pertinentes ao
sistema, viabilizando assim a integração entre os diversos diagramas utilizados.
•
ADV * Lista de Advérbios * = Conteúdo_ADV
•
Armazena_LP * Armazena as LP’s encontradas*=
•
Conteúdo * Palavras que fazem parte da sentença * =
•
Conteúdo_ADV * Lista de Advérbios * =
•
Conteúdo_ELP * Núcleos * =
•
Conteúdo_LP * Palavras que fazem parte da LP * =
•
Conteúdo_PAL * Tipos possíveis de palavras * =
•
Conteúdo_PRP * Preposições 2 * = a, de, com, em, para, por, sem
•
Conteúdo_PRP1 * Preposições 1 * = a, de, com
•
Conteúdo_VB * Lista de verbos que pedem preposição * =
•
ELP * Elemnto de Locução Prepositiva * = Conteúdo_ELP
•
Informa_palavra * Informa palavra de sentença * =
•
Informa_palavra_ant * Informa palavra anterior * =
•
Informa_palavra_após * Informa palavra posterior * =
•
Informa_verbo * Informa verbo * =
•
LP * Locução Prepositiva * = Conteúdo_LP + Num_Pal
•
Num_Pal * Número de palavras contidas na sentença * =
•
PAL * PAL=Palavra, Palavras da Sentença * = Conteúdo_Pal
•
PRP * Preposições 2 * = Conteúdo_PRP
•
PRP1 * Preposições 1 * = Conteúdo_PRP1
•
Recebe_palavra * Recebe palavra da sentença * =
•
Recebe_palavra_ant * Recebe palavra anterior * =
•
Recebe_palavra_após * Recebe palavra posterior * =
51
•
Recebe_sentença * Recebe sentença de entrada * =
•
Recebe_verbo_ant * Recebe verbo * =
•
Reconhecer_LP * Recebe palavra da sentença * =
•
SENT * SENT=Sentença, Sentença de Entrada * = Conteúdo
•
Solicita_palavra_ant * Solicita palavra anterior * =
•
Solicita_palavra_após * Solicita palavra posterior * =
•
Solicita_verbo_ant * Solicita verbo * =
•
Verifica_ADV * Verifica se palavra é ou não advérbio * =
•
Verifica_ELP * Verifica se palavra é ou não Elemento de LP * =
•
Verifica_PRP * Verifica se palavra é ou não preposição do tipo 1 * =
•
Verifica_PRP1 * Verifica se palavra é ou não preposição do tipo 2 * =
•
Verifica_VB * Verifica se verbo pede ou não preposição * =
•
VB * VB=Verbo, Lista de Verbos * = Conteúdo_VB
9.5 Alternativas de Implementação
Na implementação do sistema RALP algumas alterações no algoritmo foram
realizadas e certas decisões tiveram que ser tomadas a fim de não prejudicar a correta aplicação do
reconhecimento das LPs.
Certos problemas encontrados, ou mesmo soluções diferentes, contribuíram para
uma modificação na estrutura do algoritmo de Dias que servia como base para este trabalho.
Uma das modificações que foram realizadas ocorreu por causa do uso de
etiquetadores. Como o sistema tem como entrada um texto previamente etiquetado algumas
sentenças não formavam uma LP sendo que na verdade se tratavam de uma.
Por exemplo, na seguinte sentença de entrada:
... a_PR o_AR encontro_SU de_PR...
52
Se utilizarmos o algoritmo de Dias sem alteração alguma no exemplo, a LP não
seria reconhecida pois existe um artigo entre a primeira preposição (a) e o substantivo (encontro)
descaracterizando as formas básicas apresentadas por Dias.
O problema que acontece nestes casos é que existe uma separação da preposição (a)
e do artigo (o) por parte do etiquetador. No exemplo acima o etiquetador transforma o vocábulo
“ao” em “a + o”, desfazendo a combinação existente.
Na língua portuguesa existem dois tipos de união das preposições: as combinações e
as contrações. [CEG1998]
No caso de contrações as preposições a, de e em podem contrair-se com artigos,
pronomes ou advérbios (a + a = à; de + o = do; em + o = no).
No segundo caso, o das combinações, a preposição se combina com artigos,
pronomes demonstrativos ou advérbios (a + o = ao; a + os = aos; a + onde = aonde).
Devido a estes contratempos o algoritmo de Dias, que não era voltado a entrada de
textos etiquetados, teve que ser modificado para tratar estes casos especiais e poder realizar um
reconhecimento mais eficaz.
Outro problema na construção do sistema foi relacionado aos verbos que pedem
preposição, ou seja, verbos que não aparecem sozinhos nas sentenças. São os verbos transitivos
indiretos (VTI).
Os verbos tiveram que ser tratados pelo seu radical visto que poderiam aparecer nos
mais diferentes tempos verbais existentes na língua portuguesa. Portanto, tivemos que criar uma
base de dados com os radicais destes verbos e então fazer uma comparação com o radical do verbo
extraído do texto.
As variações verbais também podem ocorrer de acordo com o modo (indicativo,
subjuntivo e imperativo) e a pessoa (1.ª, 2.ª, ...).
53
Uma idéia prática que foi desenvolvida para agilizar o sistema foi a de montar uma
base de dados de LPs já reconhecidas e então realizar uma pesquisa rápida antes de aplicar o
algoritmo. Caso a possível LP estivesse contida nesta base a aplicação do algoritmo não seria
necessária.
Cabe aqui ressaltar que as bases de dados não são completas mas, como nosso
sistema não se baseia apenas nelas, este fato não prejudica sua performance.
9.6 Resultados do sistema
Abaixo estão alguns exemplos de entrada e saída do sistema com o reconhecimento
de algumas LPs. Por motivos de clareza, deixamos de apresentar as outras etiquetas.
Entrada: “Ele fica abaixo de mim, na lista.”
Saída: “Ele fica abaixo_de_LP mim, na lista.”
Entrada: “O gato pulou de cima do muro.”
Saída: “O gato pulou de_cima_do_LP muro.”
Entrada: “O médico alcançou sucesso por meio de árduo trabalho.”
Saída: “O médico alcançou sucesso por_meio_de_LP árduo trabalho.”
Entrada: “Saí a fim de relaxar.”
Saída: “Saí a_fim_de_LP relaxar.”
54
Foram analisados 11 arquivos de entrada etiquetados, com um total de 2.588 itens
lexicais e 32 LPs. O sistema detectou 40 LPs. Destas, 31 LPs foram detectadas corretamente e 9
foram identificações inválidas devidos aos erros dos tipos 1 e 2 (ver tabela 3). Uma LP não foi
identificada devido a erro de etiquetagem (tipo 3).
Tipo de Erro
Erro Tipo 1
Erro Tipo 2
Erro Tipo 3
Descrição do Erro
LP detectada no formato Preposição_Núcleo_Preposição, mas
a preposição anterior não é válida para aquele núcleo, logo
não é uma LP.
LP detectada no formato Núcleo_Preposição, com ausência de
advérbio anterior, mas não é uma LP.
LP não detectada devido a erro de etiquetagem.
Tabela 3. Tipos de erro de identificação de LPs
De acordo com os resultados apresentados pelo sistema, a relação entre as LPs
corretamente reconhecidas e as incorretamente reconhecidas, foi:
• 31 LPs detectadas corretamente (77,50%).
• 04 LPs com erro tipo 1 (10,00%).
• 05 LPs com erro tipo 2 (12,50%).
LPs reconhecidas
corretamente.
LPs reconhecidas
incorretamente
(Erro tipo 1)
LPs reconhecidas
incorretamente
(Erro tipo 2)
Figura 15. LPs corretas X LPs incorretas.
55
Já os resultados encontrados das LPs reconhecidas corretamente com relação as LPs
não reconhecidas por erro de etiquetagem (Erro tipo 3), foram:
• 31 LPs reconhecidas corretamente (96,87%).
• 01 LP não reconhecida - erro tipo 3 (03,13%).
LPs reconhecidas
corretamente.
LPs não
reconhecidas
(Erro tipo 3)
Figura 16. LPs corretas identificadas x LPs não identificadas.
O sistema se mostrou eficaz na execução do algoritmo para os textos de entrada que
foram submetidos ao reconhecimento. Todas as LP’s que se apresentavam nos textos utilizados
para teste foram reconhecidas com sucesso, salvo um não reconhecimento por erro de etiquetagem.
Dias, em sua dissertação de mestrado, apresenta um capítulo onde são citados casos
de falhas no reconhecimento. São os casos das falsas LP’s, ou seja, aquelas sentenças onde as
palavras possuem as características de LP, são etiquetadas como LP, mas no contexto em que se
encontram no texto não se apresentam como uma LP. O sistema RALP se mostrou vulnerável para
esta situação.
Estes casos especiais, o das falsas LPs, já haviam sido citados no trabalho de Dias,
sendo assim eram situações previsíveis e já esperadas desde o início da elaboração deste trabalho.
56
10. CONCLUSÕES
Enquanto o objetivo específico deste Trabalho de Conclusão foi a especificação de
uma ferramenta para reconhecimento de LPs, seu objetivo básico foi consolidar os conteúdos
vistos ao longo do curso num trabalho prático de pesquisa e modelagem. O desenvolvimento deste
trabalho possibilitou a integração entre teoria e prática, verificando a capacidade de síntese das
vivências do aprendizado adquiridas durante o curso.
As pesquisas realizadas enriqueceram a bagagem de conhecimento do grupo. Os
conhecimentos e propriedades ligados às LPs foram discutidos e trabalhados justamente para se
obter os benefícios do reconhecimento dos mesmos.
Os estudos realizados nas áreas de Ciência da Informação, Inteligência Artificial e
Lingüística Computacional, podem trazer cada vez mais um crescimento científico para o
aperfeiçoamento geral do acesso às informações pela comunicação em linguagem natural com
sistemas de informação e também melhorar o desenvolvimento da tradução automática de textos.
Espera-se que as informações aqui apresentadas também possam servir como ponto
de partida para a utilização deste sistema em projetos de ensino e pesquisas, bem como para novos
trabalhos na área.
Todas as considerações expostas neste trabalho tinham como meta servir para a
implementação de um sistema capaz de reconhecer locuções prepositivas utilizando a tradução
automática de textos.
O sistema criado com este trabalho será utilizado na fase de etiquetagem de textos
do trabalho de doutoramento do Prof. Marco Gonzalez, que aplica PLN em recuperação de
informação. O sistema RALP fará parte da complementação de um sistema de pré-etiquetagem de
textos, que está sendo desenvolvido por outro grupo de TC. Como esse conjunto de sistemas
desenvolvidos (e ainda em desenvolvimento) o Grupo de PLN da Faculdade de Informática da
PUCRS terá disponível um etiquetador para a Língua Portuguesa que poderá ser utilizado em
futuras aplicações.
57
BIBLIOGRAFIA
[ALI1969] ALI, M. Said. Gramática Secundária da Língua Portuguesa. São Paulo, Editora
Melhoramentos, 1969; 8.ª edição, revista e comentada pelo Prof. Evanildo
Bechara.
[ALL1995] ALLEN, J. Natural Language Understanding. Redwood City, CA: The
Benjamin/Cummings Pub. Co., 1995. 654 p.
[ARI1944] Aristóteles. Art rhétorique et art poétique . Paris : Librarie Garnier, 1944.
[AUR1975] FERREIRA, Aurélio B. de Holanda. Novo Dicionário da Língua Portuguesa. Rio de
Janeiro, Nova Fronteira, 1975. 1ª edição.
[BAE1996] BAEZA YATES, Ricardo. An extended model for full text databases. Journal of the
Brazilian Computer Society, v.2, n.3, Abr 1996.
[BAE1999] BAEZA YATES, R.; Ribeiro Neto, B. Modern Information Retrieval. New York:
ACM Press, 1999. 513 p.
[BAS1995] BASÍLIO, Margarida. O Fator Semântico na Flutuação Substantivo / Adjetivo em
Português. In: HEYE, J. (Org.), Flores Verbais, Rio de Janeiro, 1995. 34ª
edição, p. 177-192.
[BEA1991] BEARDON, C.; LUMSDEN, D.; HOLMES, G. Natural Language and
Computational Linguistics. Melksham-Wiltshire, England: Ellis Horwood
Ltd., 1991.
[BEC1980] BECHARA, E. Moderna Gramática Portuguesa. São Paulo, Companhia Editora
Nacional, 1980. 27ª edição.
[CEG1998] CEGALLA, Domingos P. Novíssima Gramática da Língua Portuguesa com
Numerosos Exercícios. São Paulo, Editora Nacional, 1998. 41ª edição.
58
[CHA1995] CHAKRAVARTHY, Anil S.; HAASE, Kenneth B. NetSerf: using semantic
knowledge to find Internet information archives. Proceedings. SIGIR, 1995.
[CHE1996] CHEN, Hsinchun et alli. A concept space approach to addressing the vocabulary
problem in scientific information retrieval: an experiment on the worm
community system. MIS Department, University of Arizona, 2 de Julho de
1996. Disponível na internet em: http://ai.bpa.arizona.edu/ papers/
[COW1996] COWIE, J.; LEHNERT, W. Information Extraction. Communications of the ACM,
v. 39, n. 1, p. 80-91, janeiro 1996.
[CUN1976] CUNHA, C. Gramática da Língua Portuguesa. MEC-FENAME, 1976. 3ª edição,
revista e atualizada.
[DIA1984] DIAS, M.C.P. Uma proposta de Tratamento Automático das Locuções Prepositivas no
Português. Dissertação de Mestrado. Rio de Janeiro: Depto. de Letras, PUC/RJ,
1984. 141 p.
[DIA1994] DIAS, M.C.P. O Léxico em Sistemas de Análise e Geração Automática de Textos em
Língua Portuguesa. Tese de Doutorado. Rio de Janeiro: Depto. de Letras,
PUC/RJ, 1994. 169 p.
[DIN2001] Departamento de Informática, Universidade Estadual de Maringá. Processamento de
Linguagem Natural. Capturado em Abril de 2001. Disponível na internet em:
http://www.din.uem.br/ia/800x600/intelige.html
[FAY1996] FAYAD, Usama M. et alli (eds) Advances in Knowledge Discovery and Data
Mining. Menlo Park, The MIT Press, 1996.
[FUR1987] FURNAS, G. W. et alli. The vocabulary problem in human-system communication.
Communications of the ACM, v.11, n.30, Nov 1987.
[GON2000] GONZALEZ, M. Representação Semântica de Sentenças em Linguagem Natural e
sua aplicação na Recuperação de Informação. Trabalho Individual II, PPGCC,
Faculdade de Informática, PUCRS, setembro 2000. 71 p.
59
[HAL1986] HALLER, J. Análise Lingüística e Indexação Automática de Textos. Porto Alegre:
Veritas, V. 31, N. 123, p. 339-405, 1986.
[HAR1993] HARDY, Darren R.; SCHWARTZ, Michael F. Essence: a resource discovery system
based on semantic file indexing. Proceedings. Winter USENIX, San Diego, CA,
25-29 de Janeiro de 1993.
[HER1995] HERSH, William R. et alli. Towards new measures of information retrieval
evaluation. Proceedings. SIGIR, 1995.
[HAS1994] HARRIS, Stuart. CIBERLIFE! Berkeley Brasil Editora, São Paulo, 1994.
[JUN1964] JUNG, Carl G. O homem e seus símbolos. 4. ed. Rio de Janeiro : Nova Fronteira,
1964.
[LOH1997] LOH, Stanley. Descoberta de Conhecimento em Bases de Dados Textuais. Maio de
1997. Capturado em 28 de novembro de 2000. On-line. Disponível na Internet
http://www.ulbra.tche.br/~loh/apostilas/dc-texto.htm
[McK1995] McKEOWN, Kathleen; RADEV, Dragomir R. Generating summaries of multiple
news articles. Proceedings. SIGIR, Seattle, EUA, 1995.
[MEL1978] MELO, G. C. Gramática Fundamental da Língua Portuguesa. Rio de Janeiro, Ao
Livro Técnico S/A, 1978. 3ª edição.
[MFI2000] FINGER, Marcelo; Técnicas de Otimização da Precisão Empregadas no Etiquetador
Tycho Brahe. In: Proceedings of V Encontro para o Processamento
Computacional da Língua Portuguesa Escrita e Falada (PROPOR2000). Atibaia,
Brasil, 19-22 de novembro de 2000.
[MII1994] MIIKE, Seiji et alli. A full-text retrieval system with a dynamic abstract generation
function.
In:
SPECIAL
INTEREST
GROUP
ON
INFORMATION
RETRIEVAL, SIGIR, VII. Proceedings. London: Springer-Verlag. 1994.
60
[MON2000] MONTILHA, Gisele; Bonfante, Andréia G.; Martins, Ronaldo T.; Nunes, Maria das
G.V. Minigramática. USP, São Carlos: Núcleo Interinstitucional de Linguística
Computacional, 2000. Capturado em Maio de 2001. Disponível na Internet em:
http://nilc.icmc.sc.usp.br/minigramatica
[MOU1992] MOULIN, Bernard; ROUSSEAU, Daniel. Automated knowledge acquisition from
regulatory texts. IEEE Expert. Out 1992.
[NAG1998] NAGAO, K.; KÔITI, H. Automatic Text Summarization Based on the Global
Document Annotation. Montreal, Quebec, Canadá: COLING, ACL’98 – 36th
Annual Meeting of the Assoc. for Comp. Linguistics and 17th Intern. Conf. On
Comp. Linguistics, 1998. Proceedings. V. II, p. 917-921.
[NUN1999] NUNES, Pedro. Dicionário de Tecnologia Jurídica. 13.ª ed., ver., ampl. e atual. por /
Artur Rocha – Rio de Janeiro: Renovar, 1999.
[SAG1995] SAGGION, Horácio; CARVALHO, Ariadne. Análise textual visando a tradução
automática. Anais. XXII Seminário Integrado de Software e Hardware, XXI
Conferência Latino-Americana de Informática. Canela, RS, 31 de Julho a 4 de
Agosto de 1995.
[SHA1991] SHASTRI, L., “Why Semantic Networks ?”, in Sowa, J.F.,“Principles of Semantic
Networks-Explorations in the Representation of Knowledge”, Morgan
Kaufmann Publishers, Inc., 1991.
[SIL1998] SILVA, Helena de Fátima Nunes, BUFREM, Leilah Santiago. A biblioteca entre o
subjetivo e a metáfora. Transinformação, Campinas, v.10, n.1, 1998.
[STO1997] STORB, B. H.; WAZLAWICK, R. S. Etiquetagem Automática de Textos no Mundo
dos Autores. LSC-INE-UFSC - Laboratório de Sistemas de Conhecimento.
Capturado
em
Agosto
de
2001.
Disponível
na
Internet
http://www.lsc.ufsc.br/soo/bernd/tagger.html
[TER1992] TERRA, Ernani. Curso Prático de Gramática. Editora Scipione; São Paulo 1992.
61
em:
[VIC1992] VICKERY, B. C. Letters. Journal of Documentation, v. 48, n. 3, p. 327, mar. 1992.
[WAT1986] WATERMAN, D.A., “A Guide to Expert Systems”, Addison-Wesley Publishing
Company, 1986.
[WIE1996] WIEBE, Janyce; HIRST, Graeme; HORTON, Diane. Language use in context.
Communications of the ACM, v.39, n.1, Jan 96.
[WIV1999] WIVES, Leandro Krug; LOH, Stanley. Tecnologias de descoberta de conhecimento
em informações textuais. In: OFICINA DE INTELIGÊNCIA ARTIFICIAL
(OIA), III, 1999, Pelotas, RS. Proceedings. Pelotas: EDUCAT, 1999.
62
ANEXO 1: MANUAL DO SISTEMA
RALP
Manual do Usuário
64
O sistema R.A.L.P. possui na sua tela de entrada (Figura 1) um campo de edição,
onde o usuário deverá informar o caminho e nome do arquivo texto que deverá ser processado.
Possui também os botões <Enviar > e <Cancelar>.
O botão <Cancelar> serve apenas para limpar o conteúdo do campo de edição e,
conseqüentemente, não processar arquivo algum.
Ao clicar botão <Enviar>, o sistema abre o arquivo texto especificado pelo usuário e
processa as entradas deste arquivo, num formato <palavra>_<etiqueta>, aplicando o procedimento
desenvolvido neste trabalho.
De acordo com tal procedimento, o sistema analisa as palavras e verifica se elas
fazer parte de uma locução prepositiva; Em caso afirmativo, esta palavras são, então, substituídas
por esta locução prepositiva no arquivo de saída.
O arquivo de saída é um arquivo texto com o mesmo nome do arquivo de entrada
digitado pelo usuário, porém com a extensão ‘new’. Este arquivo nada mais é do que uma cópia do
arquivo de entrada, mas com as locuções prepositivas já detectadas e devidamente etiquetadas.
Caso o arquivo de entrada tenha sido processado e o arquivo de saída criado com
sucesso, a saída do sistema para o usuário se concretiza em uma tela (Figura 2) informando que o
arquivo novo foi gerado com sucesso e identificando as locuções prepositivas encontradas.
Em caso de ocorrência de alguma falha no arquivo de entrada ou de saída, será
apresentada na tela (Figura 3) uma mensagem informando que o arquivo especificado não pôde ser
processado e nenhum arquivo foi gerado.
65
Tela de entrada
66
Tela de saída
67
Tela de erro.
68
ANEXO 2: BASE DE DADOS
69
Base de Dados – Locuções Prepositivas
abaixo de
à borda de
à busca de
a caminho de
a cargo de
acerca de
acima de
à conta de
à custa de
a despeito de
adiante de
à direita de
à disposição de
à distância de
à espera de
à esquerda de
à exceção de
a favor de
a fim de
à flor de
à força de
à frente de
além de
a mando de
à maneira de
à margem de
à mercê de
a nível de
antes de
ao através de
ao cabo de
ao contrário de
ao encontro de
ao fim de
ao invés de
ao lado de
ao largo de
ao longo de
ao mando de
ao modo de
ao nível de
ao par de
ao pé de
ao peso de
ao redor de
aos cuidados de
ao termo de
a par de
a partir de
apesar de
a peso de
a poder de
a ponto de
à procura de
a propósito de
a respeito de
às custas de
à sombra de
à tona de
atrás de
através de
a ver com
à vista de
à volta com
à volta de
cerca de
com base em
com relação a
com respeito a
com risco de
com vista a
com vistas a
da parte de
de acordo com
debaixo de
de conformidade com
de cima de
de dentro de
de encontro a
de fora de
de forma a
defronte de
de jeito a
de maneira a
de modo a
de molde a
dentro de
dentro em
de par com
depois de
de trás de
devido a
diante de
do lado de
em apoio a
em apoio de
em atenção a
embaixo de
em benefício de
em busca de
em caso de
em cima de
em comparação com
em conformidade com
em contraste com
em decorrência de
em face a
em face de
em favor de
em forma de
em frente a
em frente de
em função de
em lugar de
em meio a
em meio de
em oposição a
em prol de
em redor de
em relação a
em roda de
em termos de
em torno a
em torno de
em troca de
em vez de
em via de
em vias de
em virtude de
em vista de
em volta de
face a
fora de
graças a
junto a
junto com
junto de
longe de
70
na base de
na conformidade de
na conta de
no alto de
no caso de
no centro de
no fim de
no fundo de
no meio de
nos arredores de
no sentido de
para além de
para baixo de
para cima de
para cima de
para com
para debaixo de
para dentro de
para fora de
para o lado de
para trás de
pelo meio de
perto de
por baixo de
por causa de
por cima de
por conselho de
por conta de
por debaixo de
por dentro de
por detrás de
por diante de
por entre
por fora de
por força de
por mando de
por meio de
por menos de
por motivo de
por ocasião de
por trás de
por via de
por volta de
relativamente a
sem embargo de
sob pena de
Base de Dados – Elementos de LP (Núcleos)
abrigo
acerca
acima
acordo
adiante
além
alto
antes
apesar
apoio
aquém
arredores
até
atenção
atrás
através
baixo
base
benefício
bocadinho
borda
busca
cá
cabo
caminho
cargo
caso
caso
causa
centro
cerca
cima
coberto
comparação
conformidade
conselho
conta
contrário
contraste
cuidados
culpa
custa
custas
debaixo
decorrência
defronte
dentro
depois
despeito
detrás
devido
diante
direita
disposição
distância
embaixo
embargo
encontro
entre
escondidas
espera
esquerda
exceção
face
favor
fim
flor
fora
força
forma
frente
função
fundo
gênero
graças
intenção
interior
intuito
invés
jeito
junto
lá
lado
largo
longe
longo
lugar
mandado
mando
maneira
margem
meio
menos
mercê
mistura
modo
molde
motivo
nível
obstante
ocasião
oposição
par
para
parte
partir
pé
pena
perto
peso
poder
ponto
procura
prol
propósito
quanto
redor
relação
relativamente
respeito
risco
roda
sabor
sentido
sombra
termo
termos
tona
torno
trás
troca
ver
vez
via
vias
virtude
vista
vistas
volta
vontade
Base de Dados – Verbos Transitivos Indiretos (VTI)
Com “a”:
agradar
aludir
aspirar
assistir
custar
desobedecer
obedecer
proceder
querer
responder
revidar
visar
Com “com”:
antipatizar
deparar
implicar
simpatizar
Com “de”:
abster-se
esquecer-se
lembrar-se
proceder
Com “por”:
chamar
torcer
Com “em”:
consistir
sobressair
Base de Dados – Advérbios
abaixo
acaso
acima
acolá
adiante
adrede
afinal
afora
agora
aí
ainda
além
alerta
algures
alhures
ali
aliás
amanhã
amiúde
anteontem
antes
aonde
apenas
aquém
aqui
assaz
assim
atrás
através
avante
bastante
bem
breve
brevemente
cá
calmamente
cedo
certamente
certo
como
completamente
comumente
concomitantemente
debalde
decerto
defronte
demais
demasiadamente
demasiado
dentro
depois
depressa
detrás
devagar
deveras
diariamente
donde
efetivamente
então
entrementes
excessivamente
finalmente
fora
hoje
imediatamente
incontestavelmente
já
jamais
lá
levemente
ligeiramente
livremente
logo
longe
mais
mal
meio
melhor
menos
mui
muito
nada
não
nenhures
nisto
nunca
onde
ontem
ora
outrora
perto
pior
porventura
pouco
presentemente
profundamente
propositadamente
provavelmente
quanto
quão
quase
que
quiçá
raramente
realmente
selvagemente
sempre
sim
simultaneamente
talvez
tampouco
tão
tarde
todo
ANEXO 3: FONTES “HTML” E “C”
Fonte do HTML
<HTML><HEAD><TITLE>
R.A.L.P. - Reconhecedor Automático de Locuções
Prepositivas</TITLE>
</HEAD>
<BODY background = "molhes3.jpg">
<CENTER>
<FONT SIZE=6 COLOR="#000068"><B>R.A.L.P.</B></FONT><br>
<h1 align="center"><FONT SIZE=4 COLOR="#000088"><B>Reconhecedor
Automático de Locuções Prepositivas
</B></font></h1>
<FORM method = "GET" action= "ralp.cgi">
<table border="2" width="94%">
<TR>
<TD font size = 2>
<P ALIGN="CENTER">
<TABLE BORDER=0>
<TR>
<TD WIDHT=650><FONT SIZE=3 COLOR="#000088"><STRONG>
Informe o caminho para o texto de entrada:
</STRONG></FONT></TD>
<TD><INPUT TYPE="text" NAME="caminho" SIZE=30">
</TD>
</TR>
</TABLE>
</P>
<center>
<input type="submit" value="Enviar">
<input type="reset" value="Limpar">
</TD></TR>
</TABLE>
</FORM>
</BODY></HTML>
74
Fonte do CGI em linguagem C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {char palavra[50]; char etiqueta[5];} conjunto;
typedef struct {char anterior[20]; char nucleo[50]; char
posterior[20];} locucao;
typedef struct {char palavra[50];} verbo;
char *caminho;
conjunto vet_entrada[5000],vet_saida[5000];
locucao vet_lp[1000];
verbo vet_verbo[200];
FILE *arq_base, *arq_saida;
int total, nr_verbos, nr_lps;
void Limpa_Vetores()
{
int i;
for (i = 0; i < 5000; i++)
{
strcpy(vet_entrada[i].palavra, "\0");
strcpy(vet_entrada[i].etiqueta, "\0");
}
for (i = 0; i < 1000; i++)
{
strcpy(vet_lp[i].anterior, "\0");
strcpy(vet_lp[i].nucleo, "\0");
strcpy(vet_lp[i].posterior, "\0");
}
for (i = 0; i < 200; i++)
{
strcpy(vet_verbo[i].palavra, "\0");
}
}
int Verifica_Nucleo(char palavra[50])
{
int i;
for (i=0; i < nr_lps;i++)
{
if (strcmp(palavra,vet_lp[i].nucleo) == 0)
{
return (i);
}
}
return(-1);
}
75
void Monta_Base_Verbos ()
{
char palavra_ent[50];
int j, tam;
arq_base=fopen("verbos.txt","r");
j = 0;
//Varre o arquivo de verbos e coloca na estrutura
while (!feof(arq_base))
{
fgets( palavra_ent, 60, arq_base);
palavra_ent[strlen(palavra_ent)-1]='\0';
tam = strlen(palavra_ent);
if (tam == 0)
break;
strcpy(vet_verbo[j].palavra, palavra_ent);
printf("%s\n", vet_verbo[j].palavra);
strcpy(palavra_ent, "\0");
j++;
//
}
nr_verbos = j;
}
void Monta_Base_Locucoes ()
{
char palavra_ent[30];
char carac;
int j, i, pos, tam, cont;
arq_base=fopen("lps.txt","r");
j = 0;
//Varre o arquivo de locucoes Prepositivas e coloca na estrutura
while (!feof(arq_base))
{
fgets( palavra_ent, 60, arq_base);
palavra_ent[strlen(palavra_ent)-1]='\0';
tam = strlen(palavra_ent);
if (tam == 0)
break;
cont = 0;
//conta o numero de espacos na linha do arquivo para ver o nro
de palavras
for (i = 0; i < tam; i++)
{
carac = palavra_ent[i];
if (carac == ' ')
cont++;
}
pos=0;
76
//Coloca Preposicao inicial da locucao na estrutura (se
existir)
if (cont == 2)
{
pos = strcspn(palavra_ent, " ");
strncpy(vet_lp[j].anterior, palavra_ent, pos);
strcpy(palavra_ent, palavra_ent +pos+1);
}
//Coloca Nucleo da locucao na estrutura
pos = strcspn(palavra_ent, " ");
strncpy(vet_lp[j].nucleo, palavra_ent, pos);
strcpy(palavra_ent, palavra_ent +pos+1);
//strncpy(vet_lp[j].posterior, palavra_ent, pos);
strcpy(vet_lp[j].posterior, palavra_ent);
//
//
//
printf("%s ", vet_lp[j].anterior);
printf("%s ", vet_lp[j].nucleo);
printf("%s\n", vet_lp[j].posterior);
strcpy(palavra_ent, "\0");
j++;
}
nr_lps = j;
}
void Separa_Palavra_Etiqueta()
{
char palavra_ent[50];
int i, pos;
caminho = getenv("QUERY_STRING");
caminho = caminho + 8;
arq_base=fopen(caminho,"rt");
if (arq_base == NULL)
{
printf("<FONT COLOR=\"#000068\"><center><h2><BR>O arquivo
especificado não pôde ser processado.<br></h2>");
printf("<h2>Nenhum arquivo foi gerado.<br></h2></center>");
exit(1);
}
printf("<FONT COLOR=\"#000068\"><h2>Texto: %s</h2>",caminho);
printf("<h2>Listagem das Locuções Prepositivas</h2>");
// strcat(path,caminho);
total = 0;
//Varre o arquivo de Palavras etiquetadas e coloca na estrutura
while (!feof(arq_base))
{
fscanf(arq_base,"%s",palavra_ent);
pos = strcspn(palavra_ent, "_");
strncpy(vet_entrada[total].palavra, palavra_ent, pos);
77
vet_entrada[total].palavra[pos]=0;
i = 0;
while (palavra_ent[pos] != '\0')
{
pos++;
vet_entrada[total].etiqueta[i] = palavra_ent[pos];
i++;
}
//
//
printf("%s ", vet_entrada[total].palavra);
printf("%s\n", vet_entrada[total].etiqueta);
total++;
}
}
int main()
{
int achei, i, j, existe, posicao_nucleo, posicao;
int numlp=0;
char palavra_ant[50], palavra_post[50], etiqueta_ant[5],
etiqueta_post[5];
char palavra_ant_2[50], etiqueta_ant_2[5], locucao_prepositiva[90];
char caminho_novo[15];
//clrscr();
printf("Content-type: text/html%c%c",10,10);
printf("\n<html><head><TITLE> RALP </TITLE>");
printf("\n</head>");
printf("<BODY background = \"molhes3.jpg\">");
printf("<FONT COLOR=\"#000068\"><b>");
Limpa_Vetores();
Monta_Base_Verbos();
Monta_Base_Locucoes();
Separa_Palavra_Etiqueta();
for (i = 0; i< total; i++)
{
achei = 0;
existe = 0;
//Se P pode ser nucleo de locucao prepositiva entao
posicao_nucleo = Verifica_Nucleo(vet_entrada[i].palavra);
if (posicao_nucleo != -1)
{
if (i+1 <= total)
{
strcpy(palavra_post, vet_entrada[i+1].palavra);
strcpy(etiqueta_post, vet_entrada[i+1].etiqueta);
}
else
{
strcpy(palavra_post, "\0");
strcpy(etiqueta_post, "\0");
}
// Se EP = PR e PP = a, de ou com entao
78
if ((strcmp(etiqueta_post, "PR") == 0) &&
((strcmp(palavra_post, "a")
== 0) ||
(strcmp(palavra_post, "de") == 0) ||
(strcmp(palavra_post, "com")
== 0)) )
{
if (i-1 >= 0)
{
strcpy(palavra_ant, vet_entrada[i-1].palavra);
strcpy(etiqueta_ant, vet_entrada[i1].etiqueta);
}
else
{
strcpy(palavra_ant, "\0");
strcpy(etiqueta_ant, "\0");
}
// Se EA = PR e PA = a, de, com, em, para, por ou sem
entao P eh do tipo 2
if ((strcmp(etiqueta_ant, "PR") == 0) &&
((strcmp(palavra_ant, "a")
== 0) ||
(strcmp(palavra_ant, "de") == 0) ||
(strcmp(palavra_ant, "com")
== 0) ||
(strcmp(palavra_ant, "em") == 0) ||
(strcmp(palavra_ant, "para")
== 0) ||
(strcmp(palavra_ant, "por") == 0) ||
(strcmp(palavra_ant, "sem")
== 0)) )
{
if (i-2 >= 0)
{
//se verbo anterior nao pede preposicao entao
for (j = 0; j<= nr_verbos; j++)
if (strcmp(vet_entrada[i2].etiqueta, "VB") == 0)
if
(strcmp(vet_entrada[i-2].palavra, vet_verbo[j].palavra) == 0)
existe = 1;
}
if (existe == 0)
achei = 2;
}
else
{
if (i-2 >= 0)
{
strcpy(palavra_ant_2, vet_entrada[i2].palavra);
strcpy(etiqueta_ant_2, vet_entrada[i2].etiqueta);
}
79
else
{
strcpy(palavra_ant_2, "\0");
strcpy(etiqueta_ant_2, "\0");
}
//se for artigo
if
(strcmp(etiqueta_ant, "AR") == 0)
{
// Se EA2 = PR e PA2 = a, de, com, em,
para, por ou sem entao P eh do tipo 2
if ((strcmp(etiqueta_ant_2, "PR") == 0)
&& ((strcmp(palavra_ant_2,
"a") == 0) ||
(strcmp(palavra_ant_2, "de") ==
0) || (strcmp(palavra_ant_2,
"com") == 0) ||
(strcmp(palavra_ant_2, "em") ==
0) || (strcmp(palavra_ant_2,
"para") == 0) ||
(strcmp(palavra_ant_2, "por")
== 0) || (strcmp(palavra_ant_2,
"sem") == 0)) )
{
if (i-3 >= 0)
{
//se verbo anterior nao
pede preposicao entao
for (j = 0; j<=
nr_verbos; j++)
if
(strcmp(vet_entrada[i-3].etiqueta, "VB") == 0)
if
(strcmp(vet_entrada[i-3].palavra, vet_verbo[j].palavra) ==
0)
existe
= 1;
}
if (existe == 0)
achei = 3;
}
}
else
{
// se nao ha adverbio antes entao
if (strcmp(etiqueta_ant, "AD") != 0)
achei = 1;
}
}
}
}
if (achei == 1) //reconhecer P_PP como locucao prepositiva
{
strcpy(locucao_prepositiva, vet_entrada[i].palavra);
strcat(locucao_prepositiva, "_");
80
strcat(locucao_prepositiva, vet_entrada[i+1].palavra);
strcat(locucao_prepositiva, "_LP");
printf("<br>%s\n", locucao_prepositiva);
strcpy(vet_saida[i].palavra, locucao_prepositiva);
i++; numlp++;
}
else if (achei == 2) //reconhecer PA_P_PP como locucao
prepositiva
{
strcpy(locucao_prepositiva, vet_entrada[i1].palavra);
strcat(locucao_prepositiva, "_");
strcat(locucao_prepositiva,
vet_entrada[i].palavra);
strcat(locucao_prepositiva, "_");
strcat(locucao_prepositiva,
vet_entrada[i+1].palavra);
strcat(locucao_prepositiva, "_LP");
printf("<br>%s\n", locucao_prepositiva);
strcpy(vet_saida[i-1].palavra,
locucao_prepositiva);
i++; numlp++;
}
else if (achei == 3) //reconhecer PA2_PA_P_PP
como locucao prepositiva
{
strcpy(locucao_prepositiva,
vet_entrada[i-2].palavra);
strcat(locucao_prepositiva, "_");
strcat(locucao_prepositiva,
vet_entrada[i-1].palavra);
strcat(locucao_prepositiva, "_");
strcat(locucao_prepositiva,
vet_entrada[i].palavra);
strcat(locucao_prepositiva, "_");
strcat(locucao_prepositiva,
vet_entrada[i+1].palavra);
strcat(locucao_prepositiva, "_LP");
printf("<br>%s\n",
locucao_prepositiva);
strcpy(vet_saida[i-2].palavra,
locucao_prepositiva);
strcpy(vet_saida[i-1].palavra, "\0");
i++; numlp++;
}
else
{
strcpy(vet_saida[i].palavra,
vet_entrada[i].palavra);
strcat(vet_saida[i].palavra, "_");
strcat(vet_saida[i].palavra,
vet_entrada[i].etiqueta);
}
81
}
printf("<br><hr></b>");
printf("<br>Foram encontrados: <ul> <li> %d itens lexicais",total);
printf("<li> %d LPs</ul>",numlp);
posicao = strcspn(caminho, ".");
strncpy(caminho_novo, caminho, posicao);
caminho_novo[posicao]=0;
strcat(caminho_novo, ".new");
printf("Novo arquivo de etiquetagem: <font
size=+1>%s</font>",caminho_novo);
arq_saida=fopen(caminho_novo,"wt");
if (arq_saida == NULL)
{
printf("<FONT COLOR=\"#000068\"><center><h2><BR>O arquivo
especificado não pôde ser processado.<br></h2>");
printf("<h2>Nenhum arquivo foi gerado.<br></h2></center>");
exit(1);
}
for (i = 0; i<total; i++)
if (strlen(vet_saida[i].palavra) > 0)
fprintf(arq_saida, "%s\n", vet_saida[i].palavra);
printf("\n<form><center><input type=\"button\" value=\"Retornar\" ");
printf("onClick=\"location='index.html'\"></center></form>");
printf("</body></html>");
}
82
1
Download