You are on page 1of 85

Processamento de Linguagem Natural

Ilson Wilmar Rodrigues Filho, Dr. http://www.inf.ufsc.br/~ilson ilson@inf.ufsc.br Joo Bosco da Mota Alves, Dr. jbosco@inf.ufsc.br

Bibliografia
BARROS, F. A.; ROBIN, J. Processamento de Linguagem Natural. Departamento de Informtica, Universidade Federal de Pernambuco, Recife, maro de 1997. FERNANDO, P.; MENEZES, B. Linguagens Formais e Autmatos. Porto Alegre: Instituto de Informtica 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. AddisonWeslwy Publishing Company, 1989, JOS NETO, J. Introduo Compilao. Rio de Janeiro. LTC Livros Tcnicos e Cientficos Editora S. A., 1987.

Bibliografia
MONARD, M. C. & NICOLETTI, M. do C. Programas Prolog para Processamento de Listas e Aplicaes, Janeiro de 1993 Verso 2.0 MOREIRA, N. Processamento de Linguagem Natural, Mestrado de Lingstica Portuguesa Descritiva, Faculdade de Letras da Universidade do Porto NUNES, M. das G. V. at al. Introduo ao Processamento das Lnguas Naturais. So Carlos: Notas Didticas do ICMC No. 38, Instituto de Cincias Matemticas e de Computao, 1999. PINERO, R. B. Lenguajes Formales y Autmatas. Centro de Inteligencia Artificial, Instituto Tecnolgico y de Estudios Superiores de Monterrey. Enero de 1997. TOWSEND, C. Tcnicas Avanadas em Turbo Prolog, Rio de Janeiro: Editora Campus, 1990.

Avaliao
Exerccios para serem resolvidos individualmente e um trabalho (que pode ser feito em grupo) que deve ser entregue no dia da apresentao (seminrio).
Mdia Final = N1 x 0.4 + N2 x 0.3 + N3 x 0.3 onde: N1 = Mdia Aritmtica dos exerccios N2 = Nota do Trabalho N3 = Nota da Apresentao do trabalho (seminrio)

Processamento de Linguagem Natural


O processamento de linguagem natural o estudo dos sistemas computacionais para compreenso e gerao de lnguas naturais faladas e escritas.

Divises do PLN
lingstica computacional ou processamento de linguagem natural: tratamento da lngua escrita. reconhecimento e sntese de voz: tratamento da lngua falada.

Outras Denominaes
Processamento

de Linguagem Natural: Inteligncia Artificial Lingstica Computacional: Lingstica Outros termos propostos: Processamento Computacional das Lnguas, Engenharia da Linguagem. Especificamente para a lngua portuguesa tem sido sugerido: Processamento Computacional do Portugus, Processamento Computacional da Lngua Portuguesa.

Histrico
PLN

nasceu com o computador: 2a Guerra: militares americanos tinham interesse de traduzir automaticamente conversaes gravadas dos russos; A comunidade cientfica precisava de tradues de trabalhos estrangeiros - a cada dia fazia-se novas descobertas cientficas.

Traduo Automtica
A

possibilidade de fazer traduo automtica de publicaes sobre tecnologia e cincia deixou os cientistas animados. Essa foi uma das razes para que pesquisas fossem financiadas na rea.

Primeiros Sistemas de PLN


Primeiros

trabalhos sobre PLN: traduo automtica - comearam em 1946. Eram trabalhos sobre traduo russo-ingls. traduo palavra por palavra; tradues: listas de palavras chaves.

Histrico
1948: Preocupao com as regras de construo de frases foi levada em considerao (num trabalho do ingls Pichens). Primeiro congresso sobre traduo automtica foi realizado no ano de 1952, nos EUA, no MIT Massachusetts Institute of Technology com a participao de 18 pesquisadores.

O Relatrio ALPAC

