Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson [email protected] João...

85
Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. http://www.inf.ufsc.br/~ilson [email protected] João Bosco da Mota Alves, Dr. [email protected]

Transcript of Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson [email protected] João...

Page 1: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Processamento de Linguagem Natural

Ilson Wilmar Rodrigues Filho, Dr.http://www.inf.ufsc.br/~ilson

[email protected]

João Bosco da Mota Alves, Dr. [email protected]

Page 2: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Bibliografia

BARROS, F. A.; ROBIN, J. – Processamento de Linguagem Natural. Departamento de Informática, Universidade Federal de Pernambuco, Recife, março de 1997.

FERNANDO, P.; MENEZES, B. – Linguagens Formais e Autômatos. Porto Alegre: Instituto de Informática da UFRGS: Sagra Luzzatto Editores, 1997.

GAL, A.; LAPALME, G. – Prolog for Natural Language Processing. John Wiley & Sons Ltd., 1991.

GAZDAR, G.; MELLISH, C. – Natural Language in Prolog. Addison-Weslwy Publishing Company, 1989,

JOSÉ NETO, J. – Introdução à Compilação. Rio de Janeiro. LTC – Livros Técnicos e Científicos Editora S. A., 1987.

Page 3: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

BibliografiaMONARD, M. C. & NICOLETTI, M. do C. – Programas Prolog para

Processamento de Listas e Aplicações, Janeiro de 1993 – Versão 2.0MOREIRA, N. – Processamento de Linguagem Natural, Mestrado de

Lingüística Portuguesa Descritiva, Faculdade de Letras da Universidade do Porto

NUNES, M. das G. V. at al. – Introdução ao Processamento das Línguas Naturais. São Carlos: Notas Didáticas do ICMC No. 38, Instituto de Ciências Matemáticas e de Computação, 1999.

PINERO, R. B. – Lenguajes Formales y Autómatas. Centro de Inteligencia Artificial, Instituto Tecnológico y de Estudios Superiores de Monterrey. Enero de 1997.

TOWSEND, C. – Técnicas Avançadas em Turbo Prolog, Rio de Janeiro: Editora Campus, 1990.

Page 4: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Avaliação

Exercícios para serem resolvidos individualmente e um trabalho (que pode ser feito em grupo) que deve ser entregue no dia da apresentação (seminário).

Média Final = N1 x 0.4 + N2 x 0.3 + N3 x 0.3

onde: N1 = Média Aritmética dos exercícios N2 = Nota do Trabalho N3 = Nota da Apresentação do trabalho

(seminário)

Page 5: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Processamento de Linguagem Natural

O processamento de linguagem natural é o estudo dos sistemas computacionais para compreensão e geração de línguas naturais faladas e escritas.

Page 6: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Divisões do PLN

• lingüística computacional ou processamento de linguagem natural: tratamento da língua escrita.

• reconhecimento e síntese de voz: tratamento da língua falada.

Page 7: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Outras Denominações Processamento de Linguagem Natural: Inteligência Artificial Lingüística Computacional: Lingüística Outros termos propostos: Processamento

Computacional das Línguas, Engenharia da Linguagem. Especificamente para a língua portuguesa tem sido sugerido: Processamento Computacional do Português, Processamento Computacional da Língua Portuguesa.

Page 8: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Histórico

PLN nasceu com o computador: 2a Guerra: militares americanos tinham

interesse de traduzir automaticamente conversações gravadas dos russos;

A comunidade científica precisava de traduções de trabalhos estrangeiros - a cada dia fazia-se novas descobertas científicas.

Page 9: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Tradução Automática

A possibilidade de fazer tradução automática de publicações sobre tecnologia e ciência deixou os cientistas animados. Essa foi uma das razões para que

pesquisas fossem financiadas na área.

Page 10: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Primeiros Sistemas de PLN

Primeiros trabalhos sobre PLN: tradução automática - começaram em

1946. Eram trabalhos sobre tradução russo-inglês. tradução palavra por palavra;

traduções: listas de palavras chaves.

Page 11: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Histórico 1948: Preocupação com as regras de

construção de frases foi levada em consideração (num trabalho do inglês Pichens).

Primeiro congresso sobre tradução automática foi realizado no ano de 1952, nos EUA, no MIT – Massachusetts Institute of Technology com a participação de 18 pesquisadores.

