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