Relatrio ALPAC (Automatic Language Processing Advisory Comitee) - relatrio encomendado pelo governo norteamericano Academia de Cincias daquele pas sobre as pesquisas em traduo automtica. O relatrio publicado em 1966 teve um teor fortemente negativo que provocou o corte das verbas de financiamento

Renascimento do Interesse na Traduo Automtica

Anos 80: renascimento do interesse na traduo automtica, na Europa, em funo da criao da Comunidade Europia. 1982: projeto EUROTRA - sistema de traduo automtica para nove lnguas de pases que constituam a Comunidade Europia.

Modelos Conceituais
Modelos formais ou modelos baseados em regras; Modelos estatsticos; Modelos conexionistas

reas de Aplicao de tcnicas de PLN


(1) Acesso a banco de dados; (2) Recuperao de informao; (3) Extrao de informao; (4) Traduo automtica; (5) Gerao de resumos.

Acesso a Banco de Dados


Acesso

a banco de dados so feitos usualmente utilizando-se query languages

Recuperao de Informao

Recuperao de Informao o estudo e desenvolvimento de tcnicas que permitam encontrar documentos relevantes de uma coleo de documentos.

Recuperao de Informao

Extrao de Informao
Na extrao de informao procura-se por informaes diretamente nos textos , mostrando a informao ao invs de documentos. Tcnicas utilizadas: baseadas na busca de determinadas palavras chaves (denominadas de tags), tais como - Nome de pessoas - Nome de empresas;

Traduo Automtica

Traduo automtica a traduo por computador de frases dadas numa lngua para outra lngua. Os primeiros trabalhos utilizavam dicionrios bilinges e faziam traduo palavra a palavra. A teoria lingstica comeou a ser incorporada nos sistemas de traduo automtica com os trabalhos de Noam Chomsky.

Gramtica
Segundo Chomsky, o conhecimento que o falante de

uma lngua natural teria da mesma poderia ser descrita atravs de um conjunto finito de regras.
Tais regras seriam universais, ou seja, valeriam

para todas as lnguas. Elas poderiam gerar um nmero infinito de frase de uma lngua.
Uma frase seria gramatical (pertencente lngua)

ou agramatical (no pertencente lngua).

Problemas em Processamento de Linguagem Natural

Homonmia Lexical: um exemplo clssico : manga = parte de uma pea de vesturio destinada a cobrir os braos / manga = fruto da mangueira

Problemas em Processamento de Linguagem Natural

Ambigidade sinttica: a sentena aceita duas anlises sintticas 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?

Problemas em Processamento de Linguagem Natural


Ambigidade de Escopo: Percebe-se s vezes que a

sentena indica dois ou mais escopos. Exemplos: Apesar de ser exmio advogado, o procurador da Universidade no cumpre todas as disposies estatutrias. Essa sentena poderia significar que:
- O procurador descumpre todas as disposies (Descumpre todas = tem por norma violar a legislao) O procurador cumpre as disposies, mas no todas (no tem por norma violar a legislao, mas comete falhas).

Problemas em Processamento de Linguagem Natural

Diferentes correferncias possveis: a compatibilidade de um anafrico com dois ou mais antecedentes distintos, tambm chamada de ambigidade anafrica.
Exemplo: O ladro entrou na casa do prefeito e tirou toda a sua roupa.

Conhecimento do Mundo
A compreenso da linguagem natural implica num

determinado grau de conhecimento do mundo. Exemplo: "as mes com filhos menores de dez anos".
Tal expresso poderia er as seguintes representaes lgicas: 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 me de y; i(x) significa idade de x; i(y) significa idade de y.

Fases do Desenvolvimento de um Sistema de PLN


(1) Anlise morfolgica; (2) Anlise Sinttica; (3) Anlise Semntica; (4) Anlise do Discurso; (5) Anlise Pragmtica.

Anlise Morfolgica