Page 12: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

O Relatório ALPAC

Relatório ALPAC (Automatic Language Processing Advisory Comitee) - relatório encomendado pelo governo norte-americano à Academia de Ciências daquele país sobre as pesquisas em tradução automática. O relatório publicado em 1966 teve um teor fortemente negativo que provocou o corte das verbas de financiamento

Page 13: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Renascimento do Interesse na Tradução Automática

Anos 80: renascimento do interesse na tradução automática, na Europa, em função da criação da Comunidade Européia.

1982: projeto EUROTRA - sistema de tradução automática para nove línguas de países que constituíam a Comunidade Européia.

Page 14: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Modelos Conceituais

Modelos formais ou modelos baseados em regras; Modelos estatísticos; Modelos conexionistas

Page 15: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Áreas de Aplicação de técnicas de PLN

(1) Acesso a banco de dados;(2) Recuperação de informação;(3) Extração de informação;(4) Tradução automática;(5) Geração de resumos.

Page 16: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Acesso a Banco de Dados

Acesso a banco de dados são feitos usualmente utilizando-se “query languages”

Page 17: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Recuperação de Informação

Recuperação de Informação é o estudo e desenvolvimento de técnicas que permitam encontrar documentos relevantes de uma coleção de documentos.

Page 18: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Recuperação de Informação

Page 19: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Extração de Informação

Na extração de informação procura-se por informações diretamente nos textos , mostrando a informação ao invés de documentos.

Técnicas utilizadas: baseadas na busca de determinadas palavras chaves (denominadas de tags), tais como

- Nome de pessoas - Nome de empresas;

Page 20: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Tradução Automática

Tradução automática é a tradução por computador de frases dadas numa língua para outra língua.

Os primeiros trabalhos utilizavam dicionários bilingües e faziam tradução palavra a palavra. A teoria lingüística começou a ser incorporada nos sistemas de tradução automática com os trabalhos de Noam Chomsky.

Page 21: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Gramática

Segundo Chomsky, o conhecimento que o falante de uma língua natural teria da mesma poderia ser descrita através de um conjunto finito de regras.

Tais regras seriam universais, ou seja, valeriam para todas as línguas. Elas poderiam gerar um número infinito de frase de uma língua.

Uma frase seria gramatical (pertencente à língua) ou agramatical (não pertencente à língua).

Page 22: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Problemas em Processamento de Linguagem Natural

Homonímia Lexical: um exemplo clássico é: manga = parte de uma peça de vestuário destinada a cobrir os braços / manga = fruto da mangueira

Page 23: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Problemas em Processamento de Linguagem Natural

Ambigüidade sintática: a sentença aceita duas análises sintáticas diferentes. Exemplo:

Viajando pela primeira vez para a Europa, cruzei com um grupo de jovens brasileiros.

Quem viajou pela primeira vez? Eu ou o grupo de jovens brasileiros?

Page 24: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Problemas em Processamento de Linguagem Natural

Ambigüidade de Escopo: Percebe-se às vezes que a sentença indica dois ou mais escopos. Exemplos:

Apesar de ser exímio advogado, o procurador da Universidade não cumpre todas as disposições estatutárias.

Essa sentença poderia significar que:- O procurador descumpre todas as disposições (Des-

cumpre todas = tem por norma violar a legislação) O procurador cumpre as disposições, mas não todas

(não tem por norma violar a legislação, mas comete falhas).

Page 25: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Problemas em Processamento de Linguagem Natural

Diferentes correferências possíveis: é a compatibilidade de um anafórico com dois ou mais antecedentes distintos, também chamada de ambigüidade anafórica.

Exemplo: O ladrão entrou na casa do prefeito e tirou toda a sua roupa.

Page 26: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Conhecimento do Mundo A compreensão da linguagem natural implica num

determinado grau de conhecimento do mundo. Exemplo: "as mães com filhos menores de dez anos". Tal expressão poderia er as seguintes representações

lógicas: 1. {x | З y, M(x,y) ^ i(y) < 10}; 2. {x | З y, M(x,y) ^ i(x) < 10}; 3. {x | З (y,z), M(x,y) ^ M(x,z) ^ i(y) < 10} ^ i(x) < 10}

