EIAGIME II Encontro Internacional dos Alunos de Graduação do IME-USP Processamento de Linguagens Naturais pondo em prática William Daniel Colen de Moura Silva – http://www.ime.usp.br/colen Engenharia da Computação – Poli-USP – 2006 Mestrando – Ciência da Computação – IME-USP Orientador – Prof. Dr. Marcelo Finger Desenvolvedor do Corretor Gramatical CoGrOO – http://cogroo.sf.net Agenda ● ● Primeiro dia – Motivação – Sistemas PLN Segundo dia – Componentes e arquitetura de um sistema PLN Agenda ● Terceiro dia – Como definir uma gramática – Métodos estatísticos ● – ● N-Grama e Entropia Máxima A API do CoGrOO e do OpenNLP Quarto dia – Desafio – implementar um programa com processamento de linguagem Processamento de Linguagens Naturais (PLN) Computadores executando tarefas interessantes que envolvam linguagem humana Comunicação homem-máquina Melhorar comunicação homem-homem etc Exemplo: Agente de Conversação HAL 9000 HAL 9000: computador do filme “2001: Uma Odisseia no Espaço”, de Stanley Kubrick, 1968 ● Conversa fluente em inglês Reconhecimento de voz, interpretação de linguagem natural ● Leitura de lábios Planejamento de diálogo e síntese de voz Arthur C. Clarke estava otimista de quando teríamos um sistema de diálogo como o HAL 9000. Mas quanto longe estamos disso? Exemplo: tradução automática Babel Fish é uma espécie fictícia na série O Guia do Mochileiro das Galáxias (1978), de Douglas Adams. ● ● ● Traduz instantaneamente de qualquer linguagem para qualquer linguagem. Seria factível um sistema que fizesse o mesmo que o Babel Fish? Imagine poder traduzir para o nosso idioma as centenas de milhares de páginas Web que estão originalmente em idiomas que não dominamos, como o chinês, por exemplo? Exemplo: Sistema de respostas Buscar usando palavras chave Fácil para os buscadores atuais ● O que significa “procrastinar”? ● Em que ano a USP foi fundada? ● Requer resolução de inferências, síntese e resumo de informações de diversas fontes. Fazer uma pergunta completa ● ● Quantos cursos eram oferecidos na Universidade naquele ano? Quanta seda chinesa foi exportada para a Inglaterra no final do século 18? O que os cientistas pensam a respeito da clonagem humana? Outros exemplos ● Correção ortográfica ● Verificador gramatical ● Sumarização automática ● Categorização de textos ● Busca na Web usando ontologias Conhecimento em Processamento de Linguagem Processador de dados Processador de linguagem Conhecimento da língua ● Programa Unix “wc” - conta total de bytes, palavras e linhas de um arquivo texto. – Bytes e linhas → processador de dados – Palavras → processador linguístico Dave Bowan: Open the pod bay doors, HAL. HAL: I'm sorry Dave, I'm afraid I can't do that. HAL reconhece palavras em um sinal de áudio e gera áudio a partir de sequências de palavras Reconhecimento de voz Fonética e Fonologia Síntese de voz Contrações: I'm, I can't Interpreta variações: doors (plural) HAL deve saber que “I'm I do, sorry that afraid Dave I'm can't.” não teria sentido para Dave Morfologia Sintaxe Quanta seda chinesa foi exportada para a Europa Ocidental no final do século 18? Semântica das palavras Composição semântica Significado de “exportada” ou “seda” Europa Ocidental Europa Oriental Sul da Europa Significado de “final” quando combinado a “século 18” Ordem, afirmação ou pergunta? HAL ainda deve interpretar o que Dave deseja com a sentença – Ordem: HAL, open the pod bay door. – Afirmação: HAL, the pod bay door is open. – Pergunta: HAL, is the pod bay door open? HAL é bem educado no uso do idioma: – I'm sorry, I'm afraid – I can't (no lugar de I won't) Pragmática (ou etiqueta do diálogo) Quantos cursos eram oferecidos na Universidade naquele ano? Resolução de referências “naquele ano” → temos que examinar perguntas já respondidas para determinar que falamos do ano em que a USP foi fundada. Ambiguidade: problema fundamental de PLN ● “O sr. Mendonça chegou.” – ● “Quem casa quer casa.” – ● em “sr.”, o ponto marca fim de sentença? quando “casa” é verbo ou substantivo? “Eu preparei o pato dela.” – Eu cozinhei o pato dela. – Eu fiz o pato (de plástico?) dela. Aplicações: busca semântica http://www.wolframalpha.com/input/?i=What+year+was+Lula+born%3F Aplicações: busca semântica http://www.powerset.com/explore/go/What-year-Elvis-Presley-died? Aplicações: busca semântica http://www.google.com/squared/search?q=tea Aplicações: tradução automática http://translate.google.com/translate_s?hl=en&clss=&q=ciência+da+computação&tq=&sl=pt&tl=zh-CN OpenCalais: rede semântica http://viewer.opencalais.com/ Reconhecimento de voz ● Exemplo: sistema 102 ● Softwares: – CMUSphinx - Carnegie Mellon University Sphinx - http://cmusphinx.sourceforge.net precisa de treinamento – IBM ViaVoice http://www.nuance.com/viavoice - Alemão, Francês, Japonês, Inglês britânico e a americano Aplicações: corretor gramatical Obrigado pela atenção! http://www.ime.usp.br/colen http://cogroo.sourceforge.net http://ccsl.ime.usp.br Origens ● 1ª grande tarefa → Tradução automática – início da década de 50 – Um equívoco – TA requer tratamentos sofisticados em todos o níveis de PLN – TA foi relegado a um segundo plano por várias décadas ● ● ● Tecnologia insuficiente Ingenuidade científica Decepção Grande sacada ● ● Subdividir as tarefas em modelos ou teorias mais simples Muitas dessas tarefas já eram conhecidas e solucionadas por ferramentas já existentes: – Autômatos – Sistemas de regras – Lógicas – Modelos probabilísticos (e outros) Estratificação de Tarefas ● ● Pré-processamento (subdividir o texto) – identificação de unidades fonéticas, lexicais, – gramaticais, semânticas ou discursivas Classificar (etiquetar) – morfossintáticas (PoS-tagger) – sintáticas (Parser) – semânticas (Parser Semântico ou Interpretador) – discursivas (Parser discursivo) – Tipos de etiquetas: símbolos (ADJ, NOM, etc.), estruturas (árvore sintática), relações (semânticas ou retóricas) Tarefas de Pré-processamento Fonético-fonológico ● Fonologia → efeito acústico das formas sonoras da língua ● Fonética → descrição dos sons da fala e como esses sons são reconhecidos e produzidos ● Unidade mínima: fonema – Vogais, consoantes e semivogais Fonético-fonológico: aplicação Síntese de fala Registro oral é saída Análise de fala Registro oral é entrada Fonético-fonológico: complexidade ● Variação de timbre segundo características regionais – ● ● No Nordeste /e/ e /o/ em posição pré-tônica são abertas, mas no Sul e Sudeste fechadas: feriado, coração Posição na palavra: xadrez, êxodo, inox. Homófonas – mesma forma, diferente significado: – cem / sem – voz / vós Delimitador de sentenças ● Critério heurístico para tratamento de pontuação: – Separadores absolutos – ponto final, ponto de exclamação e de interrogação – sempre separa – Separadores não relativos – virgula – não separa – Separadores relativos unários – ponto e vírgula, dois pontos, reticências, travessão único – separa se tanto texto que precede como o que segue contenha verbo finito – Separadores relativos binários – parênteses, travessão duplo – separa se tanto texto interior quanto exterior contenham verbo finito Delimitador de sentenças: problemas ● Difícil determinar durante o préprocessamento se a palavra é um verbo finito ● Abreviaturas: “O sr. Afonso chegou.” ● Sequências especiais: URLs, números etc. – O meu e-mail é [email protected]. – O prêmio é de R$ 55.000,00. Tarefas de Classificação Morfologia ● Morfemas – Objeto de estudo da Morfologia – Unidades mínimas dotadas de significado (gramatical ou lexical) – Carregam o mecanismo de flexão – indicam gênero, número e conjugação (pessoa, número, tempo, modo, aspecto etc) Morfológicas ● Morfemas gramaticais – Definem marcadores da flexão das palavras ● – pedra: indica nomes terminados em “-a” – macaca: indica gênero feminino – procuramos: “-a” indica a primeira conjugação verbal, “-mos” indica primeira pessoa do plural do presente do indicativo Morfemas lexicais – Elementos associados a uma base de formação de novas palavras – operação: indica evento – incerto: indica negação Sintáticas ● Organização das palavras → define funções gramaticais – ● ● Distribuição das palavras não pode ser aleatória para o que o texto tenha sentido completo Categorias → sujeito, objeto direto, complemento nominal, adjunto adverbial etc Classes gramaticais → substantivo, verbo, adjetivo, pronome, numeral Sintáticas: processo 1. Determinar as classes gramaticais e as categorias das palavras de acordo a sequência que apareceram no texto 2. Aplicar regras sintáticas para tornar as sentenças bem formadas Sintáticas: exemplos ● Considere “Ela foram a padaria hoje cedo.” – – Traços sintáticos dos itens lexicais ● ela → sujeito, pronome pessoal [singular] ● foram → verbo [de movimento] ● a padaria → objeto indireto ● hoje cedo → adjunto adverbial de tempo Regras para especificação de uma sentença bem formada ● ● ● Concordância verbal obrigatória entre sujeito e verbo Emprego da crase obrigatório em complementos preposicionados do verbo (objeto indireto) Com estas informações: “Elas foram à padaria hoje cedo.” Sintáticas: estrutura argumental ● ● Aplicável principalmente aos verbos Caracteriza o número e os tipos de argumentos exigidos – pai exige um argumento → objeto é pai de alguém “meu pai está atrasado para o almoço” – gostar exige dois argumentos, o último requer preposição “Benedito gosta de quiabo com pimentão” Sintáticas: papel temático ● Aplicável aos verbos ● Confere características aos argumentos “Aquele rapaz encontrou uma chave na rua.” – aquele rapaz → agente – uma chave → paciente Semânticos ● Diversos níveis possíveis: partes da palavra → palavra → sentença ● ● Dois tipos: – Traços semânticos → sentido da palavra – Conhecimento ontológico → objeto no mundo Exemplos – Homem → entidade, concreta, animada, humana, macho – Mulher → entidade, concreta, animada, humana, fêmea – Grávida → propriedade, abstrata, humana, [ligada à] fêmea – Prenha → propriedade, abstrata, não-humana, [ligada à] fêmea Pragmáticos-discursivos ● Se preocupa em responder (que estão além das preocupações de PLN): – ● ● Quem são os sujeitos envolvidos na situação discursiva? O que querem dizer esses sujeitos? Qual é o contexto da enunciação? PLN tem foco no texto, e não do discurso. Procura olhar os marcadores discursivos e relações de coesão e coerência textual Especialmente: manter coerências entre o texto em análise e o que já foi descrito no decorrer do discurso quanto as referências (ele, isso etc) e o contexto (hoje, daqui a pouco, lá etc) Arquitetura de um Sistema PLN ● Depende das especificidades da aplicação ● Tradutor automático: completo (e complexo) (a) Extrair cada uma das palavras da sentença em português; Interpretação (b) Analisar sintaticamente a sentença; (c) Analisar semanticamente a sentença; Geração (d) Mapear o significado extraído em uma representação adequada; (e)Transformar a representação anterior em uma sentença na língua de destino. Arquitetura de um Sistema PLN Vários sistemas possuem apenas uma das fases ● Sistema de consulta a base de dados, sistema gerador de respostas – ● Sistemas desse tipo apenas geram texto, precisam transformam o formato interno (banco de dados, conhecimento) em texto legível. Revisores gramaticais – Precisa apenas extrair a estrutura sintática do texto Arquitetura de um Sistema PLN ● ● Interpretação – Complexo pois sistema deve estar preparado para todo tipo de texto. – A complexidade é proporcional à complexidade da língua Geração – Mais simples pois se pode restringir o sistema: por exemplo fixar o uso da voz passiva (não é verdade para tradutores!) Arquitetura: Interpretação Sentença Léxico Analisador Léxico Tokens com traços Analisador Sintático Gramática Estrutura Sintática Interpretação Modelo do Domínio Analisador Semântico Representação Semântica Analisador do Discurso Representação Semântica Estendida Analisador Pragmático Modelo do Usuário Representação do Conteúdo e dos Objetos Comunicativos Analisadores Léxico: Responsável pela identificação e separação dos tokens, e também por associar atributos ou traços gramaticais e/ou semânticos aos tokens. Sintático: Recupera a estrutura sintática. Precisa de um modelo da língua, em geral parcial, apenas com as construções válidas de interesse para a aplicação. Semântico: Interpretação de componentes da sentença ou da sentença como um todo. Discurso: Resolve referências do texto em análise com o resto já analisado (por exemplo: ele, ela, este, aquela ou ainda: a menina refererindo-se a Amélia) ou ainda extratextuais (aqui, ali, hoje). Ambiguidade “É o pote creme de molho inglês.” ● Requer um modelo do mundo para decidir qual interpretação é correta: “o pote de cor creme contém molho inglês” ou “o pote é creme de molho inglês”. “O menino viu o homem de binóculo.” ● Ambiguidade sintática: o menino usa o binóculo ou o homem? “João procura um banco.” ● Ambiguidade lexical: procura um banco financeiro ou um lugar para se sentar? “João ganhou um binóculo do seu pai. O menino viu o homem de binóculo.” ● O sistema poderia resolver a ambiguidade usando um analisador de discurso. Arquitetura de um Sistema PLN Gerador ● ● Muitas vezes é feita a justaposição de partes pré-definidas Outras vezes são usados canned texts, que são textos definidos, mas com uma parte variável que só é determinada em tempo de processamento Interpretação: Geração Modelo de Domínio Modelo do Usuário Recursos Retóricos/Modelo do Discurso Gramática Seleção Planejamento Realização Texto Objetos Comunicativos Léxico Geradores Seleção do conteúdo: Selecionar os itens de conhecimento que deverão fazer parte do texto. O Modelo do Usuário determina a quantidade de informação necessária. Planejamento do texto: Adiciona especificações retóricas, determina a sequência em que as informações serão apresentadas e algumas vezes escolhe as palavras que serão usadas. A saída é o plano do texto. Realização do texto: realização gramatical do texto produzido pelo planejador. Dois processos distintos: determinação dos itens linguísticos e sua linearização. Realização do Texto ● Escolha do vocabulário ● Escolha do estilo (prosa, diálogo etc) ● Escolhas léxicas, morfológicas e sintáticas ● Escolha de figuras de discurso (foco, ênfase etc) ● ● Escolhas que garantam coesão do discurso (uso de uma marca de contraste entre componentes que devem ser contrastados) Decisões de linearização (ordenação das informações, concordância gramatical etc) Obrigado pela atenção! http://www.ime.usp.br/colen http://cogroo.sourceforge.net http://ccsl.ime.usp.br Recursos linguísticos: Léxico ● Conjunto de palavras ou expressões da língua associada Traço comida Categorias Sintáticas token = comer categoria = verbo | substantivo gênero = feminino número = singular token = comer categoria = verbo tempo = particípio passado gênero = feminino número = singular Recursos linguísticos: Gramática ● ● Regras gramaticais definem as cadeias de palavras válidas em uma língua natural Ex.: regras de produção do tipo S → SN SV Para reconhecer uma sentença S reconheça como seus componentes um sintagma nominal, SN, seguido por um sintagma verbal, SV. Uma sentença S pode ser construída por um sintagma nominal, SN, seguida por um sintagma verbal, SV. Modelo do Domínio ● ● Fornece o conhecimento sobre o domínio específico da aplicação Exemplo – senso comum ● ● – ● Homem é mortal animado(homem) Modelo de domínio Geração → correto inter-relacionamento semântico para evitar ambiguidades (manga: fruta x parte de um vestuário) Modelo do Usuário ● ● Modelo do contexto de ocorrência do discurso para determinar como deve ser a estrutura do texto (geração) ou ajuda a identificar o significado textual (análise) Exemplo – quantidade de informação do texto gerado depende do que é relevante para o leitor. Corpus ● ● É uma coleção de textos da linguagem natural (falada ou escrita) que pode ser usado para pesquisas e levantamentos estatísticos do uso do idioma. Podem ou não ter anotações, que poderiam ser geradas manualmente ou automaticamente (revisadas ou não) Corpus ● Usos – Estatísticas de uso da língua – Modelamento das estruturas da língua – Testes de desempenho Exemplo CetenFolha (Corpus de Extractos de Textos Electrónicos NILC / Folha de S. Paulo) SOURCE: CETENFolha n=210 cad="Brasil" sec="pol" sem="94a" CF210-4 Avesso a um tratamento mais técnico de candidatos durante as campanhas eleitorais, Covas protagonizou a mudança mais significativa no horário eleitoral gratuito. A1 STA:fcl =PRED:adjp ==H:adj('avesso' M S)Avesso ==A<:pp ===H:prp('a')a ===P<:np ====>N:art('um' <arti> M S) um ====H:n('tratamento' <np-idf> M S)tratamento ====N<:adjp =====>A:adv('mais' <quant> <KOMP>) mais =====H:adj('técnico' M S) técnico ====N<:pp =====H:prp('de') de =====P<:np ======H:n('candidato' <np-idf> M P) candidatos Testes de desempenho com Corpus 1 2 3 4 Treinamento Treinamento 5 6 7 8 9 10 Treinamento Treinamento Como definir uma gramática em PLN Regras ● ● É possível modelar a gramática do idioma usando gramática livre de contexto (tipo 2) Exemplo: considere a frase “A garota comprou um vestido” Regras S Onde: |______________________ S: Sentença | | SN: Sintagma nominal SN SV SV: Sintagma verbal |___________ |___________ Art: Artigo | | | | Subs: Substantivo | | | SN Verb: Verbo | | | |___________ | | | | | Art Subs Verb Art Subs | | | | | A garota comprou um vestido Regras de produção S ::= SN SV SV ::= Verb SN SN ::= Art Subs Art ::= a | um Subs ::= garota | vestido Verb ::= comprou Regras: dificuldades ● ● As possibilidades de uso do idioma são enormes Seriam necessárias milhares de regras gerativas para modelar de forma significativamente o idioma Regras: exemplo ● Anotador Palavras (Eckhard Bick) – http://beta.visl.sdu.dk/visl/pt/ + 2000 regras N-Grama ● ● N-grama é um modelo da língua, gerado estatisticamente, que tenta advinhar a próxima letra, palavra ou etiqueta de uma sequência de acordo com o que já foi analisado. Modelos da língua em n-gramas são usados em diversas aplicações – Reconhecimento de fala – quando a entrada tem muito ruído, ou quando os sons das palavras são muito similares entre si. – Tradução automática – escolher a melhor sequência de palavras quando existe mais de uma opção correta N-Grama: exemplo “procurar uma casa” ● – procurar → verbo infinitivo – uma → artigo, numeral – casa → verbo presente indicativo, substantivo Qual é a melhor sequência de etiquetas? N-Grama: exemplo ● Dados extraídos do Corpus de treinamento: – procurar ● – uma ● ● – verbo infinitivo (800 ocorrências) artigo (97 mil ocorrências) numeral (12 mil ocorrências) casa ● ● verbo presente indicativo (114 ocorrências) substantivo (6 mil ocorrências) N-Grama: exemplo ● Trigramas extraídos do Corpus: – verbo infinitivo + numeral + substantivo ● – verbo infinitivo + numeral + verbo ● – 31 ocorrências verbo infinitivo + artigo + substantivo ● – 237 ocorrências 46 mil ocorrências Verbo infinitivo + artigo + verbo ● 97 ocorrências N-Grama: exemplo ● ● No CoGrOO 1.0 era atribuída uma nota para cada trigrama de acordo com – Número de ocorrências dos trigramas no Corpus – Número de ocorrências da combinação palavra/etiqueta no Corpus Tagger tinha acerto de 95% N-Grama: dificuldades ● ● Algumas vezes um par palavra etiqueta' correta ocorre até algumas ordens de grandeza a mais que um segundo par palavra etiqueta'': [casa verbo] ocorre 100 vezes e [casa substantivo] 6000 vezes. Como comparar estes dados? O sistema consegue chutar uma etiqueta de acordo com o entorno, mas não leva em consideração características da palavra: por exemplo morfemas lexicais Entropia Máxima ● ● ● Também é um modelo da língua, gerado estatisticamente. Inicialmente não faz nenhuma suposição sobre o texto. Todas as possibilidades tem chances iguais: entropia é máxima. Ao se determinar uma característica do corpo de treinamento, pode acrescentar uma restrição (feature) no sistema na forma. Esta feature altera as chances de cada etiqueta. Novamente se calcula a entropia máxima do sistema. Features são adicionadas até que o sistema esteja bastante próximo do corpo de prova. Entropia Máxima: exemplo “zzfish” Qual é a distribuição de probabilidades que não faz suposição alguma? NN JJ 1/ 45 NNS VB 1/ 1/ 45 45 1/ 45 NNP IN MD UH SYM VBG POS PRP CC CD ... 1/ 45 1/ 45 1/ 45 ... 1/ 1/ 45 45 1/ 45 1/ 45 1/ 45 1/ 45 1/ 45 Entropia Máxima: exemplo ● Suponha que pela análise do Corpus você descobre que as etiquetas possíveis seriam apenas: NN, JJ, NNS e VB NN JJ NNS VB 1/4 1/4 1/4 1/4 P(NN) + P(JJ) + P(NNS) + P(VB) = 1 Entropia Máxima: exemplo ● ● Suponha ainda que pelo Corpus se descobre que 8 a cada 10 ocorrências de “zzfish” eram substantivos feature → palavra é zzfish e t == NN ou t == NNS NN JJ NNS VB 4/10 1/10 4/10 1/10 P(NN) + P(JJ) + P(NNS) + P(VB) = 1 P(palavra é zzfish e t == NN ou t == NNS) = 8/10 Entropia Máxima: exemplo ● ● Agora suponha que uma a cada 20 palavras (não apenas zzfish) no Corpus são verbos. Feature → t == VB NN JJ NNS VB 4/10 3/20 4/10 3/20 P(NN) + P(JJ) + P(NNS) + P(VB) = 1 P(palavra é zzfish e t == NN ou t == NNS) = 8/10 P(VB) = 1/20 Entropia Máxima: OpenNLP ● ● ● O framework OpenNLP permite que se experimente features em textos. Ele consegue determinar quais features são relevantes para a classificação que se quer Ao entrar com novos textos ele aplica estas mesmas features e usando os modelos gerados durante o treinamento sugere as possíveis classificações do texto Entropia Máxima: exemplo ● ● Detector de sentenças – É ponto final? – Tem verbo flexionado? – Palavra que aparece antes e depois. – É abreviatura Detector de palavras – O último caractere da string é um não alfanumérico? – O último caractere da string é um ponto final e não é uma abreviatura conhecida? – A palavra que segue está com letra maiúscula? Entropia Máxima: desempenho ● Etiquetador morfológico do CoGrOO 2.0 aplica Entropia Máxima e atinge 96% de acerto. Obrigado pela atenção! http://www.ime.usp.br/colen http://cogroo.sourceforge.net http://ccsl.ime.usp.br Agradecimentos Prof. MSc. Carlos Eduardo Dantas de Menezes pela revisão dos slides. Prof. Dr. Marcelo Finger pela revisão dos slides e pela ajuda no planejamento do Curso. Prof. Dr. Jorge Kinoshita pela sugestão da bibliografia. Aos professores, pesquisadores e alunos que compareceram ao curso. Obrigado pela atenção e participação Pessoal do CAMAT pelo evento EIAGIME II e pela oportunidade. Bibliografia JURAFSKY, D.; MARTIN, J. H. . Speech and Language Processing. 2. ed.: Pearson, 2008. 1024 p. DIAS DA SILVA, B.C.; MONTILHA, G.; RINO, L.H.M.; SPECIA, L.; NUNES, M.G.V.; OLIVEIRA Jr., O.N.; MARTINS, R.T.; PARDO, T.A.S. (2007). Introdução ao Processamento das Línguas Naturais e Algumas Aplicações. Série de Relatórios do NILC. NILC-TR-07-10. São Carlos-SP, Agosto, 121p - Acessível em http://www.letras.etc.br/ebralc/NILCTR0710-DiasDaSilvaEtAl.pdf Critérios de separação de sentenças/frases - Susana Afonso, Eckhard Bick & Ana Raquel Marchi - Acessível em http://www.linguateca.pt/treebank/CriteriosSeparacao.html FLORESTA, Recursos linguísticos para a língua portuguesa: Disponível em: < http://www.linguateca.pt/Floresta/principal.html> RATNAPARKHI, A. Maximum Entropy Models for Natural Language Ambiguity Resolution. Ph.D. Dissertation. University of Pennsylvania, Julho de 1998 (versão eletrônica disponível em ftp://ftp.cis.upenn.edu/pub/ircs/tr/98-15/98-15.pdf)