o estudo da estrutura e da classificao das palavras em funo do uso: substantivos adjetivos pronomes verbos numerais artigos advrbios preposies conjuno interjeio

Regras morfolgicas
As lnguas naturais possuem regras morfolgicas

que produzem as possveis variantes de cada palavra. Exemplo: construir tem como variantes, entre outras, construo e construdo. Um pedao da palavra (constru) se repete nas demais, que receberam a aposio do que chamamos de sufixos. Este pedao de palavra que se mantm nas variantes, chamamos de lexemas.

Anlise Sinttica

o estudo das unidades bsicas da linguagem - as sentenas. Na fase da anlise sinttica, o sistema de processamento de linguagem natural verifica se a seqncia das palavras nas sentenas so vlidas para a gramtica utilizada.

Anlise Semntica

Durante a anlise semntica, utiliza-se a estrutura gerada durante a anlise sinttica para construir outras estruturas que representem o significado das sentenas. Formalismos utilizados nesta fase do processamento de linguagem natural podem ser classificados em fracos e fortes: Formalismos fracos: redes semnticas e frames; Formalismos fortes: gramticas de casos, dependncia conceitual e scripts.

Anlise do Discurso

Anlise do discurso a identificao da estrutura do discurso. O discurso tambm organizado em unidades constitudas por um mais elementos denominados segmentos do discurso.

Anlise Pragmtica

Na anlise pragmtica so estudados os enunciados, ou seja, os significados das frases, sob o ponto de vista dos interlocutores. Esta anlise de suma importncia principalmente nos dilogos onde preciso determinar as intenes dos interlocutores.

Fundamentos Matemticos para o Processamento de Linguagem Natural

Conjuntos
Conjunto uma coleo de objetos, distintos, de qualquer espcie (definio intuitiva). Aos objetos do conjunto denominamos elementos do conjunto. Os elementos do conjunto distinguem-se uns dos outros, ou seja, no h repetio de elementos no conjunto.

Relao de Pertinncia 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 no pertence, escrevemos: u V b V

Relao de Pertinncia 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]).

Listas
Uma lista em Prolog uma coleo de elementos

separados por vrgulas e dentro de colchetes. O primeiro elemento da lista denominado cabea de lista e os demais elementos formam uma lista denominada cauda da lista.

A Relao pertence/2
a relao pertence/2 pode ser estabelecida

atravs de duas regras: (1) Um objeto pertence a uma lista se ele for a cabea da lista; (2) Um objeto pertence a uma lista se ele pertence cauda da lista.

pertence/2 em Visual Prolog


Domains stringlist = string* Predicates nondeterm pertence(string,stringlist)
Clauses pertence(X,[X|_]). pertence(X,[_|T]):pertence(X,T).

pertence/2 - Exemplos
Goal pertence(u,[a,e,i,o,u]).

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

yes

pertence/2 - Exemplos
Se quisermos saber quais os objetos de um

dado conjunto (por exemplo: [a,e,i,o,u]), perguntaramos em Prolog: Goal pertence(X,[a,e,i,o,u]). X=a X=e X=i X=o X=u 5 Solutions

Conjunto Vazio
Um conjunto sem objetos, denominado

conjunto vazio, denotado por {} ou . Para utilizao de Prolog vamos representar o conjunto vazio por [], ou seja, = []

Subconjunto
Um dado conjunto A subconjunto de B

se e somente se todo elemento de A pertence tambm a B, que se representa como: A B e dizemos que o conjunto A est contido no conjunto B, ou ainda que B contm A: B A

Subconjunto
em Prolog, teremos:

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

