Processamento de
Linguagem Natural
Prof. Dr. Silvio do Lago Pereira
Departamento de Tecnologia da Informação
Faculdade de Tecnologia de São Paulo
Introdução
Processamento de linguagem natural (PLN)
Processamento de linguagem natural (PLN)
consiste no desenvolvimento de modelos computacionais para a realização de tarefas
que dependem de informações expressas em uma língua natural.
consiste no desenvolvimento de modelos computacionais para a realização de tarefas
que dependem de informações expressas em uma língua natural.
Alguns exemplos de aplicação:
tradução e interpretação de textos
busca de informações em documentos
interface homem-máquina (chatterbots)
Aspectos da pesquisa em PLN:
som: fonologia
estrutura: morfologia e sintaxe
Alguns aspectos da pesquisa em PLN
Fonologia: reconhece os sons (fonemas) que formam as palavras de uma língua.
Morfologia: reconhece uma palavra em termos de unidades básicas (morfemas).
Sintaxe: define a estrutura de uma frase com base na forma como as palavras
desta frase se relacionam entre si (categorias gramaticais).
Semântica: associa significado às estruturas sintáticas, em função do significado
das palavras que a compõem.
Pragmática: adequa o significado de uma frase ao contexto em que ela é usada.
Considerações
Considerações
PLN é uma vasta área de pesquisa que envolve diversas áreas do conhecimento.
Para simplificar, abordaremos apenas alguns conceitos básicos de análise sintática.
Mostraremos como usar conceitos básicos de linguagens formais para definir uma
gramática capaz de gerar e reconhecer um conjunto restrito de frases em português.
PLN é uma vasta área de pesquisa que envolve diversas áreas do conhecimento.
Para simplificar, abordaremos apenas alguns conceitos básicos de análise sintática.
Mostraremos como usar conceitos básicos de linguagens formais para definir uma
gramática capaz de gerar e reconhecer um conjunto restrito de frases em português.
Gramáticas
Uma linguagem é um conjunto de sentenças, formadas pela concatenação de símbolos.
Linguagens formais são linguagens artificiais (tais como lógica proposicional ou Pascal) que
podem ser matematicamente definidas, de forma rigorosa.
Linguagens naturais (tais como português ou inglês) não são matematicamente definidas.
Embora a correspondência não seja perfeita, podemos tratar linguagens naturais como
tratamos linguagens formais.
Uma gramática
Uma gramática
é uma especificação matemática da estrutura das sentenças de uma linguagem.
é uma especificação matemática da estrutura das sentenças de uma linguagem.
Formalmente, uma gramática é definida por:
S: o símbolo inicial da gramática (S∈N)
T: um conjunto de símbolos terminais, denotando palavras da linguagem (léxico).
N: um conjunto de símbolos não-terminais, denotando componentes de sentenças.
R: um conjunto de regras de produção, que especificam como símbolos não-terminais
podem ser expandidos em símbolos não-terminais e terminais.
Especificação de gramática usando diferença de listas
Considere a gramática a seguir:
S = {
frase}
T = {
o,
gato,
rato,
caçou}
N = {
frase,
sujeito,
predicado,
artigo,
substantivo,
verbo}
R = {
frase --> sujeito, predicado,
sujeito --> artigo, substantivo
,
predicado --> verbo, artigo, substantivo, artigo --> [o],
substantivo --> [gato] | [rato], verbo --> [caçou]
}
De acordo com esta gramática:
•
uma frase é um sujeito seguido de um predicado
•um sujeito é um artigo seguido de um substantivo
•
um predicado é um verbo, seguido de um artigo, seguido de um substantivo
•um artigo é o símbolo terminal
oooo•
um substantivo é o símbolo terminal
gatogatogatogatoou
ratoratoratorato •um verbo é o símbolo terminal
cacacacaççççououououEspecificação de gramática usando diferença de listas
Considere que frases são representadas por listas de palavras. Então, por
exemplo, a frase “o gato caçou o rato” pode ser representada como
[ [[
[oooo,,,,gatogatogatogato,,,,cacacacaççouççououou,,,,oooo,,,,ratoratoratorato]]]]
Reconhecendo o primeiro artigo em
[o,gato,caçou,o,rato], obtemos a lista
[gato,caçou,o,rato]. Isto pode ser indicado em Prolog com o fato:
artigo([ artigo([artigo([
artigo([oooo|A|A],A).|A|A],A).],A).],A).
Analogamente, reconhecendo o primeiro substantivo em
[gato,caçou,o,rato],
obtemos a lista
[caçou,o,rato]. Isto pode ser indicado com o fato:
substantivo([ substantivo([substantivo([
substantivo([gatogatogatogato|A|A|A|A],A).],A).],A).],A).
Neste ponto, é importante notar que, reconhecendo um artigo seguido de um
substantivo, acabamos reconhecendo o sujeito da frase. Em Prolog, isto pode ser
indicado pela regra:
sujeito(A,C) : sujeito(A,C) :sujeito(A,C) :
Especificação de gramática usando diferença de listas
Após o reconhecimento do sujeito em
[o,gato,caçou,o,rato], obtemos a lista
[caçou,o,rato]. Reconhecendo o verbo nesta lista, obtemos a lista
[o,rato].
Isto pode ser indicado com o fato:
verbo([ verbo([ verbo([
verbo([cacacacaçççouçououou|A|A|A|A],A).],A).],A).],A).
O artigo em
[o,rato]pode ser reconhecido pelo fato já declarado anteriormente
e, para reconhecer este novo substantivo, podemos usar o fato:
substantivo([ substantivo([substantivo([
substantivo([ratoratoratorato|A|A|A|A],A).],A).],A).],A).
Aqui também podemos notar que, para reconhecer o predicado da frase, é
necessário reconhecer um verbo, seguido de um artigo e um substantivo. Isto pode
ser indicado pela regra:
predicado(A,D) : predicado(A,D) : predicado(A,D) :
predicado(A,D) :--- verbo(A,B), artigo(B,C), substantivo(C,D).- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).
Finalmente, para reconhecer uma frase, podemos usar a regra:
frase(A,C) : frase(A,C) :frase(A,C) :
Reconhecimento de frases
Exemplo 1. Especificação completa da gramática
Exemplo 1. Especificação completa da gramática
frase frase frase
frase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C). sujeito
sujeito sujeito
sujeito(A,C) :(A,C) :(A,C) :(A,C) :---- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C). predicado
predicado predicado
predicado(A,D) :(A,D) :(A,D) :(A,D) :---- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D). artigo
artigo artigo
artigo([([([o([oo|Ao|A|A|A],A).],A).],A).],A). substantivo
substantivo substantivo
substantivo([([([gato([gatogato|Agato|A|A|A],A).],A).],A).],A). substantivo
substantivo substantivo
substantivo([([([rato([ratorato|Arato|A|A|A],A).],A).],A).],A). verbo
verbo verbo
verbo([([([([cacacacaççouççououou|A|A|A|A],A).],A).],A).],A). frase
frase frase
frase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).
sujeito sujeito sujeito
sujeito(A,C) :(A,C) :(A,C) :(A,C) :---- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).
predicado predicado predicado
predicado(A,D) :(A,D) :(A,D) :(A,D) :---- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).
artigo artigo artigo
artigo([([([([oooo|A|A|A|A],A).],A).],A).],A).
substantivo substantivo substantivo
substantivo([([([([gatogatogatogato|A|A|A|A],A).],A).],A).],A).
substantivo substantivo substantivo
substantivo([([([([ratoratoratorato|A|A|A|A],A).],A).],A).],A).
verbo verbo verbo
verbo([([([([cacacacaççouççououou|A|A|A|A],A).],A).],A).],A).
Exercício 1. Uso da gramática para reconhecimento de frases
Exercício 1.
Uso da gramática para reconhecimento de frases
Digite a gramática do Exemplo 1 e faça as consultas a seguir:
?- artigo([o,gato,caçou,o,rato],R). ?- sujeito([o,gato,caçou,o,rato],R). ?- frase([o,gato,caçou,o,rato],[]). ?- frase([o,gato,rato,o,caçou],[]). ?- frase([o,rato,caçou,o,gato],[]). ?- frase([gato,caçou,rato],[]).Digite a gramática do Exemplo 1 e faça as consultas a seguir:
?- artigo([o,gato,caçou,o,rato],R). ?- sujeito([o,gato,caçou,o,rato],R). ?- frase([o,gato,caçou,o,rato],[]). ?- frase([o,gato,rato,o,caçou],[]). ?- frase([o,rato,caçou,o,gato],[]). ?- frase([gato,caçou,rato],[]).
Reconhecimento de frases
? ??
?---- frase(frase(frase(frase([o,gato,ca[o,gato,ca[o,gato,ca[o,gato,caççou,o,rato]ççou,o,rato]ou,o,rato],[])ou,o,rato],[]),[]),[])....
/* 1 */ /* 1 */ /* 1 */
/* 1 */ frasefrasefrasefrase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C).
/* 2 */ /* 2 */ /* 2 */
/* 2 */ sujeitosujeitosujeitosujeito(A,C) :(A,C) :(A,C) :(A,C) :--- artigo(A,B), substantivo(B,C).- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).
/* 3 */ /* 3 */ /* 3 */
/* 3 */ predicadopredicadopredicadopredicado(A,D) :(A,D) :(A,D) :-(A,D) :--- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).
/* 4 */ /* 4 */ /* 4 */
/* 4 */ artigoartigoartigo([artigo([([o([o|Aoo|A|A],A).|A],A).],A).],A).
/* 5 */ /* 5 */ /* 5 */
/* 5 */ substantivosubstantivosubstantivo([substantivo([([([gatogato|Agatogato|A|A|A],A).],A).],A).],A).
/* 6 */ /* 6 */ /* 6 */
/* 6 */ substantivosubstantivosubstantivo([substantivo([([([ratorato|Aratorato|A|A|A],A).],A).],A).],A).
/* 7 */ /* 7 */ /* 7 */
/* 7 */ verboverboverbo([verbo([([([cacacacaççouççouou|Aou|A|A|A],A).],A).],A).],A).
/* 1 */ /* 1 */ /* 1 */
/* 1 */ frasefrasefrasefrase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). /* 2 */
/* 2 */ /* 2 */
/* 2 */ sujeitosujeitosujeitosujeito(A,C) :(A,C) :(A,C) :(A,C) :--- artigo(A,B), substantivo(B,C).- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C). /* 3 */
/* 3 */ /* 3 */
/* 3 */ predicadopredicadopredicadopredicado(A,D) :(A,D) :-(A,D) :(A,D) :--- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D). /* 4 */
/* 4 */ /* 4 */
/* 4 */ artigoartigoartigoartigo([([([([oooo|A|A],A).|A|A],A).],A).],A). /* 5 */
/* 5 */ /* 5 */
/* 5 */ substantivosubstantivosubstantivosubstantivo([([([([gatogatogatogato|A|A|A|A],A).],A).],A).],A). /* 6 */
/* 6 */ /* 6 */
/* 6 */ substantivosubstantivosubstantivosubstantivo([([([([ratoratoratorato|A|A|A|A],A).],A).],A).],A). /* 7 */
/* 7 */ /* 7 */
/* 7 */ verboverboverboverbo([([([([cacacacaççouççououou|A|A|A|A],A).],A).],A).],A).
? ? ?
?---- sujeito(sujeito([o,gato,casujeito(sujeito([o,gato,ca[o,gato,ca[o,gato,caççou,o,rato]ççou,o,rato]ou,o,rato]ou,o,rato],B,B,B,B1111)))), predicado(B, predicado(B, predicado(B, predicado(B1111,[]).,[]).,[]).,[]).
? ??
?---- artigo(artigo(artigo(artigo([o,gato,ca[o,gato,ca[o,gato,ca[o,gato,caççççou,o,rato]ou,o,rato],Bou,o,rato]ou,o,rato],B,B,B2222)))), substantivo(B, substantivo(B, substantivo(B, substantivo(B2222,B,B,B,B1111), predicado(B), predicado(B), predicado(B), predicado(B1111,[]).,[]).,[]).,[]).
? ??
?---- substantivo(substantivo(substantivo(substantivo([gato,ca[gato,caç[gato,ca[gato,caççou,o,rato]çou,o,rato]ou,o,rato]ou,o,rato],B,B,B,B1111)))), predicado(B, predicado(B, predicado(B, predicado(B1111,[]).,[]).,[]).,[]).
? ? ?
?---- predicado(predicado([capredicado(predicado([ca[ca[caççou,o,rato]ççou,o,rato]ou,o,rato]ou,o,rato],[]),[]),[]),[])....
? ??
?---- verbo(verbo(verbo(verbo([ca[ca[ca[caçççou,o,rato]çou,o,rato],Bou,o,rato]ou,o,rato],B,B,B3333)))), artigo(B, artigo(B, artigo(B, artigo(B3333,C,C,C,C3333), substantivo(C), substantivo(C), substantivo(C), substantivo(C3333,[]).,[]).,[]).,[]).
? ??
?---- artigo(artigo(artigo(artigo([o,rato][o,rato][o,rato][o,rato],C,C,C,C3333)))), substantivo(C, substantivo(C, substantivo(C, substantivo(C3333,[]).,[]).,[]).,[]).
? ??
Reconhecimento de frases
? ??
?---- frase(frase(frase(frase([o,gato,rato,o,ca[o,gato,rato,o,ca[o,gato,rato,o,ca[o,gato,rato,o,caççou]ççou]ou]ou],[]),[]),[]),[])....
/* 1 */ /* 1 */ /* 1 */
/* 1 */ frasefrasefrasefrase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C).
/* 2 */ /* 2 */ /* 2 */
/* 2 */ sujeitosujeitosujeitosujeito(A,C) :(A,C) :(A,C) :(A,C) :--- artigo(A,B), substantivo(B,C).- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).
/* 3 */ /* 3 */ /* 3 */
/* 3 */ predicadopredicadopredicadopredicado(A,D) :(A,D) :(A,D) :-(A,D) :--- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).
/* 4 */ /* 4 */ /* 4 */
/* 4 */ artigoartigoartigo([artigo([([o([o|Aoo|A|A],A).|A],A).],A).],A).
/* 5 */ /* 5 */ /* 5 */
/* 5 */ substantivosubstantivosubstantivo([substantivo([([([gatogato|Agatogato|A|A|A],A).],A).],A).],A).
/* 6 */ /* 6 */ /* 6 */
/* 6 */ substantivosubstantivosubstantivo([substantivo([([([ratorato|Aratorato|A|A|A],A).],A).],A).],A).
/* 7 */ /* 7 */ /* 7 */
/* 7 */ verboverboverbo([verbo([([([cacacacaççouççouou|Aou|A|A|A],A).],A).],A).],A).
/* 1 */ /* 1 */ /* 1 */
/* 1 */ frasefrasefrasefrase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). sujeito(A,B), predicado(B,C). /* 2 */
/* 2 */ /* 2 */
/* 2 */ sujeitosujeitosujeitosujeito(A,C) :(A,C) :(A,C) :(A,C) :--- artigo(A,B), substantivo(B,C).- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C). /* 3 */
/* 3 */ /* 3 */
/* 3 */ predicadopredicadopredicadopredicado(A,D) :(A,D) :-(A,D) :(A,D) :--- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D). /* 4 */
/* 4 */ /* 4 */
/* 4 */ artigoartigoartigoartigo([([([([oooo|A|A],A).|A|A],A).],A).],A). /* 5 */
/* 5 */ /* 5 */
/* 5 */ substantivosubstantivosubstantivosubstantivo([([([([gatogatogatogato|A|A|A|A],A).],A).],A).],A). /* 6 */
/* 6 */ /* 6 */
/* 6 */ substantivosubstantivosubstantivosubstantivo([([([([ratoratoratorato|A|A|A|A],A).],A).],A).],A). /* 7 */
/* 7 */ /* 7 */
/* 7 */ verboverboverboverbo([([([([cacacacaççouççououou|A|A|A|A],A).],A).],A).],A).
? ??
?---- sujeito(sujeito(sujeito(sujeito([o,gato,rato,o,ca[o,gato,rato,o,caç[o,gato,rato,o,ca[o,gato,rato,o,caççou]çou]ou]ou],B,B,B,B1111)))), predicado(B, predicado(B, predicado(B, predicado(B1111,[]).,[]).,[]).,[]).
? ? ?
?---- artigo(artigo([o,gato,rato,o,caartigo(artigo([o,gato,rato,o,ca[o,gato,rato,o,ca[o,gato,rato,o,caççççou]ou],Bou]ou],B,B,B2222)))), substantivo(B, substantivo(B, substantivo(B, substantivo(B2222,B,B,B,B1111), predicado(B), predicado(B), predicado(B), predicado(B1111,[]).,[]).,[]).,[]).
? ? ?
?---- substantivo(substantivo([gato,rato,o,casubstantivo(substantivo([gato,rato,o,caç[gato,rato,o,ca[gato,rato,o,caççou]çou]ou]ou],B,B,B,B1111)))), predicado(B, predicado(B, predicado(B, predicado(B1111,[]).,[]).,[]).,[]).
? ? ?
?---- predicado(predicado([rato,o,capredicado(predicado([rato,o,ca[rato,o,ca[rato,o,caççou]ççou]ou],[])ou],[]),[]),[])....
? ? ?
?---- verbo(verbo([rato,o,caverbo(verbo([rato,o,ca[rato,o,caç[rato,o,caççou]çou],Bou]ou],B,B,B3333)))), artigo(B, artigo(B, artigo(B, artigo(B3333,C,C,C,C3333), substantivo(C), substantivo(C), substantivo(C), substantivo(C3333,[]).,[]).,[]).,[]).
Geração de frases
Exemplo 1. A gramática completa
Exemplo 1. A gramática completa
frase frase frase
frase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C). sujeito
sujeito sujeito
sujeito(A,C) :(A,C) :(A,C) :(A,C) :---- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C). predicado
predicado predicado
predicado(A,D) :(A,D) :(A,D) :(A,D) :---- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D). artigo
artigo artigo
artigo([([([o([oo|Ao|A|A|A],A).],A).],A).],A). substantivo
substantivo substantivo
substantivo([([([gato([gatogato|Agato|A|A|A],A).],A).],A).],A). substantivo
substantivo substantivo
substantivo([([([rato([ratorato|Arato|A|A|A],A).],A).],A).],A). verbo
verbo verbo
verbo([([([([cacacacaççouççououou|A|A|A|A],A).],A).],A).],A). frase
frase frase
frase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).
sujeito sujeito sujeito
sujeito(A,C) :(A,C) :(A,C) :(A,C) :---- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).
predicado predicado predicado
predicado(A,D) :(A,D) :(A,D) :(A,D) :---- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).
artigo artigo artigo
artigo([([([([oooo|A|A|A|A],A).],A).],A).],A).
substantivo substantivo substantivo
substantivo([([([([gatogatogatogato|A|A|A|A],A).],A).],A).],A).
substantivo substantivo substantivo
substantivo([([([([ratoratoratorato|A|A|A|A],A).],A).],A).],A).
verbo verbo verbo
verbo([([([([cacacacaççouççououou|A|A|A|A],A).],A).],A).],A).
Exercício 2. Uso da gramática para geração de frases
Exercício 2.
Uso da gramática para geração de frases
Faça as consultas a seguir, que geram todas as frases da linguagem definida pela
gramática do Exemplo 1:
? ? ?
?---- frase(F,[]).frase(F,[]).frase(F,[]).frase(F,[]). ?
? ?
?--- forall- forallforallforall( ( ( ( frasefrase(F,[]), frasefrase(F,[]), (F,[]), (F,[]), writelnwritelnwritelnwriteln(F) ).(F) ).(F) ).(F) ).
Faça as consultas a seguir, que geram todas as frases da linguagem definida pela
gramática do Exemplo 1:
? ? ?
?---- frase(F,[]).frase(F,[]).frase(F,[]).frase(F,[]). ?
? ?
Geração de frases
Exemplo 1. A gramática completa
Exemplo 1. A gramática completa
frase frase frase
frase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C). sujeito
sujeito sujeito
sujeito(A,C) :(A,C) :(A,C) :(A,C) :---- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C). predicado
predicado predicado
predicado(A,D) :(A,D) :(A,D) :(A,D) :---- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D). artigo
artigo artigo
artigo([([([o([oo|Ao|A|A|A],A).],A).],A).],A). substantivo
substantivo substantivo
substantivo([([([gato([gatogato|Agato|A|A|A],A).],A).],A).],A). substantivo
substantivo substantivo
substantivo([([([rato([ratorato|Arato|A|A|A],A).],A).],A).],A). verbo
verbo verbo
verbo([([([([cacacacaççouççououou|A|A|A|A],A).],A).],A).],A). frase
frase frase
frase(A,C) :(A,C) :(A,C) :(A,C) :---- sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).sujeito(A,B), predicado(B,C).
sujeito sujeito sujeito
sujeito(A,C) :(A,C) :(A,C) :(A,C) :---- artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).artigo(A,B), substantivo(B,C).
predicado predicado predicado
predicado(A,D) :(A,D) :(A,D) :(A,D) :---- verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).verbo(A,B), artigo(B,C), substantivo(C,D).
artigo artigo artigo
artigo([([([([oooo|A|A|A|A],A).],A).],A).],A).
substantivo substantivo substantivo
substantivo([([([([gatogatogatogato|A|A|A|A],A).],A).],A).],A).
substantivo substantivo substantivo
substantivo([([([([ratoratoratorato|A|A|A|A],A).],A).],A).],A).
verbo verbo verbo
verbo([([([([cacacacaççouççououou|A|A|A|A],A).],A).],A).],A).
Exercício 3. Ampliação do léxico da gramática
Exercício 3.
Ampliação do léxico da gramática
Altere a definição da gramática do Exemplo 1, adicionando o artigo
um
um
um
um
e o verbo
assustou
assustou
assustou
assustou
. Em seguida, faça as consultas a seguir:
?? ?
?---- frase(F,[]).frase(F,[]).frase(F,[]).frase(F,[]). ?
? ?
?--- forall- forallforallforall( ( ( ( frasefrase(F,[]), frasefrase(F,[]), (F,[]), (F,[]), writelnwritelnwritelnwriteln(F) ).(F) ).(F) ).(F) ).
Altere a definição da gramática do Exemplo 1, adicionando o artigo
um
um
um
um
e o verbo
assustou
assustou
assustou
assustou
. Em seguida, faça as consultas a seguir:
? ? ?
?---- frase(F,[]).frase(F,[]).frase(F,[]).frase(F,[]). ?
? ?
Notação DCG (Definite Clause Grammar)
Exemplo 2. Uma gramática em notação DCG
Exemplo 2. Uma gramática em notação DCG
frase frase frase
frase --->-->> sujeito, predicado.> sujeito, predicado.sujeito, predicado.sujeito, predicado. sujeito
sujeito sujeito
sujeito ---> artigo, substantivo.--> artigo, substantivo.> artigo, substantivo.> artigo, substantivo. predicado
predicado predicado
predicado ---> verbo, artigo, substantivo.> verbo, artigo, substantivo.> verbo, artigo, substantivo.> verbo, artigo, substantivo. artigo artigo artigo artigo ---> [> [> [> [oooo].].].]. substantivo substantivo substantivo
substantivo ---> [> [> [> [gatogato] | [gatogato] | [] | [] | [ratoratoratorato].].].]. verbo
verbo verbo
verbo ---> [--> [> [ca> [caçcacaççouçououou].].].]. frase
frase frase
frase ---->---->> sujeito, predicado.> sujeito, predicado.sujeito, predicado.sujeito, predicado.
sujeito sujeito sujeito
sujeito ----> artigo, substantivo.----> artigo, substantivo.> artigo, substantivo.> artigo, substantivo.
predicado predicado predicado
predicado ---> verbo, artigo, substantivo.> verbo, artigo, substantivo.> verbo, artigo, substantivo.> verbo, artigo, substantivo.
artigo artigo artigo artigo ---> [> [> [> [oooo].].].]. substantivo substantivo substantivo
substantivo ---> [--> [> [> [gatogatogatogato] | [] | [] | [] | [ratoratoratorato].].].].
verbo verbo verbo
verbo ----> [----> [> [> [caçcacacaççouçououou].].].].
Exercício 4. Análise do resultado da compilação da notação DCG
Exercício 4.
Análise do resultado da compilação da notação DCG
Digite a gramática do Exemplo 2, compile e faça a consulta a seguir:
?? ?
?---- listing.listing.listing.listing.
Digite a gramática do Exemplo 2, compile e faça a consulta a seguir:
? ? ?
?---- listing.listing.listing.listing.
A linguagem Prolog oferece uma notação, denominada DCG, que facilita a
especificação de gramáticas. Ao ser compilada, uma gramática em notação DCG é
automaticamente transformada em uma gramática usando diferença de listas.
Categorias gramaticais
Em PLN, é bastante comum o uso de termos técnicos para designar categorias
gramaticais. Alguns destes termos são os seguintes:
s ss
s
: sintagma sentencial (frase)
sn snsn sn: sintagma nominal
sv svsv sv: sintagma verbal
det detdetdet
: determinante (artigo)
n nn n: nome (substantivo)
adj adjadj adj: adjetivo
v vv v: verbo
vi vivi vi: verbo intransitivo
vt vtvt vt: verbo transitivo
adv advadv adv: advérbio
A fim de simplificar a notação, usaremos estes termos na especificação das
próximas gramáticas.
Categorias gramaticais
Exemplo 3. Gramática G1
Exemplo 3. Gramática G1
s s s s ---> sn, sv.--> sn, sv.> sn, sv.> sn, sv. sn sn snsn ---> det, n, adj.--> det, n, adj.> det, n, adj.> det, n, adj. sv
sv sv
sv ---> vi, adv.--> vi, adv.> vi, adv.> vi, adv. sv
sv sv
sv ---> vt, adv, sn.--> vt, adv, sn.> vt, adv, sn.> vt, adv, sn. det det det det ---> [--> [> [o> [ooo].].].]. n n n
n ---> [--> [> [gato> [gato] | [gatogato] | [] | [rato] | [ratorato].rato].].]. adj
adj adj
adj ---> [] | [--> [] | [> [] | [gordo> [] | [gordo] | [gordogordo] | [] | [] | [magromagromagromagro].].].]. vi
vi vi
vi ---> [--> [> [ca> [cacacaççouççououou] | [] | [] | [] | [dormiudormiudormiudormiu].].].]. vt
vt vt
vt ---> [--> [> [ca> [caçcacaççouçououou]. ]. ]. ]. adv
adv adv
adv ---> [] | [--> [] | [> [] | [silenciosamente> [] | [silenciosamentesilenciosamentesilenciosamente].].].].
s s s s ---> sn, sv.--> sn, sv.> sn, sv.> sn, sv. sn sn sn
sn ---> det, n, adj.--> det, n, adj.> det, n, adj.> det, n, adj. sv
sv sv
sv ---> vi, adv.--> vi, adv.> vi, adv.> vi, adv. sv
sv sv
sv ---> vt, adv, sn.--> vt, adv, sn.> vt, adv, sn.> vt, adv, sn. det det det det ---> [--> [> [> [oooo].].].]. n n n
n ----> [----> [> [> [gatogatogatogato] | [] | [] | [] | [ratoratoratorato].].].]. adj
adj adj
adj ----> [] | [----> [] | [> [] | [> [] | [gordogordogordogordo] | [] | [] | [] | [magromagromagromagro].].].]. vi
vi vi
vi ----> [----> [> [> [cacacacaçççouçououou] | [] | [] | [] | [dormiudormiudormiudormiu].].].]. vt vt vt vt ----> [----> [> [> [cacaçcacaççouçououou]. ]. ]. ]. adv adv adv
adv ---> [] | [--> [] | [> [] | [> [] | [silenciosamentesilenciosamentesilenciosamentesilenciosamente].].].].
Exercício 5. Teste da gramática G1
Exercício 5.
Teste da gramática G1
Gere e analise todas as frases da linguagem definida pela gramática G1.
Dependência de contexto
Exemplo 4. Gramática G2
Exemplo 4. Gramática G2
s s s s ---> sn, sv.--> sn, sv.> sn, sv.> sn, sv. sn sn snsn ---> det, n.--> det, n.> det, n.> det, n. sv sv sv sv ---> v, sn.--> v, sn.> v, sn.> v, sn. det det det det ---> [--> [> [o> [ooo].].].]. n n n
n ---> [--> [> [gato> [gato] | [gatogato] | [] | [rato] | [ratorato].rato].].]. v
v v
v ---> [--> [> [ca> [caçcacaççouçououou].].].].
s s s s ---> sn, sv.--> sn, sv.> sn, sv.> sn, sv. sn sn sn
sn ---> det, n.--> det, n.> det, n.> det, n. sv sv sv sv ---> v, sn.--> v, sn.> v, sn.> v, sn. det det det det ---> [--> [> [> [oooo].].].]. n n n
n ----> [----> [> [> [gatogatogatogato] | [] | [] | [] | [ratoratoratorato].].].]. v
v v
v ----> [----> [> [> [cacaçcacaççouçououou].].].].
Exercício 6. Ampliação da gramática com gênero feminino
Exercício 6.
Ampliação da gramática com gênero feminino
Amplie a gramática G2, adicionando o artigo a e os substantivos gata e rata. Em
seguida, gere e analise todas as frases definidas pela gramática alterada.
Amplie a gramática G2, adicionando o artigo a e os substantivos gata e rata. Em
seguida, gere e analise todas as frases definidas pela gramática alterada.
A dependência de contexto ocorre quando uma palavra da frase deve concordar com
outras palavras da mesma frase.
A dependência de contexto ocorre quando uma palavra da frase deve concordar com
outras palavras da mesma frase.
Dependência de contexto
Exemplo 5. Gramática com concordância de gênero G3
Exemplo 5. Gramática com concordância de gênero G3
s s s s ---> sn, sv.> sn, sv.> sn, sv.> sn, sv. sn sn sn
sn ---> det(> det(> det(> det(GG), n(GG), n(), n(), n(GGGG).).).). sv sv sv sv ---> v, sn.> v, sn.> v, sn.> v, sn. det( det( det( det(mmm) m) ) ) ----> [----> [> [> [oooo].].].]. det( det( det( det(fff) f) ) ) ----> [----> [> [> [aaaa].].].]. n( n( n(
n(mmmm) ) ) ) ---> [> [gato> [> [gatogatogato] | [] | [] | [] | [ratoratoratorato].].].]. n(
n( n(
n(ffff) ) ) ) ---> [> [gata> [> [gatagatagata] | [] | [] | [] | [ratarataratarata].].].]. v
v v
v ---> [> [> [> [cacaçcacaçççououou].ou].].].
s s s s ---> sn, sv.> sn, sv.> sn, sv.> sn, sv. sn sn sn
sn ---> det(--> det(> det(> det(GGGG), n(), n(), n(), n(GGGG).).).). sv sv sv sv ---> v, sn.> v, sn.> v, sn.> v, sn. det( det( det( det(mmmm) ) ) ) ----> [----> [> [> [oooo].].].]. det( det( det( det(ffff) ) ) ) ----> [----> [> [> [aaaa].].].]. n( n( n(
n(mmmm) ) ) ) ---> [> [> [> [gatogatogatogato] | [] | [] | [] | [ratoratoratorato].].].]. n(
n( n(
n(ffff) ) ) ) ---> [> [> [> [gatagatagatagata] | [] | [] | [] | [ratarataratarata].].].]. v
v v
v ---> [--> [> [> [cacaçcacaçççouououou].].].].
Exercício 7. Gramática com concordância de gênero
Exercício 7.
Gramática com concordância de gênero
Gere e analise todas as frases definidas pela gramática G3.
Gere e analise todas as frases definidas pela gramática G3.
Exercício 8. Ampliação do léxico
Exercício 8.
Ampliação do léxico
Adicione os artigos indefinidos
um
um
um
um
e
uma
uma
uma
uma
e gere as frases definidas pela gramática.
Dependência de contexto
Exercício 9. Ampliação da gramática com plural
Exercício 9.
Ampliação da gramática com plural
Amplie a gramática G4, adicionando:
os artigos: os, uns, as, umas
os substantivos: gatos, ratos, gatas, ratas
o verbo: caçaram
Em seguida, gere e analise todas as frases definidas pela nova gramática.
Amplie a gramática G4, adicionando:
os artigos: os, uns, as, umas
os substantivos: gatos, ratos, gatas, ratas
o verbo: caçaram
Em seguida, gere e analise todas as frases definidas pela nova gramática.
Exemplo 6. Gramática G4
Exemplo 6. Gramática G4
s s s s ---> sn, sv.> sn, sv.> sn, sv.> sn, sv. sn sn snsn ---> det(> det(> det(> det(GG), n(GG), n(), n(), n(GGGG).).).). sv sv sv sv ---> v, sn.> v, sn.> v, sn.> v, sn. det( det( det(
det(mmm) m) ) ) ---> [> [o> [> [ooo] | [] | [] | [um] | [umumum].].].]. det(
det( det(
det(fff) f) ) ) ---> [> [a> [> [aaa] | [] | [] | [uma] | [umaumauma].].].]. n(
n( n(
n(mmmm) ) ) ) ---> [> [gato> [> [gatogatogato] | [] | [] | [] | [ratoratoratorato].].].]. n(
n( n(
n(ffff) ) ) ) ---> [> [gata> [> [gatagatagata] | [] | [] | [] | [ratarataratarata].].].]. v
v v
v ---> [> [> [> [cacaçcacaçççououou].ou].].].
s s s s ---> sn, sv.> sn, sv.> sn, sv.> sn, sv. sn sn sn
sn ---> det(--> det(> det(> det(GGGG), n(), n(), n(), n(GGGG).).).). sv sv sv sv ---> v, sn.> v, sn.> v, sn.> v, sn. det( det( det( det(mmmm) ) ) ) ---> [> [> [> [oooo] | [] | [] | [] | [umumumum].].].]. det( det( det(
det(ffff) ) ) ) ---> [> [> [> [aaaa] | [] | [] | [] | [umaumaumauma].].].]. n(
n( n(
n(mmmm) ) ) ) ---> [> [> [> [gatogatogatogato] | [] | [] | [] | [ratoratoratorato].].].]. n(
n( n(
n(ffff) ) ) ) ---> [> [> [> [gatagatagatagata] | [] | [] | [] | [ratarataratarata].].].]. v
v v
Dependência de contexto
Exercício 10. Teste da gramática G5
Exercício 10.
Teste da gramática G5
Gere e analise todas as frases definidas pela gramática G5.
Gere e analise todas as frases definidas pela gramática G5.
Exemplo 7. Gramática G5
Exemplo 7. Gramática G5
s s s s ---> sn(> sn(> sn(N> sn(N), sv(NN), sv(), sv(), sv(NNNN).).).). sn( sn( sn(sn(NNNN) ) ) --) ---> det(> det(> det(G> det(GGG,,N,,NNN), n(), n(), n(G), n(G,GG,,,NNN).N).).). sv( sv( sv( sv(NNNN) ) ) --) ---> v(> v(N> v(> v(NN), sn(N), sn(), sn(), sn(___)._).).). det( det( det(
det(mmm,m,,,sss) s) ) ) ----> [----> [> [o> [ooo] | [] | [um] | [] | [umumum].].].]. det(
det( det(
det(mmm,m,,,ppp) p) ) ) ----> [----> [> [os> [ososos] | [] | [uns] | [] | [unsunsuns].].].]. det(
det( det(
det(fff,f,,,sss) s) ) ) ----> [----> [> [a> [aaa] | [] | [uma] | [] | [umaumauma].].].]. det(
det( det(
det(fff,f,,,ppp) p) ) ) ----> [----> [> [as> [asasas] | [] | [umas] | [] | [umasumasumas].].].]. n(
n( n(
n(mmmm,,,,sss) s) ) ) ----> [----> [> [gato> [gatogatogato] | [] | [rato] | [] | [ratoratorato].].].]. n(
n( n(
n(mmmm,,,,ppp) p) ) ) ----> [----> [> [gatos> [gatosgatosgatos] | [] | [ratos] | [] | [ratosratosratos].].].]. n(
n( n(
n(ffff,,,,sss) s) ) ) ----> [----> [> [gata> [gatagatagata] | [] | [rata] | [] | [rataratarata].].].]. n(
n( n(
n(ffff,,,,ppp) p) ) ) ----> [----> [> [gatas> [gatasgatasgatas] | [] | [ratas] | [] | [ratasratasratas].].].]. v(
v( v(
v(ssss) ) ) ) ---> [> [ca> [> [cacacaççççouououou].].].]. v(
v( v(
v(pppp) ) ) ) ---> [> [ca> [> [cacacaççççaramaramaramaram].].].].
s s s s ---> sn(--> sn(> sn(> sn(NNNN), sv(), sv(), sv(), sv(NNNN).).).). sn( sn( sn(
sn(NNNN) ) --) ) ---> det(> det(> det(> det(GGGG,,,,NNNN), n(), n(), n(), n(GGGG,,,,NNNN).).).). sv( sv( sv( sv(NNNN) --) ) ) ---> v(> v(> v(> v(NNNN), sn(), sn(), sn(), sn(____).).).). det( det( det( det(mmmm,,,,ssss) ) ) ) ----> [----> [> [> [oooo] | [] | [] | [] | [umumumum].].].]. det( det( det(
det(mmmm,,,,pppp) ) ) ) ----> [----> [> [> [osososos] | [] | [] | [] | [unsunsunsuns].].].]. det(
det( det(
det(ffff,,,,ssss) ) ) ) ----> [----> [> [> [aaaa] | [] | [] | [] | [umaumaumauma].].].]. det(
det( det(
det(ffff,,,,pppp) ) ) ) ----> [----> [> [> [asasasas] | [] | [] | [] | [umasumasumasumas].].].]. n(
n( n(
n(mmmm,,,,ssss) ) ) ) ----> [----> [> [> [gatogatogatogato] | [] | [] | [] | [ratoratoratorato].].].]. n(
n( n(
n(mmmm,,,,pppp) ) ) ) ----> [----> [> [> [gatosgatosgatosgatos] | [] | [] | [] | [ratosratosratosratos].].].]. n(
n( n(
n(ffff,,,,ssss) ) ) ) ----> [----> [> [> [gatagatagatagata] | [] | [] | [] | [ratarataratarata].].].]. n(
n( n(
n(ffff,,,,pppp) ) ) ) ----> [----> [> [> [gatasgatasgatasgatas] | [] | [] | [] | [ratasratasratasratas].].].]. v( v( v( v(ssss) ) ) ) ---> [> [> [> [cacacacaççççouououou].].].]. v( v( v(
Construção de árvore sintática
A árvore sintática de uma sentença é uma árvore em que:
1 – a raiz é rotulada com o símbolo inicial da gramática
2 – as folhas são rotuladas com símbolos terminais da gramática
3 – os demais nós são rotulados com símbolos não-terminais da gramática
4 – a relação entre nós é definida pelas regras de produção da gramática
•Exemplo:
s s s s ---> sn, sv.--> sn, sv.> sn, sv.> sn, sv. sn sn snsn ---> det, n.--> det, n.> det, n.> det, n. sv sv sv sv ---> v, sn.--> v, sn.> v, sn.> v, sn. det det det det ---> [--> [> [> [oooo].].].]. n n n
n ----> [----> [> [> [gatogatogatogato] | [] | [] | [] | [ratoratoratorato].].].]. v v v v ---> [--> [> [> [caçcacacaççouçououou].].].]. s ss s rato ratorato rato ca caca caççççouououou oooo o oo
o gatogatogatogato
det det det det det detdet det nnnn vvvv nnnn sn sn sn sn svsvsvsv
Construção de árvore sintática
Exemplo 8. Gramática G6
Exemplo 8. Gramática G6
s( s( s(s(s(A,B)s(A,B)s(A,B)s(A,B)) ) ) --) ---> sn(A), sv(B).> sn(A), sv(B).> sn(A), sv(B).> sn(A), sv(B). sn(
sn( sn(
sn(sn(A,B)sn(A,B)sn(A,B)sn(A,B)) ) ) ) ---> det(A), n(B).> det(A), n(B).> det(A), n(B).> det(A), n(B). sv(
sv( sv(
sv(sv(A,B)sv(A,B)sv(A,B)sv(A,B)) ) ) ) ---> v(A), sn(B).> v(A), sn(B).> v(A), sn(B).> v(A), sn(B). det(
det( det(
det(det(o)det(o)det(o)) det(o)) ) ) ----> [----> [> [> [oooo].].].]. n(
n( n(
n(n(A)n(A)n(A)n(A)) ) ) --) --> [----> [> [> [AAAA], { ], { ], { member], { member(membermember((A(AAA,[,[,[gato,[gato,gatogato,,,ratoratoratorato]) }.]) }.]) }.]) }. v(
v( v(
v(v(cav(cav(cav(caçççou)çou)ou)ou)) ) ) ) ----> [----> [> [> [cacacacaççouççouou].ou].].].
s( s( s(
s(s(A,B)s(A,B)s(A,B)s(A,B)) ) --) ) ---> sn(A), sv(B).> sn(A), sv(B).> sn(A), sv(B).> sn(A), sv(B). sn(
sn( sn(
sn(sn(A,B)sn(A,B)sn(A,B)sn(A,B)) ) ) ) ---> det(A), n(B).> det(A), n(B).> det(A), n(B).> det(A), n(B). sv(
sv( sv(
sv(sv(A,B)sv(A,B)sv(A,B)sv(A,B)) ) ) ) ---> v(A), sn(B).> v(A), sn(B).> v(A), sn(B).> v(A), sn(B). det(
det( det(
det(det(o)det(o)det(o)det(o)) ) ) ) ----> [----> [> [> [oooo].].].]. n(
n( n(
n(n(A)n(A)n(A)n(A)) ) --) ) ---> [> [> [> [AAAA], { ], { member], { ], { membermembermember((((AAAA,[,[,[,[gatogatogatogato,,,,ratoratoratorato]) }.]) }.]) }.]) }. v(
v( v(
v(v(cav(cav(cav(caçççou)çou)ou)ou)) ) ) ) ----> [----> [> [> [cacacacaççouççououou].].].].
Exercício 11. Construção de árvore sintática
Exercício 11.
Construção de árvore sintática
Digite a gramática G6 e faça as consultas a seguir:
?? ?
?---- s(A,s(A,s(A,s(A,[o,gato,ca[o,gato,caç[o,gato,ca[o,gato,caçççou,o,rato]ou,o,rato]ou,o,rato],[]).ou,o,rato],[]).,[]).,[]). ?
? ?
?---- s(A,F,[]).s(A,F,[]).s(A,F,[]).s(A,F,[]).
Digite a gramática G6 e faça as consultas a seguir:
? ? ?
?--- s(A,- s(A,s(A,s(A,[o,gato,ca[o,gato,caç[o,gato,ca[o,gato,caçççou,o,rato]ou,o,rato]ou,o,rato]ou,o,rato],[]).,[]).,[]).,[]). ?
? ?
?---- s(A,F,[]).s(A,F,[]).s(A,F,[]).s(A,F,[]).