onde: M(x,y) significa x é mãe de y; i(x) significa idade de x; i(y) significa idade de y.

Page 27: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Fases do Desenvolvimento de um Sistema de PLN

(1) Análise morfológica;(2) Análise Sintática;(3) Análise Semântica;(4) Análise do Discurso;(5) Análise Pragmática.

Page 28: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Análise Morfológica

É o estudo da estrutura e da classificação das palavras em função do uso:

substantivos artigos adjetivos advérbios pronomes preposições verbos conjunção numerais interjeição

Page 29: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Regras morfológicas

As línguas naturais possuem regras morfológicas que produzem as possíveis variantes de cada palavra. Exemplo: construir tem como variantes, entre outras,

construção e construído. Um pedaço da palavra (constru) se repete nas

demais, que receberam a aposição do que chamamos de sufixos. Este pedaço de palavra que se mantém nas variantes, chamamos de lexemas.

Page 30: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Análise Sintática

É o estudo das unidades básicas da linguagem - as sentenças.

Na fase da análise sintática, o sistema de processamento de linguagem natural verifica se a seqüência das palavras nas sentenças são válidas para a gramática utilizada.

Page 31: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Análise Semântica

Durante a análise semântica, utiliza-se a estrutura gerada durante a análise sintática para construir outras estruturas que representem o significado das sentenças.

Formalismos utilizados nesta fase do processamento de linguagem natural podem ser classificados em fracos e fortes:

Formalismos fracos: redes semânticas e frames;

Formalismos fortes: gramáticas de casos, dependência conceitual e scripts.

Page 32: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Análise do Discurso

Análise do discurso é a identificação da estrutura do discurso. O discurso é também organizado em unidades constituídas por um mais elementos denominados segmentos do discurso.

Page 33: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Análise Pragmática

Na análise pragmática são estudados os enunciados, ou seja, os significados das frases, sob o ponto de vista dos interlocutores. Esta análise é de suma importância principalmente nos diálogos onde é preciso determinar as intenções dos interlocutores.

Page 34: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Fundamentos Matemáticos para o Processamento de

Linguagem Natural

Page 35: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Conjuntos

Conjunto é uma coleção de objetos, distintos, de qualquer espécie (definição intuitiva).

Aos objetos do conjunto denominamos elementos do conjunto.

Os elementos do conjunto distinguem-se uns dos outros, ou seja, não há repetição de elementos no conjunto.

Page 36: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Relação de Pertinência entre Elemento e Conjunto

Vamos supor o conjunto das vogais::V = {a,e,i,o,u}

Para indicar que u pertence ao conjunto V e que b não pertence, escrevemos:

u V b V

Page 37: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Relação de Pertinência entre Elemento e Conjunto

Em Prolog, vamos utilizar listas:

V = [a,e,i,o,u]

pertence(u,[a,e,i,o,u]).