esta_contido/2
Domains stringlist = string*
Predicates nondeterm esta_contido(stringlist,stringlist nondeterm pertence(string,stringlist) Clauses esta_contido([],_). esta_contido([H1|T1],L2):pertence(H1,L2), esta_contido(T1,L2).

esta_contido/2 - Exemplos
Goal esta_contido([],[c,b,a]). yes Goal esta_contido([a,b],[c,b,a]). yes Goal esta_contido([a,b],[b,a]). yes Goal esta_contido([b,a],[c,b,a]). yes

contem/2
Domains
stringlist = string* Predicates

nondeterm contem(stringlist,stringlist)
nondeterm esta_contido(stringlist,stringlist)

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

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

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 no (yes/no) caso A seja subconjunto ou no de B. Basta utilizar uma das relaes definidas (esta_contido/2 ou contem/2)

Igualdade de Conjuntos
Dois conjuntos A e B so iguais quando

qualquer elemento que pertence a A pertence tambm a B e vice-versa (todo elemento que pertence a B pertence tambm a A), isto : A = B, se, e somente se,

A B e B A.

igual/2
Predicates nondeterm igual(stringlist,stringlist)

Clauses
igual(A,B):esta_contido(A,B), esta_contido(B,A).

igual/2 - Exemplos
Goal A = [a,b,c], B = [b,c,a], igual(A,B). A = [a,b,c] B = [b,c,a] 1 Solution Goal igual([a,b,c],[b,a,c]). yes OBS: Note-se pelos exemplos acima que a ordem dos elementos dentro do conjunto no importa. Dados dois conjuntos, se eles tiverem os mesmos objetos, eles so considerados iguais.

Conjunto Potncia
Seja A um conjunto. Definimos como

conjunto potncia de A ou conjunto das partes de A, ao conjunto cujos elementos so os subconjuntos de A. Sua denotao : 2A. Assim:

2A = {S | S A}

subconjunto/2
Para definir em Prolog um predicado que

d todos os subconjuntos de um conjunto dado formando o seu conjunto potncia, vamos definir um predicado que gere subconjuntos que vamos denominar de subconjunto/2.

subconjunto/2 - regras
1 - Se A um conjunto vazio ele s pode gerar um conjunto vazio B; 2 - Se o primeiro elemento do conjunto A estiver tambm no subconjunto B (vamos coloc-lo na cabea de B, pois como no importa a ordem dos elementos de um conjunto vamos escolher esta ordem preferencialmente), ento a cauda de B subconjunto da cauda de A; 3 - Se o primeiro elemento do conjunto A no est no subconjunto gerado B, ento B um subconjunto da cauda de A.

subconjunto/2 - regras
Esta trs regras so escritas da seguinte maneira em Prolog: (1) subconjunto([],[]). (2) subconjunto([CabecaA|CaudaA],[CabecaA|CaudaB]):subconjunto(CaudaA,CaudaB). (3) subconjunto([_|CaudaA],ConjuntoB):subconjunto(CaudaA,ConjuntoB).

subconjunto/2 - regras em Visual Prolog


Predicates
nondeterm subconjunto(stringlist,stringlist) Clauses subconjunto([],[]). subconjunto([CabecaA|CaudaA],[CabecaA|CaudaB]):subconjunto(CaudaA,CaudaB). subconjunto([_|CaudaA],ConjuntoB):subconjunto(CaudaA,ConjuntoB).

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

Conjunto Potncia
O conjunto potncia que o conjunto formado por todos os subconjuntos de um dado conjunto poder ser agora definido como: Domains stringlist = string* llstring = stringlist* Predicates nondeterm potencia(stringlist,llstring) Clauses potencia([],[[]]). potencia(A,P):findall(X,subconj(A,X),P).

Conjunto Potncia - Exemplo

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

Nmero de Elementos do Conjunto Potncia


O nmero de elementos do conjunto das

partes de um conjunto (ou conjunto potncia) de n elementos 2n.


Se A tiver 3 elementos, o conjunto das

partes de A ter 23 = 8 elementos.

Exerccio

Determinar

em Visual Prolog o tamanho do conjunto potncia definindo o predicado tamanho/2

Soluo
Predicates tamanho(llstring,integer)
Clauses
tamanho([],0). tamanho([_|Cauda],TAM):tamanho(Cauda,TamCauda), TAM = TamCauda + 1.

Operaes com Conjuntos

Com conjuntos pode-se executar algumas operaes bsicas tais como: unio; interseco; diferena..

Unio de Conjuntos

Dados dois conjuntos A e B, a unio destes conjuntos, o conjunto formado com todos os elementos que pertencem a A ou a B.
A unio representada por: A B

Unio de Conjuntos - Regras


1. A unio de um conjunto vazio com um conjunto qualquer A o prprio conjunto A; 2. Dados dois conjuntos A e B, se a cabea de A tambm pertence a B a unio de A com B ser igual unio da cauda de A com B pois como a cabea de A tambm pertence a B, este elemento aparecer no conjunto formada pela unio de B com a cauda de A; 3. Se a cabea de A no pertencer a B o conjunto unio ter como cabea a cabea de A e como cauda a unio da cauda de A como o conjunto B.

Exerccio
Construir

em Prolog as regras que definem a unio de dois conjuntos

Soluo
Predicates nondeterm uniao(stringlist,stringlist,stringlist).
Clauses uniao([],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).

Unio 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

Interseco de Conjuntos
Dados dois conjuntos A e B, a interseco

de A e B o conjunto formado com os elementos que pertencem a ambos ao mesmo tempo. A interseco indicada por: A B

Interseco de Conjuntos Regras


1. A interseo de um conjunto vazio com um conjunto qualquer, um conjunto vazio; 2. Dados dois conjuntos A e B, se a cabea de A tambm pertencer a B, o conjunto interseo tambm ter como cabea, a mesma cabea de A, e a sua cauda ser formada pela interseo da cauda de A com o conjunto B; 3. Se a cabea do conjunto A no pertence ao conjunto B, ento, o conjunto interseo ser obtido pela interseo da cauda de A com o conjunto B.

Exerccio

Construir em Prolog, as regras que determinam a interseco de conjuntos.

Soluo
Domains stringlist = string* Predicates nondeterm intersecao(stringlist,stringlist,stringlist) Clauses intersecao([],_,[]).
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).