not(pertence(b,[a,e,i,o,u]).

Page 38: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Listas

Uma lista em Prolog é uma coleção de elementos separados por vírgulas e dentro de colchetes. O primeiro elemento da lista é denominado cabeça de lista e os demais elementos formam uma lista denominada cauda da lista.

Page 39: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

A Relação pertence/2

a relação pertence/2 pode ser estabelecida através de duas regras:(1) Um objeto pertence a uma lista se ele for a cabeça da lista;(2) Um objeto pertence a uma lista se ele pertence à cauda da lista.

Page 40: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

pertence/2 em Visual Prolog

Domainsstringlist = string*Predicatesnondeterm pertence(string,stringlist)

Clausespertence(X,[X|_]).pertence(X,[_|T]):-pertence(X,T).

Page 41: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

pertence/2 - Exemplos

Goal pertence(u,[a,e,i,o,u]). yes

Goal not(pertence(b,[a,e,i,o,u])). yes

Page 42: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

pertence/2 - Exemplos

Se quisermos saber quais os objetos de um dado conjunto (por exemplo: [a,e,i,o,u]), perguntaríamos em Prolog:

Goal pertence(X,[a,e,i,o,u]). X = a X = e X = i X = o X = u 5 Solutions

Page 43: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Conjunto Vazio

Um conjunto sem objetos, denominado conjunto vazio, é denotado por {} ou . Para utilização de Prolog vamos representar o conjunto vazio por [], ou seja,

= []

Page 44: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Subconjunto

Um dado conjunto A é subconjunto de B se e somente se todo elemento de A pertence também a B, que se representa como:

A B e dizemos que o conjunto A está contido no

conjunto B, ou ainda que B contém A:B A

Page 45: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Subconjunto

em Prolog, teremos:

esta_contido(A,B).contem(B,A).

Page 46: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

esta_contido/2

Domains stringlist = string*

Predicatesnondeterm esta_contido(stringlist,stringlistnondeterm pertence(string,stringlist)

Clausesesta_contido([],_).esta_contido([H1|T1],L2):- pertence(H1,L2), esta_contido(T1,L2).

Page 47: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

esta_contido/2 - Exemplos

Goal esta_contido([],[c,b,a]).yesGoal esta_contido([a,b],[c,b,a]).yesGoal esta_contido([a,b],[b,a]).yesGoal esta_contido([b,a],[c,b,a]).yes

Page 48: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

contem/2

Domains stringlist = string*Predicatesnondeterm contem(stringlist,stringlist)nondeterm esta_contido(stringlist,stringlist)

Clauses contem(B,A):-

esta_contido(A,B).

Page 49: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

contem/2 - Exemplos

Goal contem([a,b],[]).yes

Goal A = [a], B = [a,e,i,o,u], contem(B,A).A = [a]B = [a,e,i,o,u] yes

Page 50: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

eh_subconjunto/2

Para verificar se um conjunto A é subconjunto de um conjunto B podemos criar o predicado eh_subconjunto/2, que responda sim ou não (yes/no) caso A seja subconjunto ou não de B. Basta utilizar uma das relações definidas (esta_contido/2 ou contem/2)

Page 51: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Igualdade de Conjuntos

Dois conjuntos A e B são iguais quando qualquer elemento que pertence a A pertence também a B e vice-versa (todo elemento que pertence a B pertence também a A), isto é: A = B, se, e somente se,

A B e B A.

Page 52: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

igual/2

Predicates

nondeterm igual(stringlist,stringlist)

Clausesigual(A,B):- esta_contido(A,B), esta_contido(B,A).

Page 53: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

igual/2 - ExemplosGoal A = [a,b,c], B = [b,c,a],igual(A,B).A = [a,b,c]B = [b,c,a] 1 SolutionGoal igual([a,b,c],[b,a,c]).yesOBS: Note-se pelos exemplos acima que a ordem doselementos dentro do conjunto não importa. Dados doisconjuntos, se eles tiverem os mesmos objetos, eles sãoconsiderados iguais.

Page 54: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Conjunto Potência

Seja A um conjunto. Definimos como conjunto potência de A ou conjunto das partes de A, ao conjunto cujos elementos são os subconjuntos de A. Sua denotação é: 2A. Assim:

2A = {S | S A}

Page 55: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

subconjunto/2

Para definir em Prolog um predicado que dê todos os subconjuntos de um conjunto dado formando o seu conjunto potência, vamos definir um predicado que gere subconjuntos que vamos denominar de subconjunto/2.

Page 56: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

subconjunto/2 - regras1 - Se A é um conjunto vazio ele só pode gerar um conjunto vazio B;2 - Se o primeiro elemento do conjunto A estiver também no subconjunto B (vamos colocá-lo na cabeça de B, pois como não importa a ordem dos elementos de um conjunto vamos escolher esta ordem preferencialmente), então a cauda de B é subconjunto da cauda de A;3 - Se o primeiro elemento do conjunto A não está no subconjunto gerado B, então B é um subconjunto da cauda de A.

Page 57: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

subconjunto/2 - regras

Esta três regras são escritas da seguinte maneira em Prolog:

(1) subconjunto([],[]).(2) subconjunto([CabecaA|CaudaA],[CabecaA|CaudaB]):- subconjunto(CaudaA,CaudaB).(3) subconjunto([_|CaudaA],ConjuntoB):-

subconjunto(CaudaA,ConjuntoB).

Page 58: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

subconjunto/2 - regras em Visual Prolog

Predicates

nondeterm subconjunto(stringlist,stringlist)

Clausessubconjunto([],[]).subconjunto([CabecaA|CaudaA],[CabecaA|CaudaB]):- subconjunto(CaudaA,CaudaB).subconjunto([_|CaudaA],ConjuntoB):- subconjunto(CaudaA,ConjuntoB).

Page 59: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

subconjunto/2 - Exemplo

Goal subconjunto([a,s,d],SUB). SUB = [a,s,d] ; SUB = [a,s] ; SUB = [a,d] ; SUB = [a] ; SUB = [s,d] ; SUB = [s] ; SUB = [d] ; SUB = '[]' ; 8 Solutions

Page 60: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Conjunto Potência

O conjunto potência que é o conjunto formado por todos os subconjuntos de um dado conjunto poderá ser agora definido como:

Domains stringlist = string*llstring = stringlist*

Predicatesnondeterm potencia(stringlist,llstring)Clauses

potencia([],[[]]).potencia(A,P):-

findall(X,subconj(A,X),P).

Page 61: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Conjunto Potência - Exemplo

Goal potencia([a,s,d],P).P = [[a,s,d],[a,s],[a,d],[a],[s,d],[s],[d],'[]'] 1 Solution

Page 62: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Número de Elementos do Conjunto Potência

O número de elementos do conjunto das partes de um conjunto (ou conjunto potência) de n elementos é 2n.

Se A tiver 3 elementos, o conjunto das partes de A terá 23 = 8 elementos.

Page 63: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Exercício

Determinar em Visual Prolog o tamanho do conjunto potência definindo o predicado tamanho/2

Page 64: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Solução

Predicatestamanho(llstring,integer)Clauses

tamanho([],0).tamanho([_|Cauda],TAM):- tamanho(Cauda,TamCauda), TAM = TamCauda + 1.

Page 65: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Operações com Conjuntos

Com conjuntos pode-se executar algumas operações básicas tais como:

união; intersecção; diferença..

Page 66: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

União de Conjuntos

Dados dois conjuntos A e B, a união destes conjuntos, é o conjunto formado com todos os elementos que pertencem a A ou a B.

A união é representada por:

A B

Page 67: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

União de Conjuntos - Regras1. A união de um conjunto vazio com um conjunto qualquer A é o próprio conjunto A;2. Dados dois conjuntos A e B, se a cabeça de A também

pertence a B a união de A com B será igual à união da cauda de A com B pois como a cabeça de A também pertence a B, este elemento aparecerá no conjunto formada pela união de B com a cauda de A;

3. Se a cabeça de A não pertencer a B o conjunto união terá como cabeça a cabeça de A e como cauda a união da cauda de A como o conjunto B.

Page 68: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Exercício

Construir em Prolog as regras que definem a união de dois conjuntos

Page 69: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Solução

Predicatesnondeterm uniao(stringlist,stringlist,stringlist).

Clausesuniao([],C,C).

uniao([CabecaA|CaudaA],ConjuntoB,ConjuntoUniao):- pertence(CabecaA,ConjuntoB),!, uniao(CaudaA,ConjuntoB,ConjuntoUniao). uniao([CabecaA|CaudaA],ConjuntoB,[CabecaA|CaudaUniao]):- not(pertence(CabecaA,ConjuntoB)), uniao(CaudaA,ConjuntoB,CaudaUniao).

Page 70: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

União de Conjuntos - Exemplos

Goal uniao(["3","5","7"],["1","2","4","6"],UNIAO).UNIAO = ["3","5","7","1","2","4","6"] 1 Solution

Goal uniao(["1","2","3"],["2","3","4","5"],U).U = ["1,"2","3","4","5"] i Solution

Page 71: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Intersecção de Conjuntos

Dados dois conjuntos A e B, a intersecção de A e B é o conjunto formado com os elementos que pertencem a ambos ao mesmo tempo. A intersecção é indicada por:

A B

Page 72: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Intersecção de Conjuntos - Regras

1. A interseção de um conjunto vazio com um conjunto qualquer, é um conjunto vazio;

2. Dados dois conjuntos A e B, se a cabeça de A também pertencer a B, o conjunto interseção também terá como cabeça, a mesma cabeça de A, e a sua cauda será formada pela interseção da cauda de A com o conjunto B;

3. Se a cabeça do conjunto A não pertence ao conjunto B, então, o conjunto interseção será obtido pela interseção da cauda de A com o conjunto B.

Page 73: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Exercício

Construir em Prolog, as regras que determinam a intersecção de conjuntos.

Page 74: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

SoluçãoDomainsstringlist = string*Predicatesnondeterm intersecao(stringlist,stringlist,stringlist)Clausesintersecao([],_,[]). intersecao([Cabeca_A|Cauda_A],Conjunto_B,[Cabeca_A|Cauda_Intersecao]):- pertence(Cabeca_A,Conjunto_B),!, intersecao(Cauda_A,Conjunto_B,Cauda_Intersecao).intersecao([Cabeca_A|Cauda_A],Conjunto_B,Intersecao):- not(pertence(Cabeca_A,Conjunto_B)), intersecao(Cauda_A,Conjunto_B,Intersecao).

Page 75: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Diferença de Conjuntos

Dados dois conjuntos A e B, denomina-se diferença A - B ao conjunto formado pelos elementos de A menos os elementos que pertencem ao mesmo tempo a A e a B.

Sejam A = {a,b,c,d,e} e B = {a,e,i,o,u}. A - B = {b,c,d}.

Page 76: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Diferença de Conjuntos Regras

1. A diferença entre um conjunto vazio e um conjunto qualquer, é um conjunto vazio;

2. Dados dois conjuntos quaisquer A e B, se a cabeça de A não pertencer a B, o conjunto diferença também terá como cabeça, a mesma cabeça de A, e a sua cauda será formada pela diferença entre a cauda de A com o conjunto B;

3. Se a cabeça do conjunto A pertencer também ao conjunto B, então, o conjunto diferença será obtido pela diferença da cauda de A com o conjunto B (porque este elemento será eliminado não fazendo parte do conjunto diferença).

Page 77: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Exercício

Construir em Prolog as regras que definem a diferença de dois conjuntos

Page 78: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Solução

Predicatesnondeterm diferenca(stringlist,stringlist,stringlist)

Clauses

diferenca([],_,[]).diferenca([Cabeca_A|Cauda_A],Conjunto_B,[Cabeca_A|Cauda_Diferenca]):- not(pertence(Cabeca_A,Conjunto_B)), diferenca(Cauda_A,Conjunto_B,Cauda_Diferenca).diferenca([Cabeca_A|Cauda_A],Conjunto_B,Diferenca):- pertence(Cabeca_A,Conjunto_B), diferenca(Cauda_A,Conjunto_B,Diferenca).

Page 79: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Complemento

Dados dois conjuntos A e B, denominamos complemento de B em relação a A ao conjunto

A – B = {x|x Є A e x B} Se tivermos por exemplo os seguintes

conjuntos A = {a,s,d,f,g] e B = {d,f,h,j}, então: A – B = {a,s,g} e B – A = {h}

Page 80: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Exercício

Construir em Prolog as regras que definem o complemento de B em relação a A.

Page 81: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Solução

Predicates

nondeterm complemento(stringlist,stringlist,stringlist)

Clauses

complemento(B,A,C):- diferenca(A,B,C).

Page 82: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Par Ordenado

Par ordenado é o par formado por dois elementos de maneira que cada um deles deve manter a sua posição em relação ao outro, ou seja, o primeiro elemento do par será sempre o da esquerda e o segundo elemento do par será o da direita.

se os elementos a e b formam um par ordenado teremos:

(a,b)

Page 83: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Produto Cartesiano

Sejam os conjuntos A e B. Podemos formar com os elementos dos conjuntos A e B, um conjunto de pares ordenados de forma que o primeiro elemento do par seja do conjunto A e o segundo elemento do conjunto B.

A este conjunto de pares ordenados denominamos de produto cartesiano.

Page 84: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Produto Cartesiano - Exemplo

A = {ponte1, ponte2} B = {madeira, concreto, ferro}

Podemos formar o conjunto dos seguintes paresordenados:

{(ponte1,madeira),(ponte1,concreto),(ponte1,ferro), (ponte2,madeira),(ponte2,concreto),(ponte2,ferro)}

Page 85: Processamento de Linguagem Natural Ilson Wilmar Rodrigues Filho, Dr. ilson ilson@inf.ufsc.br João Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br.

Tarefa

Programar em Prolog o produto cartesiano