Diferena de Conjuntos
Dados dois conjuntos A e B, denomina-se

diferena 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}.

Diferena de Conjuntos Regras


1. A diferena entre um conjunto vazio e um conjunto qualquer, um conjunto vazio; 2. Dados dois conjuntos quaisquer A e B, se a cabea de A no pertencer a B, o conjunto diferena tambm ter como cabea, a mesma cabea de A, e a sua cauda ser formada pela diferena entre a cauda de A com o conjunto B; 3. Se a cabea do conjunto A pertencer tambm ao conjunto B, ento, o conjunto diferena ser obtido pela diferena da cauda de A com o conjunto B (porque este elemento ser eliminado no fazendo parte do conjunto diferena).

Exerccio
Construir

em Prolog as regras que definem a diferena de dois conjuntos

Soluo
Predicates nondeterm 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).

Complemento
Dados dois conjuntos A e B, denominamos

complemento de B em relao 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}, ento:


A B = {a,s,g} e B A = {h}

Exerccio
Construir

em Prolog as regras que definem o complemento de B em relao a A.

Soluo
Predicates
nondeterm complemento(stringlist,stringlist,stringlist) Clauses complemento(B,A,C):diferenca(A,B,C).

Par Ordenado
Par ordenado o par formado por dois

elementos de maneira que cada um deles deve manter a sua posio em relao 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)

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.

Produto Cartesiano - Exemplo


A = {ponte1, ponte2} B = {madeira, concreto, ferro}
Podemos formar o conjunto dos seguintes pares ordenados: {(ponte1,madeira),(ponte1,concreto),(ponte1,ferro), (ponte2,madeira),(ponte2,concreto),(ponte2,ferro)}

Tarefa
Programar

em Prolog o produto

cartesiano

You might also like