INQUER - Interacção Pessoa-Máquina em Linguagem Natural

Propaganda
DEPARTAMENTO DE INFORMÁTICA
Faculdade de Ciências - Universidade de Lisboa
Bloco C5 - Piso 1 - Campo Grande, 1700 Lisboa
Tel & Fax: 351.1.7500084
RELATÓRIO DE ESTÁGIO
realizado no âmbito do projecto
INQUER – Interacção Pessoa-Máquina
em Linguagem Natural
MÓDULO I – Análise Sintáctico - Semântica
CLG – Grupo de Computação do Conhecimento
Léxico-Gramatical
CENTRO DE LINGUÍSTICA DA
UNIVERSIDADE DE LISBOA
Catarina Santiago Ribeiro
Lisboa, Março de 2003
Universidade de Lisboa
Faculdade de Ciências
DEPARTAMENTO DE INFORMÁTICA
Faculdade de Ciências - Universidade de Lisboa
Bloco C5 - Piso 1 - Campo Grande, 1700 Lisboa
Tel & Fax: 351.1.7500084
RELATÓRIO DE ESTÁGIO
realizado no âmbito do projecto
INQUER – Interacção Pessoa-Máquina
em Linguagem Natural
MÓDULO I – Análise Sintáctico - Semântica
CLG – Grupo de Computação do Conhecimento Léxico-Gramatical
CENTRO DE LINGUÍSTICA DA
UNIVERSIDADE DE LISBOA
Catarina Santiago Ribeiro
Responsável pela FCUL: Prof. Doutor António Branco
Responsável pelo CLUL: Prof.ª Doutora Palmira Marrafa
Lisboa, Março de 2003
Resumo
O interesse em sistemas de pergunta-resposta tem vindo a aumentar nos últimos anos com a
expansão de novas tecnologias na área das bases de dados e da Internet. O aumento da informação
disponível torna necessário o desenvolvimento de sistemas que permitam uma interacção com o
utilizador de forma mais natural e eficaz.
Nos últimos anos, a necessidade de desenvolver sistemas de pergunta-resposta tem vindo a crescer
à medida que cresce o interesse por parte de investigadores, empresas e utilizadores. Estes
sistemas, ao contrário do que o que acontece nos sistemas de extracção de informação
convencionais, permitem a inserção de perguntas em língua natural e devolvem respostas também
em língua natural em vez de apresentarem listas de documentos.
Na sua forma mais simples, que é lidar com interrogativas totais polares, estes sistemas têm de ser
capazes de determinar o valor de verdade da proposição que está em causa. Um sistema de
pergunta-resposta capaz de lidar com qualquer tipo de estrutura interrogativa (descrito numa dada
gramática computacional) em qualquer contexto (fornecido por uma dada base de dados) tem de
compreender a pergunta de uma forma não trivial.
O projecto INQUER tem como objectivo o desenvolvimento de um sistema deste genéro que
permita a extracção de informação contida na WordNet.PT. O desenvolvimento deste sistema foi
dividido em módulos, respeitando este relatório ao Módulo I – Análise Sintáctico – Semântica.
Índice
Índice
1. INTRODUÇÃO ..............................................................................................................................11
1.1 INSTITUIÇÃO DE ACOLHIMENTO .....................................................................................11
1.2 INTERACÇÃO PESSOA-MÁQUINA EM LINGUAGEM NATURAL – INQUER.................16
1.3 ESTRUTURA DO RELATÓRIO FINAL DE ESTÁGIO.........................................................17
2. OBJECTIVOS DO ESTÁGIO E CONTEXTO DO TRABALHO ................................................19
2.1 OBJECTIVOS DO ESTÁGIO.................................................................................................19
2.2 CONTEXTO DO TRABALHO...............................................................................................19
3. METODOLOGIA E CALENDARIZAÇÃO DO TRABALHO.....................................................23
3.1 METODOLOGIA ...................................................................................................................23
3.2 CALENDARIZAÇÃO DO TRABALHO ................................................................................23
4. ESTUDO SOBRE A WORDNET.PT .............................................................................................29
5. MÉTODO DE PROCESSAMENTO DAS PERGUNTAS .............................................................31
6. LINGUAGEM DE PROGRAMAÇÃO ..........................................................................................33
7. ESCOLHA DO PARSER................................................................................................................35
7.1 ESTRATÉGIAS DE ANÁLISE...............................................................................................35
7.2 PARSER ESCOLHIDO...........................................................................................................36
8. FORMALISMOS SINTÁCTICO E SEMÂNTICO .......................................................................39
8.1 FORMALISMO SINTÁCTICO ..............................................................................................39
8.2 FORMALISMO SEMÂNTICO...............................................................................................41
9. TIPOS DE PERGUNTAS...............................................................................................................47
9.1 QUESTIONÁRIO ...................................................................................................................47
9.2 RESULTADOS OBTIDOS .....................................................................................................47
9.3 TRATAMENTO DOS RESULTADOS ...................................................................................48
10. BASE DE DADOS LEXICAL ......................................................................................................51
10.1 EXPRESSÕES NOMINAIS SIMPLES .................................................................................52
10.3 EXPRESSÕES NOMINAIS QUE SELECCIONAM COMPLEMENTO................................54
10.2 EXPRESSÕES VERBAIS.....................................................................................................55
10.4 OUTRAS EXPRESSÕES......................................................................................................55
11. A GRAMÁTICA ...........................................................................................................................57
11.1 META-ENTRADAS LEXICAIS...........................................................................................58
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
7
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
11.2 REGRAS LEXICAIS ............................................................................................................72
11.3 REGRAS SINTAGMÁTICAS ..............................................................................................73
12. ALGORITMO DE CONVERSÃO ...............................................................................................93
13. CONCLUSÕES E TRABALHO FUTURO..................................................................................95
13.1 TRABALHO FUTURO..........................................................................................................95
REFERÊNCIAS..................................................................................................................................97
ANEXOS...........................................................................................................................................101
ANEXO 1 – AVALIAÇÃO DOS PARSERS .............................................................................103
ANEXO 2 – QUESTIONÁRIO..................................................................................................113
ANEXO 3 – LISTA DE PERGUNTAS RECEBIDAS .............................................................115
ANEXO 4 – EXCERTO DA BASE DE DADOS LEXICAL ....................................................119
ANEXO 5 – MECANISMO DE HERANÇA DE TRAÇOS.........................................................123
ANEXO 6 – IMPLEMENTAÇÃO DA GRAMÁTICA ..................................................................125
ANEXO 7 – EXEMPLOS DO PROCESSAMENTO SINTÁCTICO E SEMÂNTICO DE
INTERROGATIVAS................................................................................................145
ANEXO 8 – IMPLEMENTAÇÃO DO ALGORITMO DE CONVERSÃO ....................................149
ANEXO 9 – EXEMPLOS DA REPRESENTAÇÃO SEMÂNTICA DE INTERROGATIVAS EM
PORTUGUÊS UTILIZANDO O ALGORITMO DE CONVERSÃO .........................157
8
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Índice de Figuras, Quadros e Regras Sintagmáticas
Índice de Figuras, Quadros e Regras Sintagmáticas
FIGURAS
FIGURA 1 – RELAÇÃO HIPERONÍMIA/HIPONÍMIA ......................................................................................29
FIGURA 2 – ESQUEMA GERAL DO MÓDULO I ...........................................................................................57
FIGURA 3 – META-ENTRADA LEXICAL ....................................................................................................58
FIGURA 4 – REGRA SINTAGMÁTICA ........................................................................................................73
FIGURA 5 – REPRESENTAÇÃO EM ÁRVORE DA ESTRUTURA SINTÁCTICA ADOPTADA PARA AS ADJUNÇÕES A
N’........................................................................................................................................77
FIGURA 6 – EXEMPLO DA APLICAÇÃO DA REGRA SINTAGMÁTICA 3 .........................................................78
FIGURA 7 – REPRESENTAÇÃO DA ESTRUTURA SINTÁCTICA ADOPTADA PARA A ADJUNÇÃO DO
QUANTIFICADOR “TODOS” A N’’............................................................................................80
FIGURA 8 – REPRESENTAÇÃO EM ÁRVORE DA ESTRUTURA SINTÁCTICA ADOPTADA PARA A ADJUNÇÃO DO
OPERADOR DE NEGAÇÃO A SV ..............................................................................................81
FIGURA 9 – REPRESENTAÇÃO EM ÁRVORE DA ESTRUTURA SINTÁCTICA ADOPTADA PARA AS
CONJUNÇÕES ....................................................................................................................... 84
FIGURA 10 – REPRESENTAÇÃO EM ÁRVORE DA ESTRUTURA SINTÁCTICA ADOPTADA PARA O
ESPECIFICADOR-NÚCLEO .......................................................................................................87
QUADROS
QUADRO 1– CALENDARIZAÇÃO DO PLANO .............................................................................................23
QUADRO 2 – TEMPO DA ANÁLISE DAS FRASES.........................................................................................37
QUADRO 3 – CORRESPONDÊNCIA ENTRE SÍMBOLOS LPO E OPERADORES DEFINIDOS PARA A
REPRESENTAÇÃO EM PROLOG ............................................................................................42
QUADRO 4 – REPRESENTAÇÃO SEMÂNTICA DE QUANTIFICADORES ..........................................................44
QUADRO 5 – TRAÇOS DAS EXPRESSÕES NOMINAIS SIMPLES .....................................................................53
QUADRO 6 – TRAÇOS DAS EXPRESSÕES NOMINAIS QUE SELECCIONAM COMPLEMENTOS ...........................54
QUADRO 7 – TRAÇOS DAS EXPRESSÕES VERBAIS ....................................................................................55
QUADRO 8 – TRAÇOS DE OUTRAS EXPRESSÕES PRESENTES NA BASE DE DADOS LEXICAL...........................56
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
9
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
REGRAS SINTAGMÁTICAS
REGRA SINTAGMÁTICA 1 – PROMOÇÃO DE X PARA X’............................................................................74
REGRA SINTAGMÁTICA 2 – ORAÇÕES RELATIVAS RESTRITIVAS ...............................................................74
REGRA SINTAGMÁTICA 3 – ADJUNÇÃO DE UM MODIFICADOR (SP/VR) A UM N’
UM N’ ’
E DE UM QUANTIFICADOR A
.........................................................................................................76
REGRA SINTAGMÁTICA 4 – ADJUNÇÃO DA NEGAÇÃO A SV .....................................................................81
REGRA SINTAGMÁTICA 5 – SNS MARCADOS ...........................................................................................83
REGRA SINTAGMÁTICA 6 – COORDENAÇÕES ..........................................................................................84
REGRA SINTAGMÁTICA 7 – ESPECIFICADOR - NÚCLEO ............................................................................87
REGRA SINTAGMÁTICA 8 – VERBO EXISTIR COM INVERSÃO DE SUJEITO ...................................................89
REGRA SINTAGMÁTICA 9 – GAP À DIREITA DE UM NÚCLEO VERBAL ........................................................90
REGRA SINTAGMÁTICA 10 – PREDICADOS COM UM COMPLEMENTO IN SITU .............................................90
10
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Introdução
1. Introdução
O presente estágio insere-se no 5º ano da Licenciatura em Engenharia da Linguagem e do Conhecimento
da Faculdade de Letras e da Faculdade de Ciências da Universidade de Lisboa. É nesta última instituição
que, através do departamento de informática (http://www.di.fc.ul.pt/), o estágio está inscrito.
O estágio tem a duração de seis meses com início a 1 de Setembro de 2002 e fim a 28 de Fevereiro de
2003. A Prof. Doutora Palmira Marrafa1 é a orientadora por parte da instituição de acolhimento, sendo o
Prof. Doutor António Branco2 co-orientador por parte do departamento de informática.
1.1 INSTITUIÇÃO DE ACOLHIMENTO
O estágio decorreu numa unidade de investigação, mais especificamente, no Grupo de Computação do
Conhecimento Léxico-Gramatical – CLG, do Centro de Linguística da Universidade de Lisboa (CLUL),
situado no Complexo Interdisciplinar da Universidade de Lisboa.
1.1.1 CENTRO DE LINGUÍSTICA DA UNIVERSIDADE DE LISBOA – CLUL
1.1.1.1 HISTÓRIA
O Centro de Linguística da Universidade de Lisboa – CLUL, homologado oficialmente em Maio de 1976
como adstrito ao Instituto Nacional de Investigação Científica (INIC), continua o Centro de Estudos
Filológicos (CEF), criado em 1932 na dependência do Instituto de Alta Cultura. Apesar do seu nome e da
estreita relação que desde a sua criação mantém com a Universidade de Lisboa, nunca esteve, de facto,
ligado a qualquer departamento dessa universidade, tendo desde sempre procurado preservar a sua
identidade e a sua autonomia em matéria de planeamento e execução da actividade científica, como forma
de garantir as condições e as estruturas básicas para uma actividade de investigação e desenvolvimento
planeada a longo prazo e de carácter interdisciplinar. Aquando da extinção do INIC, a sua dimensão, o
seu riquíssimo património e a especificidade dos trabalhos nele realizados justificaram a manutenção de
um estatuto de autonomia relativa e a sua integração na Universidade de Lisboa como centro de
investigação directamente dependente da Reitoria, estando ainda em curso as diligências necessárias para
homologação de estatutos próprios, condizentes com esta nova situação.
1
A Profª Doutora Palmira Marrafa é Professora do Departamento de Linguística Geral e Românica, da Faculdade de
Letras da Universidade de Lisboa, sendo docente da Licenciatura em Engenharia da Linguagem e do Conhecimento, e
directora e coordenadora científica do CLG.
2
O Prof. Doutor António Branco é Professor do Departamento de Informática, da Faculdade de Ciências da
Universidade de Lisboa, sendo docente da Licenciatura em Engenharia da Linguagem e do Conhecimento.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
11
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
1.1.1.2 OBJECTIVOS E ESTRUTURA
O Centro de Linguística da Universidade de Lisboa – CLUL (http://www.clul.ul.pt/) é uma unidade que
depende directamente da Reitoria da Universidade de Lisboa e se dedica à investigação, formação e
divulgação científicas. Tem como principais objectivos a realização de actividades de investigação e de
desenvolvimento experimental nas áreas da Linguística e a promoção e realização de investigação
interdisciplinar, associando às áreas especificamente linguísticas áreas afins, nomeadamente a da
Filologia, Antropologia e Engenharia da linguagem e do Conhecimento. Contribui para a formação de
investigadores nessas áreas e para o conhecimento da língua portuguesa, apoiando a sua divulgação
formação.
Actualmente, conta com cinco grupos de investigação a saber: Fala, Linguística de Corpus, Computação
do Conhecimento Gramatical (CLG), Variação e Filologia. Fazem parte deste centro cerca de 50
investigadores, assistentes e professores repartidos pelos vários grupos dependendo da área da sua
especialidade.
Projectos do grupo de Fala:
-
Estudo sobre a Relação entre Factores Segmentais e Prosódicos em Português Europeu;
-
DIXI+: Um Sintetizador Texto-para-Fala em Português para Comunicação Alternativa e
Aumentativa;
-
Alguns aspectos da Fonologia do Português no Quadro Auto-Segmental.
Projectos do grupo de Linguística de Corpus:
-
Recursos Linguísticos Disponíveis (RLD): Corpora e Léxicos;
-
CRPC – Corpus de Referência do Português Contemporâneo;
-
C-ORAL-ROM – Integrated Reference Corpora for Spoken Romance Languages;
-
Recursos Linguísticos para o Português: um corpus e instrumentos para a sua consulta e análise;
-
Léxico Multifuncional Computorizado do Português Contemporâneo;
-
SIMPLE – Semantic Information for Multifunctional Plurilingual Lexica;
-
Tábuas de concordâncias, uma ferramenta para o estudo da língua portuguesa;
-
Análise Sintáctica e Semântica dos Verbos Psicológicos do Português, Passagens Semânticas e
Homonímia;
-
AUDIOLING-LP Língua Portuguesa: som e pronúncia;
-
Estudo do uso e do Significado da Preposição DE em Contextos Nominais SN DE SN;
-
Ensino de Aspectos de Morfologia e de Sintaxe do Português Língua Materna;
-
ENABLER: European National Activities for Basic Language Resources.
Projectos do grupo de Computação do Conhecimento Léxico-Gramatical:
12
-
WordNet.PT – Rede Semântica-Lexical da Língua Portuguesa;
-
PROGRAM – Laboratório de Processamento Gramatical;
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Introdução
-
TFNL – Teorias Formais das Línguas Naturais: Fundamentos Conceptuais, Arquitecturas e
Computação.
-
LexNet – Especificação de Padrões de Lexicalização para uma Extensão da WordNet.PT
-
A interface léxico-enciclopédia na construção de léxicos computacionais
-
INQUER – Interacção Pessoa – Máquina em linguagem natural
Projectos do grupo de Variação:
-
ALEPG – Atlas Linguístico-Etnográfico de Portugal e da Galiza;
-
ALEAç – Atlas Linguístico e Etnográfico dos Açores;
-
ALLP – Atlas Linguístico do Litoral Português;
-
ALiR – Atlas Linguistique Roman;
-
ALE – Atlas Linguarum Europae;
-
Linguagens Fronteiriças: Mirandês;
-
Linguagens Fronteiriças: Barranquenho;
-
CORDIAL-SIN – Corpus Dialectal com Anotação Sintáctica;
-
Estudo das Variantes Flexionais do Verbo em Português Continental Falado.
Projectos do grupo de Filologia:
-
DRA: Dicionário de Regionalismos e Arcaísmos;
-
Estudos de Lírica Galego-Portuguesa;
-
Bibliografia da Prosa Medieval em Língua Portuguesa;
-
Filologia Medieval;
-
Filologia do Manuscrito Moderno;
-
Fontes para a História do Português Clássico;
-
Onomástico Português e Românico.
1.1.1.3 ÓRGÃOS DE GESTÃO
Assembleia Plenária
A Assembleia Plenária é o órgão representativo máximo do CLUL. À Assembleia Plenária compete:
aprovar e propor superiormente eventuais alterações estatutárias;
eleger os vogais da Comissão Directiva e decidir da sua eventual substituição ou destituição;
discutir quaisquer assuntos que lhe sejam submetidos pelo Conselho Científico, pela Comissão
Directiva ou por iniciativa de um terço dos seus membros.
Conselho Científico
O Conselho Científico é o órgão responsável pela definição e pela condução da política científica do
CLUL, compreendendo a planificação, a orientação e a coordenação, nas suas grandes linhas, das
actividades sectoriais.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
13
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
Compete ao Conselho Científico:
definir, criar ou reestruturar os sectores de investigação do CLUL;
orientar e estimular a actividade do CLUL;
discutir e aprovar os programas dos sectores, seus projectos de investigação e actividades
complementares;
apreciar e aprovar os planos e relatórios anuais e plurianuais de actividade científica;
planificar as acções de formação do CLUL;
emitir directrizes gerais relativas às actividades da biblioteca, do serviço de documentação, do
serviço de edições e de quaisquer outros serviços que no CLUL venham a ser criados;
aprovar os acordos e convénios de incidência científica e pedagógica entre o CLUL e quaisquer
outras entidades;
fazer propostas relativas à aquisição de equipamentos e de material bibliográfico e documental.
Comissão Directiva
A Comissão Directiva é o órgão de gestão administrativa e financeira do CLUL. É composta por quatro
membros, um presidente e três vogais. Os vogais são eleitos pela Assembleia Plenária. As funções de
Presidente da Comissão Directiva são desempenhadas, por inerência, pelo Coordenador Científico do
CLUL.
Compete à Comissão Directiva:
velar pelo cumprimento da lei e dos estatutos e dirigir os serviços;
executar, dentro das possibilidades orçamentais, as deliberações da Assembleia Plenária e do
Conselho Científico e coordenar toda a actividade inerente à gestão administrativa e financeira
ou relativa ao património do CLUL;
assegurar a realização de todas as eleições previstas nos estatutos;
elaborar e/ou aprovar os orçamentos e os relatórios de contas anuais ou plurianuais, de acordo
com as prioridades definidas pelo Conselho Científico;
executar as políticas definidas pelo Conselho Científico e elaborar os planos de desenvolvimento
do CLUL;
propor a abertura de concursos de admissão ou de promoção de pessoal não científico e propor
as respectivas nomeações e contratações;
deliberar sobre as aquisições necessárias ao bom funcionamento do CLUL e promovê-las;
aceitar liberalidades feitas ao CLUL.
14
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Introdução
Coordenador Científico
O Coordenador Científico é, por inerência, Presidente da Comissão Directiva, sendo eleito pelo Conselho
Científico.
Compete ao Coordenador Científico:
convocar o Conselho Científico e presidir às suas reuniões;
dar publicidade às deliberações do Conselho Científico e promover a discussão das que não
forem directamente cometidas a outros membros do Conselho;
coordenar as actividades do CLUL e assegurar a elaboração dos planos, relatórios anuais e
plurianuais de actividade científica;
fomentar a discussão das grandes opções programáticas;
supervisionar a negociação de acordos ou convénios entre CLUL e quaisquer outras entidades,
cabendo-lhe propor ao Conselho Científico a sua aprovação;
presidir aos júris de concursos de admissão ou promoção de pessoal científico do CLUL.
1.1.2 GRUPO DE COMPUTAÇÃO DO CONHECIMENTO LÉXICOGRAMATICAL – CLG
A Prof. Doutora Palmira Marrafa é a coordenadora deste grupo, que tem como principais linhas de
investigação (i) a modelização computacional das línguas naturais e (ii) o estudo dos fundamentos
conceptuais das teorias formais das línguas naturais.
A primeira destas linhas subdivide-se em semântica lexical do Português e modelização das línguas
naturais, e sistemas de parsing. No âmbito do primeiro subdomínio estão em fase de desenvolvimento três
projectos dos quais se destaca, pela sua importância neste estágio, o projecto WordNet.PT. Este projecto
visa a construção de uma Base de Dados Lexicais susceptível de ser utilizada em várias aplicações no
âmbito da Linguística Computacional e da Engenharia da Linguagem, tais como instrumentos de apoio ao
ensino do Português, tradução automática, busca de informação com base em perguntas em Português,
interfaces em Português, etc. Os resultados deste projecto estão já, em parte, gratuitamente disponíveis na
Internet (http://www.clul.ul.pt/WordNet/index.html).
Ainda dentro deste domínio está em fase de desenvolvimento o projecto LexNet – Especificação de
Padrões de Lexicalização para uma Extensão da WordNet.PT– e o projecto “A interface léxicoenciclopédica na construção de léxicos computacionais”.
No domínio da modelização das línguas naturais e sistemas de parsing estão a ser desenvolvidas várias
dissertações de doutoramento e monografias, enquadradas no projecto PROGRAM –Laboratório de
Processamento Gramatical, que envolve a modelização e a computação de diversos fenómenos
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
15
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
gramaticais e análise comparativa de algoritmos de parsing para diferentes quadros de representação
gramatical.
Da segunda grande linha de investigação (ii) destaca-se o projecto TFNL-Teorias Formais das Línguas
Naturais: Fundamentos Conceptuais, Arquitecturas e Computação, no âmbito do qual está a ser
desenvolvida uma cartografia conceptual comparativa das ferramentas e dos temas mais importantes nas
arquitecturas das teorias formais das línguas naturais.
1.2 INTERACÇÃO PESSOA-MÁQUINA EM LINGUAGEM NATURAL – INQUER
A estagiária integrou uma equipa de dois elementos que tinha como objectivo o planeamento e
desenvolvimento da primeira fase de um projecto denominado INQUER – Interacção Pessoa-Máquina
em Linguagem Natural. Este projecto destina-se a desenvolver um sistema de pergunta-resposta em
Linguagem Natural que permitirá a interacção entre o utilizador e a máquina, sendo que esta última
responderá a questões simples sobre o mundo real. Para isso o sistema utilizará a WordNet.PT que contém
informação suficiente e organizada de forma a facilitar a busca e extracção dessa mesma informação.
O sistema INQUER será um recurso tecnológico capaz de explorar as potencialidades da WordNet.PT
uma vez que permitirá um fácil acesso à informação aí descrita. Para além disso, será também uma
ferramenta linguística, na medida em que recebe perguntas em linguagem natural e as analisa de forma a
construir uma representação semântica capaz de permitir a extracção da informação relevante. Embora
esta ferramenta tenha sido pensada para a exploração de recursos da WordNet.PT, os mecanismos e
metodologias que utiliza podem ser facilmente adaptáveis a outro tipo de base de dados.
O desenvolvimento deste sistema foi subdividido em três grandes módulos sendo, nesta primeira fase,
implementados apenas dois. O primeiro módulo consiste na implementação de um analisador sintáctico
de perguntas em Linguagem Natural e de um gerador de representações semânticas adequadas, de forma a
serem utilizadas no Módulo II – Inferência. Nesse módulo será pesquisada e extraída a informação
necessária à elaboração da resposta, sendo o resultado utilizado no módulo III para a construção de uma
resposta em língua natural – Geração (módulo não desenvolvido nesta fase do projecto).
Devido à modularidade deste sistema é necessária uma constante interacção entre os responsáveis pela
implementação dos diferentes módulos. Assim, durante todo o desenvolvimento desta fase do projecto
houve um trabalho de equipa que cabe salientar.
16
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Introdução
A importância deste projecto, assim como a sua complexidade, fazem com que o seu desenvolvimento
não se limite aos 6 meses de duração do estágio, sendo que outras fases de desenvolvimento estão já a ser
planeadas (nomeadamente a fase da Geração).
Os objectivos gerais do desenvolvimento desta primeira fase do projecto passam pelos seguintes itens:
1.
Enriquecimento da base de dados extraída da WordNet.PT
2.
Construção de um sistema de análise de estruturas gramaticais
3.
Construção de um sistema de busca e extracção de informação
4.
Construção de uma interface que permita a introdução de perguntas em língua natural e devolva
uma resposta
1.3 ESTRUTURA DO RELATÓRIO FINAL DE ESTÁGIO
Neste relatório são apresentadas todas as opções tomadas durante a construção do módulo I, da
responsabilidade da estagiária, que no que respeita à implementação quer no que respeita à motivação
linguística.
No capítulo seguinte – Objectivos do estágio e contexto do trabalho – são apresentados os objectivos
do estágio, o plano de trabalho inicialmente delineado, assim como uma pequena descrição de todas as
suas fases.
No capítulo 3 – Metodologia e calendarização do trabalho – é apresentada a calendarização inicial do
plano descrito no capítulo 2, as alterações ao plano inicial e a justificação dessas mesmas alterações.
No capítulo 4 – Estudo sobre a WordNet.PT – é apresentada brevemente a base de dados de
conhecimento linguístico que serve de base de dados ao sistema.
Nos capítulos seguintes são apresentadas e justificadas as várias opções tomadas para a implementação da
do sistema. No capítulo 5 – Método de processamento das perguntas – é descrita a opção tomada para
o tratamento das perguntas introduzidas pelo utilizador.
No capítulo 6 – Linguagem de programação – é apresentada a justificação para a escolha da linguagem
de programação escolhida para a implementação do sistema. O capítulo 7 – A escolha do parser –
descreve as razões que levaram à escolha do parser a utilizar neste sistema.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
17
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
No capítulo 8 – Formalismos Sintáctico e Semântico – é justificada a escolha dos formalismos
adoptados no desenvolvimento deste sistema. No Capítulo 9 – Tipos de Perguntas – são apresentados os
vários tipos de construções interrogativas aceites pelo sistema nesta primeira fase, assim como a
justificação para a sua preferência em relação a outros.
No Capítulo 10 – Base de dados lexical – é descrito todo o processo de escolha e tratamento dos lexemas
que constituem a base de dados lexical deste sistema. O Capítulo 11 – A Gramática – descreve a
implementação da gramática deste sistema, assim como a justificação de todas as opções tomadas do
ponto de vista linguístico.
No capítulo 12 – Algoritmo de conversão – é apresentado o algoritmo que recebe uma interrogativa em
língua natural e devolve uma ou mais representações semânticas adequadas.
Por fim, no Capítulo 13 – Conclusões e Trabalho Futuro – é feita uma análise crítica ao trabalho
efectuado e apontadas as perspectivas para um trabalho futuro.
18
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Objectivos do estágio e contexto do trabalho
2. Objectivos do estágio e contexto do trabalho
2.1 OBJECTIVOS DO ESTÁGIO
O projecto INQUER pretende desenvolver um sistema de interacção Pessoa-Máquina em Linguagem
Natural utilizando como base a WordNet.PT, que está a ser desenvolvida no CLG.
Devido à dimensão de um sistema deste tipo, foi necessária a sua divisão em três módulos distintos –
Análise Sintáctico-Semântica, Inferência e Geração –, sendo, nesta fase, desenvolvidos apenas os dois
primeiros. Cada um dos módulos foi atribuído a um dos elementos de uma equipa constituída para o
desenvolvimento deste projecto.
A estagiária integrou esta equipa a 1 de Setembro de 2002, tendo lhe sido atribuído o desenvolvimento do
módulo I – Análise Sintáctico-Semântica. Este módulo centra-se, concretamente, na selecção e
modelização de estruturas sintácticas e envolve a implementação de um programa que receba como input
uma pergunta em linguagem natural, faça uma análise sintáctica dessa mesma pergunta e construa uma
representação semântica simplificada. Os objectivos gerais deste módulo são:
1.
Escolha do tipo de perguntas a tratar numa primeira fase
2.
Enriquecimento da base de dados
3.
Estudo sobre as várias opções de modelização e implementação possíveis (formalismos
sintáctico e semântico e parser)
4.
Construção de uma gramática capaz de dar conta da análise sintáctica e semântica das
construções interrogativas definidas no ponto 1
Para se proceder à concretização deste módulo foi necessária uma pesquisa prévia sobre os trabalhos já
desenvolvidos nesta área assim como um estudo de formalismos computacionais de representação da
sintaxe e da semântica. Foi também necessário estudar bibliografia sobre a WordNet.PT.
2.2 CONTEXTO DO TRABALHO
O projecto INQUER surge no seguimento do projecto WordNet.PT também desenvolvido pelo CLG. Este
projecto permitirá o desenvolvimento de uma ferramenta que potenciará as virtualidades da WordNet.PT
enquanto recurso linguístico, e que permitirá uma pesquisa da informação aí contida de forma fácil e
natural.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
19
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
No desenvolvimento deste projecto estão envolvidas diversas áreas científicas, como é o caso da Lógica,
da Semântica, da Sintaxe, da Inteligência Artificial e da Engenharia da Linguagem, o que lhe confere o
interesse e os riscos acrescidos da multidisciplinaridade.
O plano que se segue apresenta as várias fases da implementação deste módulo, assim como uma breve
descrição dos seus objectivos.
1.
Definição do plano
1.1.
Estudo da arquitectura geral do projecto WordNet.PT
Selecção e estudo de bibliografia essencial sobre a arquitectura do projecto WordNet.PT, como
base para a concepção e organização do projecto INQUER.
1.2.
Concepção do projecto INQUER
1.2.1.
Planificação do projecto
1.2.2.
Divisão do projecto em três módulos autónomos
1.2.3.
Atribuição de tarefas diferentes a cada elemento da equipa de investigação
Esta fase do estágio passa pela integração dos estagiários no CLG – Grupo de Computação do
Conhecimento Léxico-Gramatical, e pela planificação do projecto INQUER.
2.
Definição do formato das perguntas
2.1.
Levantamento dos vários tipos de perguntas possíveis
Caracterização informal dos vários tipos de interrogativas do Português, relativamente ao tipo de
resposta pretendida.
2.2.
Primeira abordagem das várias estratégias de implementação
Reflexão, com base nos pontos anteriores, sobre a forma como cada um dos tipos de perguntas
estudados anteriormente pode ser tratado no âmbito da aplicação em desenvolvimento.
2.3.
Selecção dos tipos de perguntas a tratar numa primeira fase do projecto
Tendo em conta as considerações tecidas no ponto anterior, propõe-se, numa primeira fase, a
implementação de apenas alguns dos tipos de interrogativas. A razão desta selecção prende-se
com o facto de a informação necessária para responder a alguns dos tipo de questões não estar
definida ou estruturada na base de dados. Neste contexto, a informação necessária para responder
a todos os tipos de questões teria ainda de ser inserida manualmente na base de dados, o que está
fora do âmbito deste trabalho.
20
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Objectivos do estágio e contexto do trabalho
3.
Avaliação dos formalismos gramaticais
3.1.
Pesquisa dos formalismos disponíveis.
Nesta fase procede-se a um levantamento de vários tipos de formalismos existentes para a
construção de gramáticas.
3.2.
Estudo e análise aprofundada de cada formalismo.
Neste ponto, avaliam-se as vantagens e as desvantagens dos diferentes formalismos, fazendo uma
comparação entre eles.
3.3.
Selecção do formalismo gramatical
Na sequência do trabalho desenvolvido nas etapas anteriores, selecciona-se o formalismo
gramatical mais apropriado para o tratamento do problema em questão.
4.
Tratamento do léxico
4.1.
Selecção do léxico a tratar
Neste ponto são escolhidos os domínios semânticos do léxico a tratar. A razão desta escolha tem
como principal motivação o facto de a WordNet.PT ainda não ter todos os seus domínios
revistos.
4.2 Extracção e tratamento do léxico da base de dados
Este ponto consiste no tratamento manual do léxico de modo a que este possa ser utilizado pela
aplicação em desenvolvimento. Utiliza-se a WordNet.PT como principal fonte de entradas
lexicais.
5.
Representação sintáctica e semântica da frase
5.1.
Construção da Gramática
Com base no formalismo escolhido e na arquitectura do léxico, constroem-se as regras da
gramática, definindo a estrutura sintáctica das perguntas a serem reconhecidas pelos sistema.
5.2.
Integração da representação semântica na Gramática
Nesta fase elabora-se um estudo sobre métodos de representação semântica e selecciona-se
aquele que melhor se adapta ao problema em questão. Seguidamente procede-se à inclusão da
representação semântica na gramática.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
21
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
6.
Avaliação dos parsers
6.1.
Pesquisa dos parsers disponíveis.
Neste ponto pesquisa-se e recolhe-se informação sobre os vários tipos de parsers que existem e
sobre os vários métodos de pesquisa que estes podem adoptar.
6.2.
Estudo aprofundado de cada parser e comparações entre eles.
Esta fase consiste no levantamento das vantagens e desvantagens de cada parser, assim como dos
métodos de pesquisa mais eficientes para a análise de uma frase.
6.3.
Selecção do parser
Nesta fase é escolhido o parser a utilizar na análise das frases, tendo como base as informações
recolhidas no ponto anterior.
6.4.
Construção do parser
Este ponto consiste na construção do parser escolhido, com base na gramática e no léxico.
7.
Dos termos em linguagem natural aos predicados Prolog
7.1.
Determinação dos termos
Neste ponto, e com base nas observações do ponto 1, identificaram-se os termos em linguagem
natural e estabeleceram-se correspondências termos – relações WordNet.PT – predicados Prolog
8.
Construção de um algoritmo capaz de converter uma pergunta em Linguagem Natural
uma forma lógica
8.1.
Implementação de um algoritmo de conversão
Nesta fase constrói-se um algoritmo que converta uma pergunta em linguagem natural, dada pelo
utilizador, numa forma lógica que represente a semântica, utilizando os mecanismos
anteriormente referidos.
9.
Integração do Módulo I no projecto INQUER
9.1.
Integração do Módulo I
Este ponto consiste na junção deste módulo aos restantes módulos do projecto INQUER, de
forma a obter-se uma aplicação coerente e funcional.
10. Elaboração do Relatório Final
10.1.
Elaboração do Relatório
Nesta fase procede-se à elaboração de um relatório final contendo uma descrição pormenorizada
de todas as fases do trabalho desenvolvido, bem como dos resultados obtidos.
22
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Metodologia e calendarização do trabalho
3. Metodologia e calendarização do trabalho
3.1 METODOLOGIA
Tratando-se de um estágio na área da investigação, a metodologia adoptada consistiu no estudo de
trabalhos já realizados na área, levantamento dos problemas encontrados e pesquisa de soluções possíveis.
No entanto, como este projecto envolve também uma fase de implementação de uma ferramenta
computacional, foi necessário utilizar metodologias adequadas ao desenvolvimento de software. Essas
metodologias passaram pela escolha da linguagem de programação mais adequada, pela especificação do
programa, pela implementação e pela fase de testes.
3.2 CALENDARIZAÇÃO DO TRABALHO
FASE
DATA INÍCIO
DATA FIM
1. Definição do plano
1 de Setembro 2002
20 de Setembro de 2002
2. Definição do formato das perguntas
21 de Setembro de 2002
31 de Outubro de 2002
3. Avaliação dos formalismos gramaticais
26 de Setembro de 2002
8 de Outubro de 2002
4. Tratamento do léxico
9 de Outubro de 2002
20 de Novembro de 2002
sintácticas
16 de Novembro de 2002
10 de Dezembro de 2002
6. Avaliação dos parsers
11 de Dezembro de 2002
5 de Janeiro de 2003
6 de Janeiro de 2003
10 de Fevereiro de 2003
11 de Fevereiro de 2003
15 de Fevereiro de 2003
16 de Fevereiro de 2003
28 de Fevereiro de 2003
5. Implementação de algumas estruturas
7. Implementação das restantes estruturas
sintácticas e das estruturas semânticas
8. Construção de um algoritmo capaz de
converter uma pergunta em Linguagem
Natural para uma forma lógica
9. Elaboração do Relatório Final
Quadro 1– Calendarização do plano
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
23
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
1. Definição do plano
1.1 Integração da estagiária no CLG
1.2 Estudo da arquitectura geral do projecto WordNet.PT
1.3 Concepção do projecto INQUER
Esta fase do desenvolvimento do projecto decorreu entre o dia 1 e o dia 20 de Setembro de 2002. Teve
como principal objectivo a integração da estagiária no CLG, onde lhe foi apresentada a equipa de trabalho
assim como os recursos informáticos e linguísticos disponíveis. Desses recursos, destacam-se aqueles que
foram utilizados pela estagiária no desenvolvimento do projecto:
1. Pentium MMX 350 MHz 64 RAM
1. Windows NT WorkStation version 4.0
2. SWI Prolog 5.0.9 (freeware version)
3. NoteTabLigth 4.91 (freeware version)
4. Polaris 1.5.0
5. Detonador de Perspectiva Export WordNet
Ainda durante esta fase procedeu-se a um estudo da arquitectura geral do projecto WordNet.PT que serve
de base a todo o sistema INQUER. Este estudo incluiu a leitura de vários documentos e publicações,
assim como um primeiro contacto com a base de conhecimento lexical. Este estudo foi fundamental para
a concepção e planificação do projecto INQUER feita nesta fase. Procedeu-se ainda à divisão do projecto
em módulos e à distribuição de tarefas pelos elementos da equipa. Fez também parte desta fase o
tratamento de toda a parte burocrática do estágio assim como uma primeira planificação do
desenvolvimento do módulo atribuído à estagiária.
2.
Definição do formato das perguntas
2.1 Elaboração de um questionário em formato HTML
2.2 Selecção do tipo de perguntas a implementar numa primeira fase do projecto
Esta fase do projecto iniciou-se a 21 de Setembro prolongando-se até ao fim de Outubro. Procedeu-se à
elaboração de um pequeno questionário, que permitisse a recolha de um pequeno corpus de interrogativas
que eventuais utilizadores pudessem colocar ao sistema (Capítulo 9). A recolha desses dados prolongouse até à última semana de Outubro, altura em que se procedeu à análise desses mesmos dados. Em
seguida fez-se a caracterização informal dos vários tipos de perguntas recebidas, relativamente à sua
estrutura sintáctica e/ou ao tipo de resposta pretendida. Destas perguntas seleccionaram-se algumas que
seriam objecto de implementação.
24
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Metodologia e calendarização do trabalho
3.
Avaliação dos formalismos gramaticais
3.1 Pesquisa dos formalismos disponíveis.
3.2 Estudo e análise de cada formalismo.
3.3 Selecção do formalismo gramatical
De 26 de Setembro a 8 de Outubro fez-se alguma investigação sobre trabalhos já realizados e em curso na
área de sistemas de pergunta-resposta. Esta pesquisa teve como principal objectivo o estudo das várias
estratégias de implementação utilizadas assim como dos resultados obtidos. Ainda neste período
procedeu-se ao levantamento dos vários formalismos gramaticais disponíveis para o desenvolvimento do
submódulo da sintaxe na gramática do sistema. Esse levantamento foi essencial para a escolha do
formalismo a adoptar.
4.
Tratamento do léxico
4.1 Selecção dos domínios do léxico a tratar
4.1 Extracção do léxico da base de dados
4.2 Escolha da informação lexical relevante e enriquecimento da base de dados lexical
4.3 Enriquecimento da base de dados lexical com palavras não extraídas da WordNet.PT
Esta fase iniciou-se a 9 de Outubro e prolongou-se até 20 de Novembro de 2002. Inicialmente estava
previsto durar apenas até 7 de Novembro, mas a quantidade de informação que teve de ser introduzida
manualmente (ver Capítulo 10) obrigou à sua extensão. Por outro lado, os resultados obtidos através do
questionário revelaram a necessidade de acrescentar algumas entradas lexicais que não constavam dos
domínios inicialmente extraídos da WordNet.PT.
5.
Implementação de algumas estruturas sintácticas
5.1 Estudo e selecção da linguagem de programação
5.2 Especificação do programa
5.3 Implementação de algumas construções sintácticas
De 16 de Novembro a 10 de Dezembro foram implementadas as primeiras estruturas sintácticas. Para isso
foi necessário proceder a um estudo prévio para a escolha adequada da linguagem de programação a
utilizar. Foi também necessário fazer uma primeira especificação do programa para depois se proceder à
sua implementação.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
25
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
6.
Avaliação dos parsers
6.1 Pesquisa dos parsers disponíveis.
6.2 Estudo de cada um dos parsers
6.3 Implementação dos vários parsers
6.4 Avaliação e selecção dos parsers
Esta fase do desenvolvimento do sistema decorreu de 11 de Dezembro de 2002 a 5 de Janeiro de 2003. O
objectivo desta fase era o de escolher e implementar o parser mais adequado à gramática desenvolvida na
fase anterior. Para isso foi necessário fazer uma pesquisa sobre os vários tipos de parsers disponíveis,
implementá-los e avaliá-los na gramática.
7.
Implementação das restantes estruturas sintácticas e das estruturas semânticas
7.1 Implementação de mais algumas estruturas sintácticas
7.2 Estudo de formalismos semânticos disponíveis
7.3 Implementação do formalismo semântico escolhido
7.4 Integração das regras semânticas e sintácticas
7.5 Avaliação do sistema
Uma vez que as estruturas sintácticas introduzidas no sistema foram apenas para escolher o parser,
procede-se agora à implementação das restantes. Foram também estudados alguns formalismos
semânticos, assim como a sua implementação, para uma escolha informada sobre o formalismo mais
adequado para este sistema. Ainda nesta fase foram implementadas as regras semânticas e incorporadas
nas regras sintácticas já referidas. Por último, foi feita uma avaliação do sistema e procedeu-se à
correcção de pequenos erros não detectados nas fases de desenvolvimento. Esta fase decorreu de 6 de
Janeiro a 10 de Fevereiro de 2003.
8.
Construção de um algoritmo capaz de converter uma pergunta em Linguagem
Natural para uma forma lógica
8.1 Implementação de um algoritmo de conversão
8.2 Integração do módulo I com o módulo II do projecto INQUER
De 10 a 15 de Fevereiro foi implementado um pequeno algoritmo capaz de receber uma pergunta em
língua natural, pesquisar todas as ambiguidades lexicais, analisar a frase sintacticamente e construir uma
representação semântica para cada uma das interpretações sintácticas. Este algoritmo foi posteriormente
utilizado para a integração do módulo I com o módulo II que ocorreu ainda nesta fase.
26
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Metodologia e calendarização do trabalho
9. Elaboração do Relatório Final
9.1 Elaboração do Relatório
Nesta última fase, que decorreu de 16 a 28 de Fevereiro, foi elaborado o relatório final de estágio.
O plano de desenvolvimento inicial teve algumas alterações relativamente ao plano de trabalho efectuado.
Uma das principais alterações passou pela eliminação de uma das fases descritas no plano inicial (fase 7)
que se referia à análise de termos em língua natural e a sua correspondência com predicados Prolog. Esta
alteração foi devida à necessidade de esta correspondência ser feita numa fase inicial do desenvolvimento
do módulo II para se proceder à implementação do processo de inferência. Assim, esta fase passou a fazer
parte do desenvolvimento do módulo II. Outra alteração ao plano inicial foi o tempo de execução da fase
de tratamento do léxico que compõe a base de dados lexical. Esta alteração deveu-se ao facto de muita
informação ter de ser inserida manualmente o que requereu mais tempo que o inicialmente previsto.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
27
Estudo sobre a WordNet.PT
4. Estudo sobre a WordNet.PT
Como já se referiu, o projecto INQUER insere-se no âmbito de um projecto desenvolvido no CLG – a
WordNet.PT (WordNet do Português - http://www.clul.ul.pt/WordNet/index.html). A WordNet.PT é
uma das bases de dados de conhecimento linguístico que adopta o seu modelo geral de estrutura da
EuroWordNet (http://www.illc.uva.nl/EuroWordNet/). A EuroWordNet é composta por várias
WordNets de línguas europeias constituindo por isso uma base de dados multilingue. Cada uma das
WordNets que compõe a EuroWordNet tem uma estrutura idêntica à da WordNet de Princeton
(http://www.cogsci.princeton.edu/~wn/w3wn.html). Esta foi a primeira WordNet a ser desenvolvida e
teve como língua base o Inglês-Americano.
Nesta base de dados lexical o significado das categorias lexicais (nomes, adjectivos, verbos e advérbios) é
representado através de um conjunto de relações conceptuais e lexicais – synset – “Set of Synonyms”. As
unidades lexicais são organizadas em conjuntos de sinónimos (expressões atómicas ou não atómicas3) que
denotam um mesmo conceito, sendo cada um desses conjuntos representados por um nó na rede. A
sinonímia desempenha um papel crucial na estrutura interna da rede pois, neste caso, serve para relacionar
conceitos lexicalizados. Há evidências de que esta organização simula a estrutura do léxico mental (Miller
1993).
Cada nó da rede está ligado a outros através de várias relações semânticas, a saber, a generalização
(hiperonímia), especialização (hiponímia) e as relações de todo/parte (holonímia/meronímia). Estas
relações organizam o léxico de forma a estabelecer hierarquias lexicais. Por exemplo, a relação
hiperonímia/hiponímia permite a hierarquização dos conceitos em termos de inclusão dos mais
específicos nos mais gerais, sendo por isso uma relação muito importante na estrutura da rede. Vejamos o
seguinte exemplo:
alimento
hiperonímia
{carne, chicha}
hiponímia
carne picada ... carne branca
Figura 1 – Relação hiperonímia/hiponímia
Nesta figura está representada a relação de hiperonímia e hiponímia. Assim, alimento é hiperónimo de
carne e, como esta relação é transitiva, alimento é também hiperónimo de carne picada e de carne
3
Uma entrada lexical pode ser ou não atómica (ex. lacticínio / produto lácteo)
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
29
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
branca. Note-se que o nó do meio nesta estrutura é constituído por duas entradas lexicais que representam
o mesmo conceito carne e chicha.
A relação de hiponímia pode ser definida como inversa à da hiperonímia. Assim temos que carne e
chicha são hipónimos de alimento e que carne picada e carne branca são hipónimos de carne, chicha e
alimento. Os conceitos que se encontram ao mesmo nível na hierarquia designam-se por co-hipónimos.
Assim carne picada e carne branca são co-hipónimos.
Na estrutura da WordNet.PT existem ainda outras relações importantes como a merónima/holonímia ou o
ILI (Inter-Lingual-Index) que não sendo directamente utilizadas na implementação do módulo I, serão
muito importantes no módulo II.
30
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Métodos de Processamento das Perguntas
5. Método de Processamento das Perguntas
O sistema propõe-se receber como input uma questão em Português introduzida pelo utilizador, sem
restrições quanto ao seu formato. Para computar este tipo de perguntas, é necessário que o sistema tenha a
capacidade de construir uma representação da informação pedida. Para isso, estudaram-se alguns
trabalhos na área que se debateram com o mesmo problema e verificou-se que eram duas as opções mais
viáveis: a predição do tipo de resposta através da extracção de palavras-chave e a utilização de gramáticas
independentes do contexto.
A predição do tipo de resposta através da extracção de palavras-chave é a opção mais utilizada em
sistemas desta natureza. Este método consiste na caracterização do tipo de resposta à pergunta introduzida
pelo utilizador, limitando o espaço de procura na fase da inferência. Uma caracterização simples pode ser
feita através da análise do pronome interrogativo presente na pergunta. Perguntas do tipo “Quem é a
pessoa mais rica do mundo?”, “Onde fica Lisboa?” ou “Quando foi a tomada da Bastilha?” podem ter
respostas do tipo Pessoa, Localização e Data respectivamente. Estas etiquetas serão associadas à
pergunta introduzida, indicando assim o tipo de informação requerido para a elaboração da resposta.
Uma caracterização mais rigorosa pode ser feita recorrendo a mecanismos estatísticos que extraiam
palavras-chave da pergunta. Estas palavras servirão para que o sistema, na fase de inferência, localize
frases com elevada probabilidade de conterem a resposta. Contextos semânticos podem também ser
utilizados de forma a ajudarem a seleccionar a resposta correcta.
Este método é largamente utilizado em sistemas de pergunta–resposta cuja base de dados é constituída
por documentos de texto (na Internet ou não), o que não acontece no caso deste sistema. Uma vez que a
base de dados utilizada neste sistema é a WordNet.PT, este tipo de método não teria os mesmos
resultados que nos casos em que a base de dados é constituída por documentos de texto. Embora se
pudessem utilizar algumas vantagens deste método para extrair informação da glosa, este método traria
muitas desvantagens quando essa informação não é suficiente e é necessário fazer outros tipos de
pesquisa.
As gramáticas independentes do contexto são um formalismo constituído por regras que permitem definir
as estruturas sintácticas de uma dada língua. Uma propriedade muito importante destas gramáticas é o
facto de poderem ser aplicadas em qualquer contexto. Por exemplo, a regra SN → D N diz-nos que um
SN pode consistir num D seguido de um N independentemente do contexto em que ocorre.
Nestas gramáticas as regras têm apenas um termo (constituinte) no lado esquerdo, podendo ter vários no
lado direito (permitindo a recursividade). Para cada tipo de sintagma podem existir várias regras de
rescrita. Por exemplo, um sintagma nominal (de agora em diante SN) pode ser constituído por um
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
31
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
determinante (D) e por um nome (N), mas também pode integrar um determinante, um nome e uma
oração relativa, etc.
Alguns estudos realizados sobre os vários métodos de processamento de perguntas [Cardei te Al., 2000]
verificaram que a introdução de alguma informação linguística em sistemas que utilizam apenas métodos
estatísticos, melhora bastante os resultados. Desta forma, parece que o melhor método para a análise de
perguntas seria um misto de modelização linguística (sintáctica e semântica), e de métodos estatísticos
com análise de grandes quantidades de corpora.
Para a realização deste projecto, não existia qualquer base de corpora anotado de perguntas em Português
que permitisse um tratamento estatístico adequado, e a anotação manual de corpora está fora do âmbito
deste trabalho.
As gramáticas, por sua vez, quando são cuidadosamente construídas, permitem uma boa aproximação
linguística na análise de frases e conseguem cobrir uma grande parte das estruturas sintácticas de uma
língua. Permitem também o processamento sintáctico e semântico da pergunta de forma independente e a
construção de parsers eficientes.
Pelas razões explicitadas acima, a escolha do método para a análise das perguntas recaiu naturalmente
sobre as gramáticas independentes do contexto.
32
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Linguagem de Programação
6. Linguagem de Programação
O módulo I do projecto INQUER tem como objectivos a análise sintáctica e a construção de uma
representação semântica de uma pergunta introduzida pelo utilizador. Esta representação utiliza o
formalismo da Lógica de Primeira Ordem (como veremos mais adiante), que é implementado seguindo os
propósitos do Paradigma da Programação em Lógica.
A linguagem de programação escolhida surge naturalmente: Prolog. Esta é uma linguagem de
programação baseada na lógica formal, do mesmo modo que linguagens como C, Pascal e outras
similares são baseadas na aritmética e na álgebra.
A diferença entre o Prolog e linguagens como o C é a de que a programação em Prolog permite a
especificação da descrição do problema (o que computar – programação declarativa) em vez da
especificação dos passos de execução necessários à resolução do problema (como computar –
programação procedimental). O Prolog tem esta capacidade porque utiliza um mecanismo de dedução e
derivação de factos e regras armazenados numa base de dados.
A estrutura de um programa escrito em Prolog é construída através de relações entre entidades, enquanto
nas linguagens procedimentais a estrutura é dada em termos de funções. Esta característica, comum nas
linguagens de programação lógicas, advém do facto de a Lógica de Primeira Ordem, que serve de base as
estas linguagens, descrever relações entre entidades. Como consequência, é possível obter mais do que
uma solução possível para cada computação. Assim, o Prolog é considerado uma linguagem nãodeterminística, ao passo que as linguagens procedimentais são determinísticas, pois devolvem apenas
uma solução para cada computação.
A gestão da memória no Prolog é feita dinamicamente, isto é, não é preciso atribuir espaço para todas as
constantes e variáveis no início do programa: o espaço é atribuído à medida das necessidades. Isto
permite a criação de objectos grandes, como por exemplo estruturas sintácticas que são essenciais ao
processamento da língua natural. Por outro lado, não é possível saber qual a posição de memória onde se
encontram guardadas as variáveis, nem associar objectos com endereços de memória fixos, ao contrário
do que acontece nas linguagens de programação tradicionais (C, Pascal, etc.). Nestas, o acesso à memória
é feito através de apontadores, que são posições de memória que guardam endereços de outras posições.
O algoritmo de pesquisa build-in no Prolog utiliza uma estratégia descendente e em profundidade e
permite encontrar todas as soluções possíveis para um dado problema através do retrocesso
(backtracking). O retrocesso permitem uma fácil integração com todos os tipos de parsers. Por outro
lado, o mecanismo de unificação possibilita a construção de estruturas de dados passo a passo. Os
programas escritos em forma lógica permitem a utilização de métodos de programação muito abstractos.
Como linguagem de alto nível, o Prolog é uma ferramenta bastante interessante para o desenvolvimento
de aplicações na área da Inteligência Artificial (especialmente processamento de língua natural e áreas
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
33
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
similares), uma vez que a programação nesta área requer, por parte de uma linguagem, capacidades de
processamento simbólico, processos de inferência, tipos de dados interactivos e uma flexibilidade geral.
34
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Escolha do Parser
7. Escolha do Parser
Para analisar e representar a estrutura sintáctica e semântica de uma frase é necessário considerar:
a gramática, que descreve formalmente as estruturas bem formadas numa língua.
o algoritmo de parsing, que define a estratégia de análise de acordo com a gramática.
Este capítulo descreve brevemente as estratégias de análise dos dados, justificando a escolha do parser
para a implementação no sistema INQUER.
7.1 ESTRATÉGIAS DE ANÁLISE
Existem três dimensões nas estratégias de análise dos dados. A primeira dessas dimensões diz respeito à
forma como se processa o método de pesquisa relativamente às regras da gramática: se o algoritmo
começa pelos nós folha a estratégia designa-se de ascendente, se começa no símbolo topo da gramática
designa-se de descendente.
A estratégia descendente é considerada um procedimento “ guiado pela expectativa” (“ expectation
driven” ) uma vez que os símbolos deduzidos através das regras da gramática são apenas hipóteses de
símbolos que podem estar presentes na frase de input.
A estratégia ascendente é considerada um processo “ guiado pelos dados” uma vez que, ao contrário da
estratégia descendente, apenas os símbolos que se encontram na frase de input são aplicados a regras da
gramática.
A segunda dimensão das estratégias de parsing diz respeito à forma como se faz a pesquisa no espaço de
procura e divide-se em profundidade e largura. A primeira explora as possibilidades de resolução do
símbolo encontrado mais à esquerda (ou à direita) no passo de resolução, até chegar a um símbolo
terminal (na estratégia descendente) ou ao símbolo da categoria topo (na estratégia ascendente).
A pesquisa em largura processa todos os símbolos à medida que os vai encontrando e deduzindo. Como
consequência, o espaço de pesquisa é percorrido paralelamente, ou seja, em largura.
A última dimensão de estratégias diz respeito à forma como se processa o input: da direita para a
esquerda (da posição n para a 1) ou da esquerda para a direita (da posição 1 para a n).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
35
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
7.2 PARSER ESCOLHIDO
Analisar uma expressão linguística é determinar, através de um processo algorítmico, se esta é gerada por
uma dada gramática. Em caso afirmativo proceder-se-á à representação associada a essa gramática. Este
algoritmo é designado por parser.
As estratégias de análise descritas acima podem ser combinadas para a procura no espaço de soluções
nestes algoritmos. Algumas combinações de estratégias são mais eficientes do que outras dependendo de
vários factores, dos quais se destaca, pela sua importância, a gramática.
Neste sistema descreve-se uma gramática muito complexa, o que significa que o processamento sintáctico
fará muitos retrocessos. Para uma escolha fundamentada do parser, realizaram-se vários testes utilizando
diversos algoritmos.
Como resultado da pesquisa efectuada sobre este tema, seleccionaram-se os parsers que se julgam mais
eficientes tendo em conta a natureza da gramática utilizada no sistema INQUER: left-corner, shift-reduce
e tabular ascendente4.
O parser Earley, embora seja muito eficiente do ponto de vista da rapidez/complexidade (consegue
prestações melhores que um parser tabular simples para um valor de n elevado), para um valor de n
baixo (como é o caso da maioria das frases de uma língua natural), este parser apresenta piores resultados
do que um parser tabular. Por esta razão, não foi testado e avaliado conjuntamente com os parsers
referidos anteriormente.
Os parsers left-corner, shift-reduce e tabular ascendente5 foram implementados e testados sobre uma
gramática de teste (semelhante, do ponto de vista sintáctico, à gramática a utilizar no sistema – Anexo 1).
As implementações dos parsers foram adaptadas de Meurers (2001, pp. 69-70) no caso do Left-Corner e
do Shift-Reduce e de Gazdar & Mellish (1989) no caso do tabular ascendente.
Os testes foram efectuados numa máquina com processador AMD K6 400 MHz, 158 Mb de memória
RAM e utilizando o compilador SWI-Prolog (versão 5.0.9).
4
Para um estudo mais aprofundado sobre parsers consultar, por exemplo, Covington (1993) ou Gazdar & Mellish
(1989).
5
A escolha de uma estratégia ascendente para o parser tabular prende-se com o facto de a estratégia descendente ter
o problema da recursividade à esquerda, o que inviabiliza a sua utilização na gramática de teste.
36
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Escolha do Parser
As frases-teste foram escolhidas de forma a incluírem ambiguidades lexicais e fenómenos linguísticos
representativos dos vários níveis de complexidade:
1) O gato tem patas ?;
2) A aranha tem patas ?;
3) A pata é um animal ?;
4) O borrego é um mamífero ?;
5) Os animais que são carnívoros comem carne ?;
6) As plantas que têm tronco são árvores ?;
7) As patas do gato são membros ?;
8) Os membros do gato são patas ?;
9) O bolo que tem ovos da galinha é de fruta ?;
10) O bolo que tem ovos que são da galinha é de fruta ?;
Estas frases foram testadas 6 vezes para cada parser, sendo a média dos resultados obtidos apresentados
na tabela seguinte. Estes resultados levam em conta todas as interpretações sintácticas possíveis da frase
segundo a gramática implementada.
Frase-Teste
Left-Corner (seg)
Shift-Reduce (seg)
Tabular ascendente (seg)
1)
0.025
0.02
0.085
2)
0.025
06
0.055
3)
0.275
0.48
0.055
4)
0.25
0.28
0.08
5)
0.525
0.19
0.11
6)
1.02
0.44
0.085
7)
3.76
3.18
0.11
8)
1.07
0.69
0.11
9)
32.48
13.05
0.14
10)
136.52
54.65
0.165
Quadro 2 – Tempo da análise das frases
Observando o quadro 2 podemos verificar que ocorreram variações expressivas no tempo de análise das
frases testadas, dependendo do parser utilizado.
6
O método statisctics/2 build-in do Prolog, que foi utilizado para as medições apresentadas, arredonda os
valores muito próximos de 0.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
37
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
O parser Left-Corner apresenta resultados bastante satisfatórios para as primeiras quatro frases, sendo os
resultados seguintes francamente maus e, no caso das últimas frases, proibitivos. O tempo de análise
aumenta bastante em relação à complexidade da frase.
O parser Shift-Reduce apresentou tempos razoáveis na análise das primeiras cinco frases mas, embora o
tempo de análise das restantes frases tenha melhorado significativamente em relação ao Left-Corner,
apresenta ainda tempos bastante insatisfatórios. No caso das últimas duas frases o tempo de análise é
ainda inaceitável. Este parser, tal como o anterior, revela um aumento considerável no tempo de
processamento de uma frase em relação à sua complexidade.
O parser tabular ascendente, tal como prevíamos, foi o que apresentou melhores resultados. Isto deve-se
ao facto de este parser utilizar uma estratégia de pesquisa em largura em vez de em profundidade,
contrariamente aos outros dois. Uma vez que a gramática a implementar obriga a muitos retrocessos, este
parser apresenta-se como a melhor solução. Note-se que, ao contrário dos dois parsers anteriores, este
parser apresenta um aumento ligeiro do tempo de análise em relação à complexidade da frase. Assim
sendo, apresenta valores um pouco mais elevados no processamento das primeiras duas frases, mas
melhora significativamente o tempo de análise das frases mais complexas.
Por estas razões, o parser escolhido para este sistema foi o parser tabular ascendente.
38
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Formalismos Sintáctico e Semântico
8. Formalismos Sintáctico e Semântico
Para a construção de uma gramática capaz de descrever fenómenos linguísticos, é necessária a utilização
de formalismos de modelização. Neste capítulo descrevem-se os formalismos sintáctico e semântico
adoptados neste sistema, assim como a motivação para a opção tomada.
8.1 FORMALISMO SINTÁCTICO
Existem vários formalismos gramaticais utilizados na definição de gramáticas em sistemas de
processamento de língua natural. Para este sistema, consideraram-se dois (seleccionados pela sua ampla
utilização em sistemas do género), que foram objecto de estudo mais aprofundado: a gramática de
cláusulas definidas (DCG – Definitive Clause Grammar) e a gramática de estruturas sintagmáticas
determinadas pelos núcleos7 (HPSG – Head-Driven Phrase Structure Grammar).
8.1.1 GRAMÁTICA DE CLÁUSULAS DEFINIDAS
As gramáticas de cláusulas definidas são gramáticas que tradicionalmente se enquadram no grupo de
gramáticas baseadas em regras (Rule-Based Grammars), contrastando com as gramáticas baseadas em
princípios (Principle-Based Grammars)como a HPSG.
Nas gramáticas baseadas em regras, como o nome indica, são as regras que descrevem os constituintes
gramaticais. Para cada constituinte tem de existir pelo menos uma regra na gramática.
As DCGs foram construídas para descrever as linguagens aceites pelas gramáticas independentes do
contexto (Chomsky). No entanto, são um formalismo mais poderoso do que as gramáticas independentes
do contexto na medida em que permitem a expressão de algumas características sensíveis ao contexto,
como por exemplo os atributos.
As DCGs permitem a descrição de um relativamente grande número de gramáticas complexas (como é o
caso das línguas naturais) de forma simples. Para além disso, constituem um formalismo altamente
restritivo e bem delimitado, que possibilita um alto nível de computabilidade. Este formalismo é
directamente implementável na linguagem de programação escolhida (Prolog), beneficiando de todas as
suas vantagens, como por exemplo a unificação de variáveis.
7
Tradução proposta para o português em BRANCO (2000) pp 12.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
39
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Contudo, como utilizam o algoritmo de parsing build-in do Prolog (Capitulo 5), entram muito facilmente
em ciclos infinitos quando as cláusulas apresentam recursividade à esquerda.
Este formalismo possui um baixo nível de abstracção na medida em que todo o seu funcionamento é
explicitado detalhadamente através de regras, sendo as estruturas linguísticas resolvidas de maneira
determinística. Torna-se cada vez mais complexo, à medida que se adicionam argumentos às regras. O
nível de complexidade é directamente proporcional ao tamanho e ao nível de dependência contextual
entre os constituintes da gramática.
O formalismo das DCGs foi desenvolvido com vista a facilitar a implementação de aplicações na área da
linguística computacional Não se trata, contudo, de um modelo de representação do conhecimento
linguístico.
8.1.2 GRAMÁTICAS DE ESTRUTURAS SINTAGMÁTICAS DETERMINADAS
PELOS NÚCLEOS
As gramáticas de estruturas sintagmáticas determinadas pelos núcleos (HPSG), foram desenvolvidas a
partir de meados dos anos 80 por Carl Pollard e Ivan Sag. Este formalismo foi influenciado pela
Gramática de Estrutura Sintagmática Generalizada (GPSG – Generalized Phrase Grammar), pela
Gramática Léxico-Funcional (LFG – Lexical Funcional Grammar) e pela Teoria da Regência e da
Ligação (GB – Government and Binding). É, neste momento, um dos formalismos mais utilizados no
âmbito da Linguística Computacional.
A HPSG utiliza um formalismo matemático baseado em atributos lógicos de tipo recursivo e em
restrições relacionais, que pretende descrever generalizações particulares e universais das línguas. Para
além disso, pode ser formalizada do ponto de vista computacional o que lhe confere a possibilidade de ser
utilizada em processamento de língua natural.
Contém entradas lexicais muito ricas em informação sintáctica e semântica, e meta-regras sintagmáticas
que, juntamente com alguns princípios, regem a formação das estruturas linguísticas. Estas meta-regras,
baseadas nas regras ID e LP da GPSG, são altamente abstractas, o que confere à HPSG um elevado poder
de abstracção.
Por outro lado, essa abstracção faz com que as suas entradas lexicais sejam muito estruturadas.
40
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Formalismos Sintáctico e Semântico
8.1.3 FORMALISMO SINTÁCTICO ADOPTADO
No sistema INQUER utiliza-se um formalismo sintáctico baseado na HPSG – utilizando as suas
vantagens face a formalismos baseados em regras – mas muito simplificado.
Procurou-se manter um equilíbrio entre a simplicidade e o alto nível de abstracção, para que a gramática
não se tornasse demasiado complexa. Para isso utiliza-se a ideia de considerar listas de subcategorização
da HPSG (ver Capítulo 11).
As entradas lexicais são muito simples pelo que contêm apenas parte da informação necessária ao
processamento sintáctico e semântico (ver Capítulo 10). A informação complementar é posteriormente
acrescentada através de meta-regras que sobre elas operam. Desta forma é possível simplificar as entradas
lexicais e automatizar o processo de complementação da informação.
As regras sintagmáticas utilizadas são baseadas nas regras sintagmáticas da HPSG de modo a captarem
generalizações importantes, mantendo um alto nível de abstracção. Por consequência, o formalismo
escolhido permite o tratamento de vários fenómenos linguísticos numa mesma regra. Para além de regras
sintagmáticas e meta-entradas lexicais, este formalismo contempla regras lexicais que auxiliam a
generalização de certos fenómenos linguísticos. Estas regras lexicais permitem a redução de metaentradas lexicais melhorando a eficiência do sistema.
8.2 FORMALISMO SEMÂNTICO
No módulo I do sistema INQUER são analisadas frases interrogativas em língua natural, dada pelo
utilizador, e construída uma representação semântica com um formato que facilita o seu processamento
posterior. Para isso é necessário implementar um formalismo semântico que, a partir da estrutura
sintáctica, construa essa representação. Este capítulo descreve brevemente o formalismo semântico
escolhido para a implementação neste sistema.
8.2.1 LÓGICA DE PRIMEIRA ORDEM
Para a implementação de um formalismo semântico é necessário utilizar uma linguagem artificial para
facilitar a computação e a desambiguação de interpretações eventualmente ambíguas. Esta linguagem terá
então de ter, por um lado, uma sintaxe própria, bem definida e coerente, que não dê lugar a ambiguidades,
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
41
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
e por outro, ser suficientemente expressiva para poder representar todos os tipos de frases e fenómenos
linguísticos.
Para a representação do significado, neste projecto, foi escolhido um formalismo lógico. Uma Forma
Lógica consiste numa fórmula escrita numa metalinguagem que expressa, de forma económica, o
significado de uma frase.
A Lógica de Primeira Ordem (LPO) utiliza alguns símbolos para construir uma Forma Lógica. Esses
símbolos, juntamente com um conjunto ilimitado de variáveis (x, y, z,...), constituem o vocabulário
reservado da LPO. Na tabela abaixo estão representados os símbolos lógicos utilizados neste sistema e a
representação utilizada na sua implementação (operadores definidos para a representação em Prolog).
Símbolos
Operadores
Lógicos
Prolog
¬
~
Negação
∧
&
Conjunção
→
>
Implicação
∃
exi
Quantificador existencial
∀
univ
Quantificador universal
Descrição
Quadro 3 – Correspondência entre símbolos LPO e operadores definidos para a representação em Prolog
8.2.2 IMPLEMENTAÇÃO DO FORMALISMO ESCOLHIDO
Existem vários métodos para automatizar o processo de associação da representação semântica à
expressão em linguagem natural, de entre os quais se escolheu o que utiliza as vantagens da associação do
Cálculo Lambda à LPO.
No desenvolvimento deste sistema adaptaram-se e utilizaram-se algumas das funcionalidades do Cálculo
Lambda, tais como Abstracções-λ, Aplicações Funcionais e Reduções-β. Utilizam-se termos lambda
para ligar variáveis abstraídas usando um operador lambda -λ. Este operador marca o sítio onde se devem
substituir variáveis ao longo da construção semântica. A operação que realiza essas substituições
denomina-se redução-β.
42
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Formalismos Sintáctico e Semântico
A codificação da semântica na linguagem de programação escolhida (Prolog) passa pela:
(i) codificação das formas lógicas em Prolog;
(ii) associação de uma expressão lambda a cada constituinte e implementação do processo de
redução-β.
(i)
codificar as formas lógicas em Prolog:
Utilizando o formalismo sintáctico escolhido, as expressões em LPO corresponderão aos termos do
Prolog.
A representação semântica dos quantificadores tem um papel fulcral na representação semântica da frase:
estabelecem relações entre constituintes. A representação dos quantificadores pode ser feita da seguinte
maneira:
Quantificador Existencial:
Forma em LPO: ∃x (P∧Q)
Representação em Prolog: d(Exi, X, P & Q)
Tipicamente, P é entendido como a representação semântica do SN e Q como a do SV. X representa a
variável quantificada e Exi um quantificador existencial: “ um” , “ algum” e “ exi” 8 neste sistema.
Quantificador Universal:
Forma em LPO: ∀x (R → A)
Representação em Prolog: d(Uni, X, R → A)
Neste caso, o quantificador estabelece uma relação de antecedente-consequente entre R (tipicamente o
SN) e A (tipicamente o SV). Por esta razão dá-se o nome de Restrictor a R e Âmbito a A. O X representa
a variável quantificada universalmente e Uni o quantificador universal: “ todo” e “ o” 9 neste sistema.
8
Como será explicítado no capítulo 6 – Meta-entrada para expressões nominais com complemento e sem
especificador –, este quantificador existencial serve, no sistema INQUER, para tratar casos onde não é explícita a
presença de um quantificador. Por exemplo:
1)
Um pastor alemão é hipónimo de “ cão” ?
Neste caso, nome “ hipónimo” não tem qualquer quantificador explícito o que impediria a utilização de um
formalismo semântico deste género.
9
Note-se que no sistema INQUER o determinante “ o” só pode ter uma interpretação de espécie e não de espécime
(interpretação deíctica). Por exemplo:
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
43
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
(ii)
implementação do processo de redução-β
Neste sistema, a implementação do processo de redução-β faz-se utilizando a unificação de variáveis do
Prolog e é baseada em Pereira e Shieber (1987). Desta forma, beneficia-se do método de unificação da
linguagem de programação tornando o processo eficiente e rápido.
É usado também o operador/infixo ‘^’ (definido como um operador Prolog reservado) para simular a
função do ‘λ.’ no cálculo lambda. Assim uma função do tipo λX.φ – onde X é a variável que marca o
argumento da função e φ é a expressão que define o valor da função – é representada em Prolog por X^φ.
O operador/infixo ‘^’ é associativo à direita, o que significa que X^Y^formula é equivalente a
X^(Y^formula).
Por exemplo, a representação semântica dos determinantes “ todos” e “ um” terá o formato seguinte, onde
P e Q representam o SN e SV e R e A o restrictor e âmbito:
Formula em Cálculo Lamba
Representação semântica no sistema
λr. λa.(∀x) r(x) →a(x)
(X^R)^(X^A)^d(todos,Num,X,R>A)
λr.λa.(∃x) r(x) ∧ a(x)
(X^R)^(X^A)^d(um,Num,X,P&Q)
Quadro 4 – Representação semântica de quantificadores
Neste sistema o quantificador tem um papel de predicador nuclear, ou seja, recebe toda a representação
semântica da frase ficando a representação semântica do SN em P e R respectivamente e a do SV em Q e
A da representação semântica do quantificador. Considere-se um exemplo da construção da representação
semântica da frase “ alguns felinos miam” utilizando esta implementação:
alguns –(X^P)^(X^Q)^d(algum,plu,X,P & Q)
felinos – Y^felino(Y)
miam – Z^miar(Z)
alguns felinos – (X^A)^d(algum,plu,X,felino(X) & A)
2) O gato é um felino?
3) O gato da vizinha é branco?
No primeiro exemplo, está a ser questionada uma propriedade sobre a espécie “ gato” e não sobre um gato em
particular. Neste caso a interpretação semântica da frase é idêntica à da frase “ Todos os gatos miam?” . No segundo
caso, o determinante “ o” tem valor existencial estando a ser questionada uma propriedade de um espécime de “ gato” .
No sistema INQUER, esta interpretação não é passível de ser respondida e, por essa razão, não é considerada.
Para simplificar, optou-se, neste sistema, por considerar o determinante “ o” como quantificador universal.
44
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Formalismos Sintáctico e Semântico
alguns felinos miam - d(algum,plu,X,felino(X) & miar(X))
Esta implementação do processo de redução-β tem alguns problemas no que toca à construção de
representações semânticas de sintagmas coordenados. Nestes casos, a representação semântica do SN do
determinante tem de instanciar com várias variáveis simultaneamente. Tomemos como exemplo a frase
“ um gato e um cão são animais ” .
um gato – (X^Q)^d(um,sing,X,gato(X) & Q)
um cão – (Y^Q1)^d(um,sing,Y,cão(Y) & Q1)
animais – (Z^Q2)^d(exi,plu,Z,animal(Z) & Q2)
são – W^T^ser(T,W)
um gato e um cão – (X^Q)^(Y^Q1)^d(um,sing,X,gato(X)&Q) &
d(um,sing,Y,cão(Y)&Q1)
são animais – T^d(exi,plu,Z,animal(Z) & ser(T,Z))
um gato e um cão são animais - (Y^Q1)^d(um,sing,X,gato(X)&
d(exi,plu,Z,animal(Z) & ser(X,Z))) &
d(um,sing,Y,cão(Y)&Q1)
Esta representação semântica contém variáveis por instanciar (Y^Q1). Estas variáveis deviam instanciar
com a representação semântica do SV “ são animais” . Contudo, utilizando apenas a instanciação de
variáveis, não é possível resolver este problema. A solução passa pela implementação de um predicado
auxiliar (substitute/4) de Sterling e Shapiro (1986) que recebe um termo, uma variável e uma
fórmula devolvendo o resultado da substituição da variável pelo termo na fórmula.
substitute(+Term,+Var,+Formula,-Result).
Desta forma é resolvido o problema acima descrito. Todavia não soluciona casos em que se coordenam
múltiplos sintagmas. Para resolver esse problema é adoptada a solução de Blackburn e Bos (1999) que
implementa a redução-β através de predicados auxiliares (subs/3, coord_sn/3 e coord_sx/3 –
ver Capítulo 11 - Regra Sintagmática 6).
Este mecanismo de redução-β é utilizado apenas nas coordenações sendo, nos outros casos, utilizada a
instanciação de variáveis Prolog. A razão desta escolha prende-se com o facto de a instanciação de
variáveis Prolog ser mais rápida e eficiente.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
45
Tipo de Perguntas
9. Tipos de Perguntas
9.1 QUESTIONÁRIO
Com o objectivo de fazer um levantamento das questões que um potencial utilizador colocaria ao sistema,
foi construído um pequeno questionário em formato de página HTML (Anexo 2) e enviado por e-mail a
diversas pessoas para que respondessem colocando questões.
Nesse questionário era explicado brevemente o objectivo do sistema INQUER e do questionário, pedindo
ao utilizador que imaginasse um sistema capaz de responder a todo o tipo de perguntas dentro de certos
domínios. Esses domínios (comida, alimentação e seres vivos), sobre os quais deveriam incidir as
perguntas, assim como alguns exemplos de perguntas típicas que se poderiam colocar ao sistema, foram
introduzidos no conteúdo da página.
De seguida era apresentada uma caixa de texto onde o utilizador deveria colocar as perguntas a efectuar
ao sistema, carregando em seguida no botão submit que reencaminhava as respostas para o endereço da
estagiária.
As pessoas que responderam a este questionário têm idades compreendidas entre os 13 e os 55 anos, ou
seja, são potenciais utilizadores deste sistema.
9.2 RESULTADOS OBTIDOS
Foram recebidas 124 frases interrogativas – transcritas no Anexo 3 – que foram repartidas por seis
grupos10: frases interrogativas que solicitam uma definição (21), totais (polares e de alternativa) (31),
parciais sobre argumentos (54), parciais sobre especificadores (14), sobre adjuntos causais (3) e que
envolvem comparação (1). São exemplos de frases destes tipos:
-
que solicitam uma definição – “ O que é uma batata?”
-
totais (polares e de alternativa) – “ O gato é um mamífero?”
-
parciais sobre argumentos – “ Quais são os animais que têm barbatanas?”
-
parciais sobre especificadores – “ Quantas patas tem um pato?”
-
sobre adjuntos causais – “ Por que é que os caranguejos andam de lado?”
-
que envolvem comparação – “ O que têm em comum o gato e o cão?”
10
Não se utilizam as classificações canónicas, dado que em alguns casos é necessário explicitar a natureza do
conteúdo ou dos processos envolvidos na construção da resposta.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
47
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Estas frases apresentam os seguintes formatos:
•
no grupo que solicitam uma definição, surgem expressões que se iniciam por: “ O que é o...”
(2/21); “ O que é um...” (16/21); “ O que é...” (3/21).
•
No grupo totais (polares e de alternativa), as estruturas que surgem são: Totais simples: “ SN é
SN?” (15/31); “ Há / Existe N Adj ?” (3/31); “ SN V ?” (6/31); “ SN tem SN?” (3/31); “ SN V
SN?” (1/31); “ É verdade que...” (1/31);
Alternativa: “ SN é SN ou SN” (2/31);
•
No grupo parciais sobre argumentos, as expressões que surgem são: “ Que...?” (15/54);
“ Como...?” (1/54); “ Qual é... / Quais são...?” (6/54); “ Qual o...?” (14/54); “ Qual das...?” (1/54);
“ Em que...?” (4/54); “ De onde...?” (1/54); “ De que...?” (5/54); “ O que...?” (6/54); Outras (1/54);
•
No grupo parciais sobre especificadores, as expressões que surgem são: “ Quantos ...
há/existem?” (7/14); “ Quantos SN tem SN?” (4/14); “ Quantos SN V SN?” (2/14); Outras (1/54);
•
No grupo sobre adjuntos causais, as expressões que surgem são: “ Porque...?” (1/3); “ Como...?”
(2/3);
•
No grupo que envolvem comparação, a expressão que surge é: “ ...ter em comum SN e SN?”
(1/1);
A partir destas respostas obteve-se um pequeno corpus de perguntas (Anexo 3), objecto de referência no
desenvolvimento de diversas fases do trabalho.
9.3 TRATAMENTO DOS RESULTADOS
Tratando-se de um estágio de 6 meses e de uma primeira fase de um projecto de grande dimensão, não é
possível tratar todos os tipos de perguntas colocados pelos potenciais utilizadores. Foi, por esta razão,
necessária alguma selecção das perguntas recebidas assim como uma análise e escolha dos tipos de
perguntas a implementar numa primeira fase do desenvolvimento do projecto.
Das perguntas recebidas, 35 foram eliminadas do grupo de estruturas interrogativas que seriam
implementadas por contemplarem adjectivos. Como a WordNet.PT (que está a ser utilizada como fonte
para a nossa base de dados lexical) ainda não possui informação suficiente sobre adjectivos e a sua
48
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Tipo de Perguntas
inserção estava fora do âmbito deste trabalho, todas as estruturas interrogativas deste tipo foram
ignoradas. Um exemplo deste tipo de perguntas é:
1) Qual é a ave de rapina mais pesada do mundo?
Das restantes questões, 33 não foram consideradas para a implementação por solicitarem informação
sobre a qual a WordNet.PT ainda não tem conhecimento suficiente. Estas estruturas foram ignoradas nesta
fase do desenvolvimento do sistema porque ainda que fossem analisadas correctamente no módulo I, no II
(inferência) não poderiam obter qualquer tipo de resposta, tornando-se inúteis do ponto de vista global do
sistema. Um exemplo deste tipo de perguntas é:
2) Em que época do ano devem ser plantadas as camélias?
Das 56 frases restantes do corpus, uma não tem uma resposta objectiva (“ Quantos cães tem uma
matilha?” ), tendo, por esta razão, sido ignorada.
Das restantes perguntas três contêm inversões de sujeito. Embora este tipo de estruturas seja muito
produtivo no Português, nos dados recolhidos foram estruturas muito pouco utilizadas. Por esta razão a
sua implementação será feita numa fase posterior. Um exemplo deste tipo de estruturas é: “De que é
composto o chucrute?”.
Procede-se assim à implementação de um sistema capaz de analisar e representar semanticamente 52 das
124 perguntas recolhidas. Estas perguntas incluem estruturas muito variadas, tais como interrogativas
totais e interrogativas parciais com pronomes interrogativos e constituintes deslocados na frase.
Para além das estruturas encontradas nestas perguntas são implementadas mais algumas consideradas
importantes. Entre estas destaca-se a implementação de estruturas de adjunção (orações relativas e
sintagmas preposicionais). Note-se que a inclusão de regras sintagmáticas capazes de analisar estruturas
de adjunção facilitará o trabalho de fases posteriores relativamente aos sintagmas adjectivais.
Outro tipo de estruturas implementadas nesta fase são as coordenações. Embora não se tivessem registado
ocorrências de perguntas deste tipo no corpus recolhido, considera-se que este tipo de estruturas é muito
produtivo em sistemas deste género. As disjunções, que não serão alvo de implementação nesta fase do
projecto, poderão ser facilmente implementadas utilizando a mesma estratégia das coordenações.
Verificou-se também, ao analisar as respostas ao questionário, a necessidade de introduzir algumas
palavras no léxico que não constam na WordNet.PT. É o caso de todas as palavras funcionais, de
pronomes interrogativos e de alguns verbos e expressões nominais não incluídos nos domínios escolhidos
como “ ser” ou “ ter” e “ raça” . Este assunto será abordado em pormenor no capítulo seguinte.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
49
Base de Dados Lexical
10. Base de Dados Lexical
Para que o sistema analise frases em língua natural é necessária uma Base de Dados Lexical que permita o
reconhecimento das palavras que compõem a frase.
Essa base de dados é constituída por entradas lexicais retiradas da WordNet.PT (expressões nominais e
algumas expressões verbais)11 e por entradas lexicais que não constam da WordNet.PT. São exemplos:
verbos como “ ser” ou “ ter” , nomes que seleccionam complemento como “ hipónimo” , determinantes,
conjunções, preposições e pronomes relativos e interrogativos. No anexo 4 apresenta-se um excerto da
base de dados lexical.
Cada entrada lexical corresponde a uma regra que integra a categoria a que a expressão pertence, a sua
forma semântica e os traços semânticos e morfológicos que a caracterizam, quando pertinentes. Por
exemplo:
n(’fruta’,[num:sing,gen:fem,cont:s,abst:n,anim:n,ser_vivo:n,hum:n,mass:s])--->
[fruta].
A obtenção das expressões da WordNet.PT iniciou-se com a extracção de toda informação desejada
(limitada aos domínios “ seres vivos” , “ alimentos” e “ comida” ) para ficheiros de texto (.txt). A informação
contida nesses ficheiros não facilitava a consulta directa pela linguagem de programação escolhida
(Prolog). Embora fosse possível formatar a informação com o Prolog, a pesquisa não seria tão eficiente
como se esta estivesse modelada em factos. O programa Detonador, desenvolvido por Rui Chaves,
permite a transformação destes ficheiros em ficheiros de factos Prolog. Estes factos evidenciam todas as
relações entre os conceitos dos diversos domínios considerados, podendo ser utilizados como uma Base
de Dados Relacional.
Os ficheiros obtidos pelo Detonador foram ainda alvo de tratamento com vista a agrupar e ordenar
relações e retirar informação duplicada. Os ficheiros resultantes deste tratamento constituem a Base de
Dados Relacional que representa a estrutura da WordNet.PT. Por exemplo, a informação de que “ gato” é
“ hipónimo de felino” e que os “ felinos” têm “ patas” é representada na Base de Dados Relacional através
dos seguintes factos Prolog:
has_hyponym(felino,gato).
has_mero_part(felino,pata).
11
Utiliza-se a designação expressão nominal/verbal em lugar de nome/verbo para referir elementos lexicais, uma vez
que estes podem não ser lexicalizações atómicas. São exemplos de lexicalizações não atómicas “ queijo fresco” /“ ser
feito de” e de lexicalizações atómicas “ queijo” /“ ser” .
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
51
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Posteriormente, através de comandos Prolog e das relações pos(n,Nome) e pos(v,Verbo) presentes
na Base de Dados Relacional, foram extraídas as expressões (Nome e Verbo) que compõem grande parte
da Base de Dados Lexical.
As expressões retiradas desta forma foram posteriormente alvo de tratamento, nomeadamente na inserção
manual das categorias nominais, da forma semântica, dos traços específicos de cada entrada e das formas
plurais e femininas correspondentes. Por exemplo, para a expressão “ gato” retirada da WordNet.PT
através dos processos já descritos, toda a informação a negrito foi introduzida manualmente:
n(gato, [num:sing,gen:mas]) ---> [gato].
n(gato, [num:plu,gen:mas]) ---> [gatos].
n(gato, [num:sing,gen:fem]) ---> [gata].
n(gato, [num:plu,gen:fem]) ---> [gatas].
Embora existissem no CLUL alguns recursos linguísticos que permitiam a extracção automática de
alguma desta informação (nomeadamente dos traços), outra havia que tinha de ser introduzida
manualmente. Para uma uniformidade na estruturação da informação optou-se por introduzir tudo
manualmente e criar um mecanismo de herança de traços que facilitasse esta inserção (ver secções
seguintes).
Optou-se também por uma listagem de todas as formas flexionadas dos nomes e de algumas dos verbos
(nomeadamente a 3ª Pessoa do Presente do Indicativo), pois o desenvolvimento de um módulo
morfológico estava fora do âmbito deste projecto.
No anexo 4 encontram-se alguns exemplos de entradas lexicais extraídas da base de dados lexical.
10.1 EXPRESSÕES NOMINAIS SIMPLES
Estas expressões são identificadas no léxico por n — categoria nominal. As expressões lexicais deste tipo
foram, na sua maioria, extraídas da WordNet.PT.
Seguindo a estrutura interna da WordNet.PT, optimiza-se o funcionamento do sistema utilizando um
mecanismo de herança de traços, de forma a reduzir a lista de traços por entrada. Cada entrada possui o
traço relativo ao seu número, uma vez que a cada expressão correspondem duas entradas lexicais: plural e
singular. Os restantes traços são herdados através de um mecanismo de herança em que cada entrada
lexical herda os traços dos seus hiperónimos. São herdados apenas os traços não contraditórios da lista de
traços da entrada tratando-se por isso de um mecanismo de herança por defeito.
52
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Base de Dados Lexical
Este mecanismo é implementado através do predicado heranca_de_tracos/3 que devolve a lista de
traços completa de uma dada entrada lexical (Anexo 5). Este predicado utiliza a Base de Dados
Relacional para encontrar os hiperónimos ou variantes principais de um dado conceito. Em seguida extrai
a lista de traços associada ao hiperónimo do conceito em questão e “ herda” todos os traços sobre os quais
não tem qualquer informação. Este predicado é recursivo. Desta forma todos os traços são herdados e se o
conceito não tiver hiperónimos é devolvida a própria lista de traços.
Por exemplo:
Seja “ alimento” o hiperónimo directo de “ fruta” e L1 e L2 as respectivas listas de traços:
alimento – L1 : [num:plu, gen:mas, cont:n, abst:n, anim:n, ser_vivo:n, hum:n]
fruta – L2: [num:sing, gen:fem, cont:s]
Após aplicado o mecanismo de herança, a lista de traços de “ fruta” seria:
[num:sing, gen:fem, cont:s, abst:n, anim:n, ser_vivo:n, hum:n]
Os pares atributo:valor considerados para as expressões nominais simples são:
Atributo
num
gen
cont
abst
anim
ser_vivo
hum
mass
Valor
Descrição
sing (singular)
número: traço morfológico que indica o número
plu (plural)
gramatical
fem (feminino)
género: traço morfológico que indica o género
mas (masculino)
gramatical
s (sim)
contável: traço booleano semântico que indica se o
n (não)
conceito refere algo que se pode enumerar
s (sim)
abstracto: traço booleano semântico que indica se
n (não)
o conceito refere algo material
s (sim)
animado: traço booleano semântico que indica se o
n (não)
conceito refere algo dotado de vida ou movimento
s (sim)
ser vivo: traço booleano semântico que indica se o
n (não)
conceito refere um organismo
s (sim)
humano: traço booleano semântico que indica se o
n (não)
conceito refere algo com características humanas
s (sim)
massivo: traço booleano semântico que indica se o
n (não)
conceito refere algo que não é enumerável12
Quadro 5 – Traços das expressões nominais simples
12
Este traço é redundante relativamente ao traço cont mas é necessário para dar conta de conceitos que são massivos
e contáveis como se refere mais à frente no texto
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
53
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Os traços apresentados foram escolhidos pela sua capacidade de restringir tipos de conceitos com
propriedades semânticas e sintácticas distintas. Os traços num e gen servem para detectar estruturas
sintácticas com erros de concordância. Os restantes traços serve para restringir a ocorrência de certas
expressões com alguns verbos, como por exemplo a possibilidade de expressões nominais massivas
poderem ocorrer sem determinante a seguir a um verbo.
Dos traços apresentados na tabela vale a pena referir que embora um dado conceito não possa ser
simultaneamente contável e massivo, algumas das entradas lexicais contém informação afirmativa para
ambos os atributos. Isto deve-se ao facto de algumas expressões serem lexicalmente ambíguas entre
conceitos massivos e contáveis. Por exemplo, “ queijo” é ambíguo entre o alimento queijo que se pode
contar (1) e a substância (2):
1) Quantos queijos estão em cima da mesa?
2) Esta sandes é de queijo?
Este problema seria resolvido se o sistema utilizasse todo o conhecimento disponível na WordNet.PT,
uma vez que as expressões ambíguas que denotam conceitos diferentes se encontram identificadas por um
índice. Numa fase posterior do projecto este problema poderá ser facilmente corrigido.
10.3 EXPRESSÕES NOMINAIS QUE SELECCIONAM COMPLEMENTO
As entradas lexicais de expressões nominais que seleccionam complemento, inseridas manualmente,
apresentam a mesma etiqueta que as expressões nominais simples e possuem praticamente os mesmos
traços. As expressões nominais que seleccionam complemento não têm, no entanto, o atributo massivo,
mas necessitam de um novo traço que informa acerca do complemento que seleccionam:
Atributo
Valor
[comp:[marc:M]]
scat
(complemento) M=elemento
marcador
Descrição
subcategorização: traço sintáctico que indica
que o complemento seleccionado é marcado13
Quadro 6 – Traços das expressões nominais que seleccionam complementos
13
Considera-se como um marcador as preposições que não têm semântica.
54
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Base de Dados Lexical
10.2 EXPRESSÕES VERBAIS
Estas expressões são identificadas no léxico por v – categoria verbal. Nem todas as expressões verbais
foram extraídas da WordNet.PT dado que, ao analisar o resultado do questionário (Capitulo 9), verificouse serem necessárias outras expressões verbais não pertencentes aos domínios considerados. É o caso de
“ ser” e “ ter” .
No que respeita ao tempo, as frases a analisar pelo sistema só incluem o tempo gramatical presente, 3ª
Pessoa. Assim, as entradas lexicais desta categoria possuem os traços:
Atributo
Valor
sing (singular)
num
scat
plu (plural)
[comp:n/p] (complemento)
pred (verbo predicativo)
tipo_v
igual (identidade)
imp (verbo impessoal)
Descrição
número: traço morfológico que indica o número gramatical
subcategorização: traço sintáctico que indica, numa lista, a
categoria dos complementos seleccionados pelo verbo
tipo: traço sintáctico que identifica o verbo “ ser” quando este
toma o valor predicativo ou identidade, o verbo “ haver” ou o
verbo “ existir”
existe(verbo existir)
Quadro 7 – Traços das expressões verbais
10.4 OUTRAS EXPRESSÕES
Para além das expressões nominais e verbais, houve necessidade de introduzir no léxico outras expressões
que não estão presentes na WordNet.PT por pertencerem a classes fechadas. As categorias destas
expressões assim como os traços que as caracterizam são apresentados no quadro seguinte:
Categoria
Traços
Exemplos
p(preposição)
não tem
“ de”
conj (conjunção)
não tem
“ e”
Observações
Os pronomes interrogativos precisam de
pi (pronome
interrogativo)
num:sing/plu
gen:mas/fem
quant:s
“ qual” /” quais”
“ quanto” /” quanta”
ser classificados quanto ao número e
alguns também quanto ao género. O
traço quant identifica aqueles que podem
ocorrer como quantificadores de SNs
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
55
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Categoria
Traços
Exemplos
pr (pronome relativo)
não tem14
“ que”
tipo_d:univ/exist
“ todo” /“ um”
Os determinantes classificam-se, neste
det (determinante)
neg (part. de negação)
marc (marcador)
Observações
gen:mas/fem
“ o” /“ a”
sistema, em género, número e
num: sing/plu
“ o” /“ os”
universais ou existenciais.
não tem
“ não”
marcador: M
M=elem. marcador
“ de” , “ com”
Os marcadores são elementos de
marcação de SNs
As contracções são constituídas por
contrac (contracção)
não tem
“ do” , “ nos”
elementos de categoria prep e det
aglutinados
Quadro 8 – Traços de outras expressões presentes na base de dados lexical
14
Nesta fase de implementação do sistema considera-se apenas o pronome relativo “ que” .
56
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
11. A gramática
As várias fases do módulo de análise das perguntas introduzidas pelo utilizador estão representados no
seguinte esquema:
Figura 2 – Esquema geral do módulo I
Escolhido o formalismo adequado à construção da gramática, feito o tratamento e a extracção do léxico, e
analisadas as estruturas linguísticas a contemplar, procedeu-se à construção da gramática propriamente
dita.
Esta gramática contém meta-entradas lexicais, regras lexicais e regras sintagmáticas que permitem a
análise sintáctica e a construção de uma representação semântica de uma pergunta em LN.
No anexo 6 encontra-se todo o código de implementação desta gramática.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
57
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
11.1 META-ENTRADAS LEXICAIS
Como referimos anteriormente, optou-se pela inclusão de meta-entradas lexicais capazes de tratar as
entradas lexicais para que seja adicionada alguma informação necessária à aplicação das regras sintácticas
e semânticas. A informação relativa à subcategorização e à semântica é inserida nestas regras.
O formato de uma meta-entrada lexical é:
spr : LSpr 


elex(Cat,[traços], comp : LComps ,Representação Semântica)


gap : [ ]

Figura 3 – Meta-entrada lexical
O primeiro elemento (Cat) indica a categoria da expressão linguística a que esta meta-entrada
corresponde e o segundo a sua lista de traços. O terceiro argumento desta meta-entrada é a lista de
subcategorização da expressão. Esta lista subdivide-se em três listas:
•
spr indica a natureza do especificador: pode ser do tipo “ determinante” no caso dos nomes ou
“ nominal” no caso dos verbos. Note-se que o que é subcategorizado é um sintagma e não uma
entrada lexical.
•
comp indica a natureza dos complementos subcategorizados. Os complementos podem ser de
tipo “ nominal” ou do tipo “ preposicional” .
•
gap indica o elemento que não foi encontrado na sua posição natural mas que pode ser
encontrado deslocado na frase. Esta lista está sempre vazia nas meta-entradas lexicais, podendo
conter elementos nas regras lexicais que veremos mais adiante.
O último argumento da meta-entrada corresponde à sua representação semântica.
É apresentado em seguida um exemplo da instanciação da meta-entrada lexical que subsume a entrada
lexical de “ gato” que ocorre no sintagma nominal “ o gato” :
elex(n,[hum:n,ser_vivo:s,anim:s,abst:n,gen:mas,cont:s,mass:s,num:sing]
[spr:[r(det,Ltracos,[],Scat,Sem)], comp:[], gap:[]], X^gato(X))
As meta-entradas são objecto de descrição pormenorizada em seguida.
58
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
11.1.1 META-ENTRADAS GRAMATICAIS
Estas meta-entradas tratam todas as entradas de palavras gramaticais necessárias à construção de frases
em Português.
Todas estas entradas, que não pertencem ainda à WordNet.PT, foram inseridas manualmente. A selecção
das palavras que dão origem às entradas lexicais presentes na base de dados lexical foi feita através da
avaliação dos resultados do questionário efectuado (Capítulo 9).
Meta-entrada para preposições
elex(p,[],[spr : [],
comp: [r(n,_,[],[spr:[]|_],_)],
gap : []],X^Y^P) ==> p(Palavra,[]) ^[P =..[Palavra,X,Y]].
Esta primeira meta-entrada aplica-se a preposições. Procura as entradas lexicais a que se aplica, através da
forma que estas apresentam no léxico [p(Palavra, Traços)]. Neste caso a lista de traços aparece vazia
porque as preposições não impõem qualquer tipo de restrições aos seus complementos quanto à
concordância.
A forma semântica da palavra é também retirada da entrada lexical, através da variável Palavra. Esta
variável serve como argumento ao predicado built-in do Prolog “ =..” , de modo a formar um novo
predicado. Esse predicado recebe a forma semântica da entrada lexical e duas variáveis formando o
predicado palavra(X,Y)15. Desta forma é construída a representação semântica da preposição, que se
encontra no último argumento da meta-entrada: X^Y^palavra(X,Y). Esta representação indica que X
será instanciada com a variável abstraída mais externa do SN que antecede a preposição e Y com a
variável abstraída mais externa do complemento (neste caso um SN). A representação semântica da
preposição “ de” seria X^Y^de(X,Y). Por exemplo:
1) O alimento do gato é o peixe?
Nesta frase, a variável abstraída mais externa do SN “ o alimento” seria instanciada com a variável Y da
representação semântica da preposição, enquanto a variável abstraída mais externa do SN “ o gato” seria
instanciada com a variável X.
15
Daqui em diante, palavra (em letra minúscula) constituirá o símbolo do predicado Palavra (com letra maiúscula)
correspondente à forma semântica de uma entrada lexical. Exemplo: a forma lógica X^Y^Palavra(X,Y) representa-se
em Prolog por X^Y^palavra(X,Y).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
59
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
As restrições sobre as entradas lexicais que podem entrar nas meta-entradas estão especificadas dentro da
lista ^[] do lado direito da regra. Esta lista, presente em todas as meta-entradas lexicais, contém
predicados Prolog que são executados quando a meta-entrada é chamada. Desta forma é possível
restringir a classe de palavras que entram em cada meta-entrada, tornando o sistema mais eficiente.
Neste caso, a lista encontra-se vazia pois todas as preposições podem ser tratadas por esta regra. No
entanto, outras meta-entradas lexicais necessitam dessa lista para restringir o tratamento de algumas
expressões (como no caso das expressões nominais que seleccionam complemento e as que não o
seleccionam).
Meta-entrada para marcadores
elex(marc,[],[spr : [], comp: [], gap : []],_) ==> marc(_,_) ^[].
A meta-entrada lexical acima trata os marcadores. Estes elementos servem apenas para marcar SNs para
que estes sirvam de complemento a alguns nomes ou verbos que seleccionam complemento. Por esta
razão, não exigem complemento nem especificador. Exemplos deste tipo de elementos podem ser
encontrados em construções do tipo:
2) O gato é hipónimo de mamífero?
3) Um bolo é feito com ovos?
Por simplificação, considerou-se que os marcadores não têm qualquer representação semântica nem
exigem qualquer tipo de concordância com os elementos que o antecedem ou precedem. Por esta razão as
variáveis relativas aos traços e à forma semântica da entrada são representados por “ _” . A lista de traços
da meta entrada lexical é vazia, de forma a unificar com qualquer lista de traços à qual se junte.
Meta-entrada para conjunções
elex(conj,Ltracos,[spr : [],comp: [], gap : []],_) ==> conj(_,Ltracos) ^[].
Os únicos operadores de conjunção considerados por esta gramática são o “ e” e a “,”, e são ambos
tratadas por esta meta entrada. Como se viu anteriormente (Capítulo 10), a lista de traços das preposições
contém informação relativa ao tipo de preposição a que correspondem. Esta informação é necessária,
numa fase mais avançada do processamento sintáctico, para restringir o tipo de construções coordenadas.
Assume-se que às conjunções não se atribui qualquer tipo de representação semântica e que não exigem
especificador nem complementos, associando apenas SXs da mesma categoria. Esta assumpção não é
60
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
naturalmente pacífica. Contudo, o que está em causa não é a adequação da descrição linguística, mas sim
a eficiência do sistema.
Meta-entrada para a negação
elex(neg,[],[spr : [],comp: [],gap : []],X^P) ==> neg(_,_) ^[P =..[~,X]].
Nesta meta-entrada é representada a negação (que nesta base de dados lexical é apenas a palavra “ não” ).
Uma vez que a negação é um símbolo funcional em lógica de primeira ordem, a representação semântica
da entrada lexical “ não” corresponde ao símbolo “ ~” , seguido de uma variável correspondente ao
constituinte a negar. Assim, a representação semântica de “ não” será da forma X ^~(X), em que X
corresponde à semântica do evento negado.
Esta meta-entrada não exige qualquer tipo de especificador ou complemento, nem envolve restrições de
concordância com o SV a que se associa.
Meta-entrada para determinantes indefinidos
elex(det,Ltracos,[spr : [],comp: [],gap : []],
(X^P)^(X^Q)^d(Palavra,Num,X,P & Q)) ==>
det(Palavra,Ltracos)
^[retira_elemento(Ltracos,tipo:exist,_),
extrai(Ltracos,num,Num)].
Na lista de restrições desta regra encontra-se o predicado retira_elemento/3 que recebe uma lista de
traços, um par atributo:valor e devolve uma nova lista sem esse par:
retira_elemento(+Ltracos, + Atributo:Valor, -LtracosRes )
Neste caso, o predicado retira da lista de traços encontrada no léxico, o atributo tipo que contém
informação sobre a subcategoria do determinante em questão (exist indica que é existencial). A lista
resultado vai ser utilizada para o processamento sintáctico posterior. Desta forma, todos os determinantes
que não possuem o par traço tipo:exist, não são tratados por esta regra restringindo assim a formação de
meta-entradas.
Para além do predicado retira_elemento/3, a lista ^[] contém o predicado extrai/3, que recebe
uma lista de traços e um atributo devolvendo o seu valor nessa lista:
extrai(+Lista, +Atributo, -Valor)
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
61
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Nesta regra, este predicado serve para retirar o valor do atributo num de forma a preencher o segundo
campo da representação semântica do determinante. Esta informação, não sendo necessária ao
processamento sintáctico ou semântico posterior (porque a informação quanto ao número é mantida na
lista de traços da meta entrada lexical), é necessária para outros módulos do sistema.
A representação semântica do determinante, como já foi referido anteriormente (Capítulo 8), recebe as
representações semânticas do SV e do N’ que, por composição, resulta na formação da representação
semântica da frase. A etiqueta d indica que esta representação está associada a um determinante. O seu
subtipo é indicado através da expressão Palavra (que corresponde à forma semântica da entrada
lexical). A variável P indica a representação semântica que corresponde, tipicamente, à representação
semântica do SV da interrogativa, enquanto a variável Q é instanciada, tipicamente, com a representação
semântica do N’ . A variável X é instanciada com a variável abstraída mais externa do SV e do N’
evidenciando que se trata da mesma.
O determinante indefinido “ um” terá uma representação semântica do tipo:
(X^P)^(X^Q)^ d(um,sing,X,P & Q).
Meta-entrada para quantificadores universais
elex(det,Ltracos1,[spr : [], comp: [], gap : []],
(X^Res)^(X^Amb)^d(Palavra,Num,X,Res>Amb)) ==>
det(Palavra,Ltracos)
^[extrai(Ltracos,tipo,univ),
extrai(Ltracos,num,Num)].
Os quantificadores universais como “ todos” são tratados nesta meta-entrada. Esta restrição é aplicada
através do predicado extrai/3, que limita a aplicação desta regra aos determinantes que contêm na sua
lista de traços o par tipo:univ.
A representação semântica destes quantificadores é muito semelhante à dos determinantes existenciais.
No entanto o operador “ &” é substituído pelo operador “ >” que indica tratar-se de uma implicação.
Note-se que, como foi referido no capítulo 8, o determinante “ o” é considerado como um quantificador
universal neste sistema.
Meta-entrada para pronomes interrogativos
elex(n,Ltracos,[spr : [],comp: [],gap : []],
(X^Q)^(P *> Q)) ==> pi(Palavra,Ltracos) ^[P =..[Palavra,X]].
62
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
Os pronomes interrogativos apresentam a mesma função sintáctica dos SN. Por esta razão, a sua metaentrada é etiquetada com a categoria n. Desta forma, todo o processamento sintáctico das expressões
nominais é também aplicado a estes elementos. Como os exemplos seguintes demonstram, os pronomes
interrogativos aparecem como pronomes sem referência nas frases interrogativas:
4) Qual é o hipónimo de “ gato” ?
5) Quantos são os hipónimos de “ gato” ?
6) O que é um gato?
Estes pronomes encontram correspondência na resposta da frase interrogativa, sendo este facto reflectido
na sua representação semântica. Para facilitar o processamento posterior (nomeadamente na fase de
inferência e geração), a representação semântica do pronome interrogativo terá o seguinte formato:
palavra(X) *> Semântica_do_SV
Nesta representação semântica, a variável X unificará com a resposta à interrogativa introduzida pelo
utilizador. Na meta-entrada podemos verificar que essa variável X está co-indexada com a variável
abstraída mais externa da representação semântica do SV (Q).
Meta-entrada para pronomes interrogativos que podem ocorrer como especificadores
elex(det,Ltracos,[spr : [],comp: [],gap : []],
(X^Q)^(X^W)^(P *> (Q & W))) ==> pi(Palavra,Ltracos)
^[extrai(Ltracos,quant,s)),
P =..[Palavra,X]].
A palavra “ quantos” pode ocorrer em dois tipos de estruturas distintas, como pode ser observado pelos
exemplos seguintes:
7) Quantos hipónimos de “ gato” existem?
8) Quantos são os hipónimos de “ gato” ?
Estas estruturas parecem indicar que “ quantos” pode ocorrer como quantificador de um N’ ou como
pronome. Esta meta-entrada lexical trata do primeiro caso.
Embora este elemento ocorra em dois tipos de estruturas sintácticas muito diferentes, a esta base de dados
lexical tem apenas uma entrada correspondente ao pronome interrogativo, pois os traços e a forma
semântica são idênticos para as duas formas.
A restrição da aplicação da meta-entrada a todos os tipos de pronomes interrogativos é feita através do
predicado extrai/3 que procura o atributo quant na lista de traços da entrada lexical. Este atributo,
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
63
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
como vimos no capítulo 10, indica quais os pronomes interrogativos que podem ser especificadores.
Nesta fase do projecto apenas os interrogativos “ quantos” , “ quantas” e “ que” são tratados por esta regra.
A meta-entrada gerada apresenta a categoria det (como todos os quantificadores vistos anteriormente),
uma vez que pode ocorrer exactamente nos mesmos contextos que os determinantes indefinidos.
Como este elemento tem propriedades quantificadoras e pronominais, a sua representação semântica
apresenta semelhanças com a representação semântica de um determinante indefinido e com a dos
pronomes interrogativos.
Meta-entrada para o pronome relativo
elex(pr,[],[spr : [],comp: [], gap : []],_) ==> pr(_,[]) ^[].
Nesta meta entrada lexical são tratados os pronomes relativos. Considera-se que estes não possuem
qualquer tipo de representação semântica servindo apenas para preencher um gap (lacuna) numa
interrogativa. Esse gap pode ter características de especificador (sujeito) ou de complemento, como se
ilustra nos exemplos seguintes:
9) Quais são os animaisi que
i
têm patas?
10) Quais os alimentosi que os gatos comem
i?
No primeiro exemplo, o pronome relativo satisfaz o especificador do SV “ têm patas” e tem como
antecedente o N’ “ animais” . No segundo caso, o pronome satisfaz o complemento do verbo “ comer” e
tem como antecedente o N’ “ alimentos” .
11.1.2 META-ENTRADAS LEXICAIS NOMINAIS
As meta-entradas lexicais que em seguida se descrevem aplicam-se a todas as entradas lexicais de
categoria N. Estas expressões podem seleccionar complemento, como por exemplo “ hipónimo” e “ tipo” ,
por um lado, e “ gato” e “ queijo fresco” , por outro.
64
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
Meta-entrada para expressões nominais com especificador e complemento
elex(n, [nom:pred| Ltracos],
[spr : [r(det,_,[],[spr:[]|_],_)],
comp:[r(n,[marcado:s|_],[],[spr:[],comp:[],gap:[]],_)],
gap : []], Y^X^P) ==>
n(Palavra, Ltracos)
^[retira_elemento(Ltracos,scat:[comp:[marc:_]],_),
P=..[Palavra,Y,X]].
Esta meta-entrada lexical representa os nomes que seleccionam um complemento nominal e um
especificador do tipo “ determinante” . Permitindo a construção de estruturas como “ o hipónimo de gato “ .
Neste caso, a lista de restrições contém o predicado retira_elemento/3, já referido anteriormente, que
restringe a aplicação da regra a entradas lexicais que contenham o traço scat: [comp:[marc:_]]. A
razão desta restrição prende-se com o facto de o complemento seleccionado por estas expressões
nominais ser marcado, ou seja, conter um elemento do tipo marcador. Esse elemento, como vimos
anteriormente, não tem semântica, serve apenas para marcar um SN como complemento de uma
expressão nominal. Um exemplo de um complemento de “ hipónimo” é “ de gato” em que o elemento “ de”
serve de marcador ao SN “ gato” .
Note-se que na lista de traços do complemento pedido pela entrada lexical, é incluído o traço marcado
que indica que o complemento tem de ser marcado e que na lista de traços da meta-entrada lexical
continua a haver informação sobre qual o elemento que é pedido para o marcar. Como veremos, esta
informação impede a construção de estruturas mal formadas.
Note-se que à lista de traços da entrada lexical é acrescentado o par nom:compl que indica que se trata de
uma expressão nominal que selecciona complementos.
A representação semântica deste tipo de expressões é X^Y^palavra(X,Y). Esta representação indica
que X será instanciada com a variável abstraída mais externa do especificador (neste caso o sintagma
determinante) e Y com a variável abstraída mais externa do complemento (neste caso um sintagma
nominal). A representação semântica da palavra “ hipónimo” será X^Y^hipónimo(X,Y).
Meta-entrada para expressões nominais com complemento e sem especificador
elex(n,[nom:pred|Ltracos],
[spr : [], comp: [r(n,[marcado:s|_],[],[spr:[]|_],_)],
gap : []], (X^Q)^Y^(d(exi,Num,X,P & Q))) ==> n(Palavra, Ltracos)
^[retira_elemento(Ltracos,scat:[comp:[marc:_]],_),
extrai(Ltracos,num,Num),
P =..[Palavra,X,Y]].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
65
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
A meta-entrada lexical apresentada acima é muito semelhante à descrita anteriormente. No entanto, esta
meta-entrada lexical serve para representar expressões nominais que seleccionam complemento e ocorrem
sem especificador (por esta razão a lista de spr encontra-se vazia). Um exemplo de expressões
representadas por esta regra é “ hipónimo” na pergunta “ “ Mamífero” ” é hipónimo de “gato” ?” .
Como consequência de estas entradas lexicais não incluírem um especificador, a sua representação
semântica é também diferente da meta entrada anterior. A semântica de uma expressão nominal (N’ ), de
acordo com o formalismo semântico escolhido, unifica com o restritor da representação semântica do
determinante que selecciona formando a representação semântica do SN. Como estas expressões não
exigem especificador a representação semântica não pode ser construída desta forma. Para resolver este
problema assumiu-se que existe um determinante existencial omitido neste tipo de estruturas. Esta
omissão pode ser justificada em frases do tipo:
11) “ Gato” é hipónimo de “ felino” ?
12) “ Gato” é um hipónimo de “ felino” ?
Estas frases parecem demonstrar que, dependendo do pronome interrogativo, a expressão nominal pode
exigir ou não a presença de um determinante existencial, não sendo a representação semântica da frase
alterada. Por estas razões, foi necessário incluir na representação semântica deste tipo de entradas, a
representação semântica de um determinante existencial cujo restritor corresponde à representação
semântica da expressão nominal com as respectivas variáveis. Esta representação possui duas variáveis
por instanciar: uma para instanciar com a variável abstraída mais externa da representação semântica do
SV e com a própria representação do SV (X^Q), e outra para instanciar com a variável abstraída mais
externa da representação semântica do SN e com a própria representação semântica do SN (complemento
subcategorizado). A entrada lexical de “ hipónimo” , segundo esta regra, terá a seguinte representação
semântica:
(X^Q)^Y^d(exi,sing,X,hipónimo(X,Y) & Q).
Note-se que a representação semântica deste “ quantificador” possui a etiqueta exi, que serve para
identificar um determinante omisso. Esta designação vai ser particularmente útil na fase da geração.
A entrada lexical de “ hipónimo” tem duas representações semânticas dadas por cada uma das metaentradas referidas anteriormente. Ao ser feito o parsing da frase onde esta palavra se encontra, será
escolhida uma das duas representações, dependendo da ocorrência ou não de um determinante que a
quantifique.
66
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
Meta-entrada para nomes sem complementos
elex(n,Ltracos1,[spr : [r(det,_,[],[spr:[]|_],_)],
comp: [],gap : []], X^P) ==> n(Palavra,Ltracos)
^[heranca_de_tracos(Palavra,Ltracos,Ltracos1),
\+(extrai(Ltracos,scat,[comp:[_]])),
(extrai(Ltracos1,mass,s), extrai(Ltracos1,cont,s));
(\+(extrai(Ltracos1,mass,s))),
P =..[Palavra,X]].
Esta meta entrada lexical aplica-se a expressões nominais que não integram complemento mas integram
determinante. Um exemplo de uma expressão nominal tratada por esta regra é “ gato” na frase “ O gato é
um mamífero?” .
Como já foi referido anteriormente (Capítulo 10), todas as expressões nominais simples foram retiradas
directamente da WordNet.PT e, por esta razão, é necessário aplicar o mecanismo de herança de traços.
Esse mecanismo é aplicado através do predicado heranca_de_tracos/3:
heranca_de_tracos(+FSem,+Ltracos,-LRes).
Este predicado recebe uma representação semântica da expressão, a lista de traços da entrada lexical e
devolve uma lista com todos os seus traços herdados da sua cadeia de hiperónimos.
O predicado extrai/3 restringe a aplicação desta regra a expressões nominais que seleccionam
complemento, exigindo que a entrada lexical não contenha o traço respeitante à sua subcategorização.
Para além desta restrição, o predicado extrai/3 obriga a que as expressões nominais sejam massivas e
contáveis ou que não sejam massivas. Esta restrição serve para restringir certas interpretações semânticas.
Por exemplo:
13) Uma vaca é um animal?
O lexema “ vaca” , na base de dados lexical, é ambíguo entre “ animal” e “ carne de vaca” . No entanto, no
exemplo 13), “ vaca” só pode ter a interpretação de animal pois a presença de um quantificador obriga a
que a expressão nominal não seja massiva. Assim, esta meta-entrada lexical trata estes casos impedindo a
construção de representações semânticas incorrectas.
A semântica desta entrada lexical é dada pela representação semântica da palavra e a sua associação a
uma variável. A semântica destas expressões nominais é X^vaca(X).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
67
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Meta-entrada para nomes sem complementos e sem especificador
elex(n,Ltracos1,[spr : [],comp: [],gap : []],
(X^Amb)^(d(exi,Num,X,P & Q))) ==>
n(Palavra, Ltracos)
^[extrai(Ltracos,num,Num),
\+(extrai(Ltracos,scat,[comp:_])),
heranca_de_tracos(Palavra,Num,Ltracos1),
P =..[Palavra,X]].
Esta meta-entrada lexical trata de expressões nominais simples que não possuem qualquer tipo de
especificador como por exemplo:
14) Os hipónimos de gato são animais ?
O predicado extrai/3 obriga a que não conste da lista de traços da entrada lexical o atributo scat
relativo a complementos, impedindo as expressões nominais que seleccionam complemento de entrarem
nesta regra.
Como esta regra trata expressões nominais extraídas da WordNet.PT é necessário utilizar o predicado
heranca_de_tracos/3 que, como vimos, implementa o mecanismo de herança de traços.
Tal como acontece com as expressões nominais com complemento e sem especificador, é necessário
acrescentar à representação semântica destas expressões variáveis que sejam instanciadas pela
representação semântica do SV, ao longo do processamento semântico. Note-se no entanto, que o restritor
do determinante é simplesmente a própria expressão nominal sendo a variável do SV a única por
instanciar.
Meta-entrada para nomes que representam conceitos da WordNet.PT
elex(n,[num:sing],[spr : [],comp: [], gap : []],
(X^Q)^d(exi,sing,X,P & Q)) ==> r(ListaASCII)
^[name(Palavra2,ListaASCII),
(n(Palavra1,_) ---> [Palavra2];
v(Palavra1,[tempo:inf]) ---> [Palavra2]),
P =..[Palavra1,X]].
Para além de todas as expressões nominais e verbais já tratadas pelas meta-entradas lexicais, existem
algumas expressões verbais e nominais que parecem corresponder a conceitos da WordNet.PT e não a
conceitos per si. Vejamos os seguintes exemplos:
68
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
15) Qual é o hipónimo de “gato” ?
16) “ cear” é “ comer” ?
Neste exemplo “ gato” não se refere ao animal de quatro patas mas sim ao conceito de gato que está
representado na WordNet.PT e que se subdivide em vários subtipos (“ gato persa” , “ gato siamês” ). Do
mesmo modo, “ cear” e “ comer” referem-se aos conceitos da WordNet.PT e não ao acto em si, sendo por
isso utilizados como expressões nominais.
Estas expressões nominais não pedem complementos nem especificadores e, por esta razão, necessitam
de uma representação semântica semelhante à da meta entrada anterior.
Note-se que para as expressões nominais as aspas não são obrigatórias podendo ser tratadas pela metaentrada anterior. Desta forma, utilizadores mais especializados podem utilizar esta notação não obrigando,
no entanto, outros tipos de utilizadores a utilizá-la.
11.1.3 META-ENTRADAS LEXICAIS VERBAIS
Meta-entrada para o verbo "ser" predicativo
elex(v,Ltracos,[spr : [r(n,_,[],[spr:[]|_],_)],
comp: [r(C,_,[],_,_)], gap : []], X^X) ==>
v(ser,Ltracos)
^[ extrai(Ltracos,tipo_v,pred),
extrai(Ltracos,scat,[comp:C])].
O verbo “ ser” , como se pode verificar a partir dos exemplos abaixo, pode ocorrer com diferentes tipos de
complementos:
17) O peixe é do gato.
18) O gato é um animal.
19) O gato é mamífero.
Na frase 17), o verbo “ ser” ocorre com um sintagma preposicional enquanto nas frases 28) e 19) ocorre
com um sintagma nominal. O verbo “ ser” não tem a mesma semântica nas três frases. Em 17), “ ser” não
tem qualquer representação semântica, assumindo-se que a preposição é o elemento que exprime a
relação entre os dois SNs. Nas frases 18) e 19) é o verbo “ ser” que desempenha essa função.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
69
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
A meta-entrada aqui apresentada trata do primeiro caso, em que ao verbo “ ser” não se associa qualquer
tipo de representação semântica. Note-se, no entanto, que no último argumento da meta-entrada surge a
representação semântica X^X que se anula e resulta em X.
Os verbos que não têm qualquer representação semântica possuem o par tipo_v:pred na sua lista de
traços. Assim, é esse traço que restringe a entrada nesta meta-entrada lexical. O tipo de complemento
desses verbos é também retirado da sua lista de traços permitindo a reutilização desta regra para outros
verbos.
Meta-entrada para verbos intransitivos
elex(v,Ltracos,[spr : [r(n,_,[],[spr:[]|_],_)],
comp: [],gap : []], Y^P) ==>
v(Palavra, Ltracos)
^[\+retira_elemento(Ltracos,scat:[comp:_],_),
P =..[Palavra,Y]].
Esta meta-entrada lexical aplica-se a verbos intransitivos como por exemplo “ existir” em frases como
“ Quantos hipónimos de “gato” existem?” . Nestas estruturas, verbo tem como especificador um SN e não
tem qualquer tipo de complemento.
A lista de restrições desta meta-entrada lexical obriga a que na lista de traços destes verbos não conste
qualquer informação sobre complementos, o que indica tratar-se de um verbo intransitivo.
A representação semântica deste tipo de verbos é semelhante à representação semântica das expressões
nominais simples, uma vez que contém apenas uma variável abstraída que será instanciada com a variável
do seu especificador.
Meta-entrada para verbos com um argumento interno
elex(v,Ltracos1,[spr : [r(n,_,[],[spr:[]|_],_)],
comp: [r(C1,_,[],[spr:[],comp:[],_],_)],
gap : []],X^Y^P) ==>
v(Palavra, Ltracos)
^[\+(extrai(Ltracos,tipo_v,pred)),
\+(extrai(Ltracos,tipo_v,imp)),
retira_elemento(Ltracos,scat:[comp:C1],Ltracos1),
P =.. [Palavra,X,Y]].
Os verbos transitivos com apenas um argumento interno são tratados pela meta-entrada lexical descrita
acima. Esta meta-entrada indica que o verbo necessita de um SN como especificador e de um
complemento cuja informação categorial está presente na lista de traços associada à sua entrada lexical. O
70
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
predicado retira_elemento/3, através do traço scat:[compl:Categoria_complemento]], retira essa
informação da lista de traços e simultaneamente impõe restrições na aplicação desta meta-entrada (só os
verbos que contêm apenas um elemento na sua lista de complemento são tratados por esta regra).
O predicado extrai/3 restringe a entrada nesta regra a verbos predicativos (sem representação
semântica) e a verbos impessoais. Este predicado exige que os traços tipo:pred e tipo_v: imp não estejam
na lista de traços da entrada lexical.
A representação semântica deste tipo de verbos é muito semelhante à representação semântica das
preposições e dos nomes que seleccionam complemento. Esta semelhança é justificada pelo facto de todas
estas expressões representarem relações entre constituintes. A representação semântica destas expressões
é, portanto, da forma X^Y^palavra(X,Y), sendo X a variável abstraída mais externa do SN
complemento e Y a variável abstraída mais externa do SN especificador.
Meta-entrada para verbos impessoais (há)
elex(v,Ltracos,[spr : [], comp: [r(C,_,[],[spr:[],comp:[],_],_)],
gap : []],Y^P) ==>
v(Palavra, Ltracos)
^[extrai(Ltracos,tipo_v,imp),
extrai(Ltracos,scat,[comp:C]),
P =.. [Palavra,Y]].
Esta meta-entrada serve para tratar os verbos impessoais, ou seja, que seleccionam apenas um argumento,
que se realiza como objecto directo16. Por esta razão, estes verbos não flexionam em número existindo
apenas uma entrada lexical para cada um deles. Neste sistema o único verbo impessoal que é tratado é o
verbo “ haver” no sentido de “ existir” .
Esta regra tem como restrições à sua aplicação a existência do par atributo-valor tipo:imp, presente
apenas na lista de traços dos verbos impessoais. Esta regra extrai também da lista de traços a categoria do
complemento do verbo.
A representação semântica deste tipo de verbos é semelhante à dos verbos intransitivos com a diferença
de que a única variável abstraída corresponde à representação do complemento e não à do sujeito.
16
Como o sujeito é expletivo, a sua realização é marcada. Ex: Ele há cada uma!
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
71
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
11.2 REGRAS LEXICAIS
Para além das meta-entradas lexicais descritas anteriormente, a gramática contém regras lexicais que
recebem meta-entradas lexicais verbais e devolvem outras meta-entradas lexicais verbais. Estas regras
evitam o desdobramento de meta-entradas lexicais (nomeadamente as das expressões verbais), permitindo
a captação de generalizações importantes e tornando o sistema mais eficiente.
Regra Lexical para o tratamento do gap de complemento
elex(v,Ltracos1,[spr : SPR, comp: [],
gap : [r(_,_,[],_,Y)]],X^P) ==>
elex(v,Ltracos1,[spr : SPR,
comp: [r(_,_,[],_,Y)], gap: []],X^Y^P).
A meta-entrada lexical do lado direito da regra corresponde a uma meta-entrada de um verbo transitivo
com um complemento. Esta regra constrói uma nova meta-entrada lexical em que o especificador, a lista
de traços e a categoria são iguais às da meta-entrada referida.
O elemento da lista de complementos da meta-entrada passa para a lista gap ficando a lista comp vazia. A
representação semântica desta meta-entrada lexical é também alterada, ficando com apenas uma variável
por indexar (a do especificador).
Esta regra constrói uma nova meta-entrada lexical capaz de dar conta de frases relativas de complemento.
O verbo “ comer” da frase seguinte necessita desta nova meta-entrada lexical para que a frase seja
licenciada:
20) O alimento que o gato come é o peixe.
Regra Lexical para o tratamento de verbos impessoais com sujeito nulo
elex(v,Ltracos1,[spr : [],comp: [],
gap:[r(n,_,[],spr:[],comp:[],gap:[]],_)]], Sem) ==>
elex(v,Ltracos1,[spr:[], comp: [r(n,_,[],_,_)],
gap: []],Sem).
Esta regra lexical serve para tratar os casos em que os verbos impessoais não têm o complemento na
posição canónica, ou seja, à sua direita. Por exemplo:
21) Quantos hipónimos de gato há?
72
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
Neste exemplo, o complemento do verbo “ haver” encontra-se à esquerda do núcleo.
Esta regra recebe uma meta-entrada lexical de um verbo impessoal e coloca o complemento dessa entrada
lexical na lista gap, retirando-o da lista de complementos. Assim, a nova meta-entrada lexical pode ser
aplicada à regra sintagmática correspondente e aceitar estruturas como as de 21).
Note-se que, embora esta regra lexical seja muito semelhante à anterior do ponto de vista sintáctico, do
ponto de vista semântico é bastante diferente. A regra anterior aplica-se a verbos com dois argumentos e,
assim sendo, contém duas variáveis abstraídas sendo a segunda a correspondente à variável abstraída mais
externa da representação do complemento e a primeira à do sujeito. Neste caso, só temos uma variável
abstraída: a do complemento. A regra acima não conseguiria dar conta destes casos sendo necessário
desdobrá-la.
11.3 REGRAS SINTAGMÁTICAS
Às meta-entradas lexicais são posteriormente aplicadas regras sintagmáticas. Estas regras definem um
formalismo que contém regras sintácticas, regras semânticas e listas de restrições sintáctico-semânticas
que tornam possível o processamento sintáctico. Estas regras sintagmáticas baseiam-se na teoria X-Barra,
sendo que as meta-entradas lexicais correspondem a X, as regras com a lista spr não-vazia a X’ e as regras
cujas listas estão vazias a X’’.
spr : LSpr 
r(Cat,[traços],[objectivos_atrasados],comp : LComps,Representação


gap : LGap 
Semântica)
Figura 4 – Regra sintagmática
Cat corresponde à categoria X do sintagma e a lista de traços aos seus traços morfológicos e semânticos.
A lista de objectivos atrasados procura resolver o problema de falta de instanciação das regras, retardando
a execução de alguns predicados. Este problema foi referido anteriormente (Capitulo 7).
A lista de subcategorização indica, tal como nas meta-entradas lexicais, quais os elementos que faltam
encontrar para que uma dada estrutura seja licenciada. Esta lista contém as três sublistas utilizadas nas
meta-entradas lexicais: spr, comp e gap. Note-se que, ao contrário do que acontecia nas meta-entradas
lexicais, a lista gap pode não estar vazia.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
73
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Regra Sintagmática 1 – Promoção de X para X'
r(N,T,[],[spr : SPR, comp: [],gap : Gap],Sem) =>
[elex(N,T,[spr : SPR, comp: [], gap : Gap],Sem)].
A primeira regra promove uma meta-entrada lexical de categoria X em X’ . Todos os atributos da meta
entrada lexical são passados para o X’.
Esta regra sintagmática é aplicada apenas a meta-entradas lexicais cuja lista de complementos esteja
vazia. Isto implica que os verbos e as expressões nominais que seleccionam complemento não entrem
nesta regra, sendo primeiro associados aos seus complementos na regra sintagmática núcleocomplemento que se apresenta mais adiante. A lista de objectivos atrasados do X’ está vazia pois não
existem quaisquer operações a adiar.
Exemplo da aplicação desta regra sobre uma meta-entrada de uma expressão nominal sem complemento e
com especificador “ gato” :
•
Meta-entrada lexical
elex(n,[num:plu,gen:mas,cont:n,abst:n,anim:n,ser_vivo:n,hum:n,mass:n],
[spr : [r(det,_,[],_,_)],comp: [], gap :
•
[]], X^gato(X)).
Resultado da aplicação da regra sintagmática
r(n,[ num:plu,gen:mas,cont:n,abst:n,anim:n,ser_vivo:n,hum:n,mass:n],
[],[spr : [r(det,_,[],_,_)], comp: [], gap :
[]], X^gato(X)).
Regra Sintagmática 2 – Orações relativas restritivas
r(vr,T,[compoe_sem(SPR,GAP,T1,SEM,SEMCOMP,T)],
[spr : [], comp: [],
gap : []], SEMCOMP) => [r(pr,_,[],_,_),
r(v,T1,[],[spr:SPR,comp:[],gap:GAP],SEM)].
Consideraram-se, neste projecto, dois tipos de orações relativas restritivas:
74
•
de sujeito (em ex. “ o animali que
•
de complemento directo (em ex. “ o peixei que o gato come
i
come peixe é o gato” )
i
é o carapau” )
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
Nas oração relativa restritiva de complemento e sujeito marca-se uma posição (com o símbolo
),
sintacticamente vazia, co-indexada com o N antecedente da relativa. Por exemplo, a frase “ o gato come o
peixe” sofre então uma alteração para “ o peixei que o gato come
i” .
Chamamos a essa posição vazia
“ gap” (lacuna).
A regra sintagmática apresentada acima trata este tipo de estruturas, associando um V’ a um pronome
relativo. O V’ em questão pode ter um elemento por satisfazer na sua lista spr (orações relativas de
sujeito) ou na sua lista gap (orações relativas de complemento).
O predicado compoe_sem/6 recebe a lista spr, a lista gap, a lista de traços e a representação semântica
do V’ , devolvendo a representação semântica e a lista de traços da oração relativa (VR). Relembra-se que
se optou por não atribuir informação semântica ao pronome relativo “ que” , uma vez que não influencia
em nada a representação semântica da oração relativa e, posteriormente, a do SN.
Este predicado trata dois casos distintos:
i) Lista gap com um elemento e spr vazia;
ii) Lista spr com um elemento e gap vazia.
i) Lista gap com um elemento e spr vazia
Quando a lista gap tem um elemento e a spr está vazia, então estamos perante uma oração relativa de
complemento. Considerando o exemplo “ que o gato come
” tem-se:
(i)
representação do SN “ o gato” [(X^A)^d(o,sing,X,gato(X) & A)]
(ii)
representação do verbo “ comer” [Z^W^comer(Z,W)]
(iii)
após aplicação da regra lexical que coloca o complemento na lista gap, representação do
verbo “ comer” [Z^comer(Z,W)]
(iv)
pela composição de (i) com (iii), representação da frase “ o gato come ∅“
[d(o,sing,Z,gato(Z) & comer(Z,W))]
Em (iv) verifica-se que a representação semântica da frase não tem qualquer tipo de abstracção. Contudo,
a variável W ocorre livre. Neste caso, o predicado introduz uma nova variável abstraída co-indexada com
W, que instanciará com a representação semântica do SN antecedente. Em (v) apresenta-se a nova
representação semântica da oração relativa.
(v)
representação da oração relativa “ que o gato come
” , após aplicação do predicado em
questão: [W^d(o, sing, Z, gato(Z)&comer(Z,W))]
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
75
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
A lista de traços que passa para VR encontra-se vazia porque o antecedente da oração relativa não tem
qualquer tipo de relação de concordância com o seu verbo.
ii) Lista spr com um elemento e gap vazia
O segundo caso que o predicado compoe_sem/6 trata é o das relativas de sujeito (sem especificador). A
representação semântica do V’ sem especificador é igual à representação semântica do VR. Neste caso o
V’ já contém uma variável que corresponde ao SN especificador, passando apenas para VR de modo a
encontrar o antecedente da oração relativa na regra seguinte. Tomemos como exemplo “ que come peixe” .
Temos, então, a forma do verbo [Z^W^comer(Z,W)] e a do SN [(M^A)^d(exi,sing,M,peixe(M) &
A)]. Compondo as duas formas, pela maneira acima descrita, obtemos a representação semântica do SV
(“ come peixe” ) [Z^d(exi,sing,W,peixe(W) & comer(Z,W))].
A lista de traços do VR, neste caso, é igual à lista de traços do V’ porque o verbo tem de concordar com o
antecedente da relativa em número e pessoa.
Regra Sintagmática 3 – Adjunção de um modificador (SP/VR) a um N’ e de um quantificador a um
N’’
r(n,T1,[adjunto(C1,C), trata_spr(SPR,Sem,T1,T,Sem1,Sem2)],
[spr:SPR, comp:[], gap:[]], Sem2) =>
[r(C1,T1,[],[spr:SPR,comp:[],gap:[]],Sem1),
r(C,T,[],[spr:[],comp:[],gap:[]],Sem)].
As adjunções de orações relativas e de sintagmas preposicionais a N’ e as adjunções de quantificadores a
N’ ’ são tratadas por esta regra. O segundo argumento do lado direito da regra só pode ser um sintagma
uma vez que todas as listas de subcategorização se encontram vazias. A lista de objectivos atrasados da
regra chama o predicado adjunto/2 que obriga a que a categoria deste sintagma seja p (preposição) ou
vr (oração relativa) se C1 for de categoria n ou que a categoria C desse sintagma seja n e a de C1 det
(quantificador).
Esta regra aplica-se a dois casos distintos:
i) Adjunções de SPs e orações relativas a N’ ;
ii) Adjunções de quantificadores a N’ ’
76
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
i)
Adjunções de SPs e orações relativas a N’
Neste caso, o primeiro argumento da regra corresponde a um N’ uma vez que a lista spr pode não estar
vazia. Note-se que a não obrigatoriedade da existência de um elemento na lista spr permite a construção
dos tipos de frases:
22) Animais que são mamíferos bebem leite
23) Pulgas de gatos são animais
24) Os animais que são mamíferos bebem leite
25) As pulgas dos gatos são animais
A representação sintáctica adoptada para as este tipo de construções foi a da adjunção de orações relativa
e de sintagmas preposicionais a N'
. Embora este tipo de representação não seja totalmente aceite para este
tipo de estruturas, foi a escolhida por ser a mais adequada do ponto de vista linguistico e da eficiência do
sistema.
Na figura 5 apresenta a representação sintáctica dos exemplos 24) e 25) apresentados acima.
Figura 5 – Representação em árvore da estrutura sintáctica adoptada para as adjunções a N’
A representação semântica do novo N'é dada através do predicado trata_spr/6, que recebe a lista
spr do N’ , a representação semântica do sintagma adjunto e a sua lista de traços, a lista de traços do N’ e
a sua representação semântica, devolvendo a representação semântica. Esta representação depende da
existência de um elemento na lista spr: se a lista estiver vazia, dá-se o caso representado pelos exemplos
22) e 23) em que o antecedente da oração relativa/sintagma preposicional não tem um sintagma
determinante que o quantifique. Como vimos anteriormente, a representação semântica de uma expressão
nominal sem determinante é (A^B)^d(exi, plu, A, animal(A)&B).
A representação semântica da oração relativa nos exemplos 22) e 24) (“ que são mamíferos” ) é a seguinte:
D^d(exi, plu, C, mamífero(C)&ser(D, C))
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
77
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
A representação semântica do novo N’ necessita de ser acrescentada ao último argumento da
representação semântica do determinante de tipo exi do N’ “ animais” /” pulgas” , sendo a variável
abstraída mais externa da representação semântica da oração relativa/sintagma preposicional instanciada
com a variável abstraída mais externa da representação semântica do N’ (A) . Utiliza-se o símbolo “ &” , de
conjunção, para compor a semântica de um N'com uma oração encaixada (relativa ou preposicional). Se
isto não acontecesse e a representação semântica da oração relativa fosse instanciada com a segunda
variável do operador “ &” do determinante (P & Q), deixar-se-ia de ter variáveis que pudessem receber a
representação semântica do SV a que este N’ se viria a associar.
A representação semântica do exemplo 22) acima seria:
(A^B)^d(exi, plu, A, animal(A) & d(exi, plu, C, mamífero(C)&ser(A, C))&B)
Nos exemplos 24) e 25) a lista spr não se encontra vazia. Contudo a informação de que falta associar um
determinante a todo o novo N’ está presente.
Neste caso, a representação semântica do segundo N’ faz-se através da composição das representações
semânticas do primeiro N’ e do VR. Essa composição é feita, como vimos anteriormente, através do
operador &. A variável abstraída mais externa da representação semântica do N’ é co-indexada com a
variável abstraída mais externa da representação semântica do VR, sendo essa variável a variável
abstraída mais externa da representação semântica do novo N’ . Na figura 6 é ilustrado o processo para o
exemplo 24) .
Figura 6 – Exemplo da aplicação da Regra Sintagmática 3
Esta representação semântica está agora pronta para se juntar a uma representação semântica de um
determinante de modo a formar um SN (regra sintagmática 7). Esta regra sintagmática devolve duas
representações semânticas, sendo uma delas eliminada posteriormente.
78
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
A representação semântica de N'adjunto a um sintagma preposicional é, como vimos, idêntica à das
orações relativas. Observemos o processo de construção semântica para o exemplo 25) acima (“ as pulgas
do gato” ):
“ de o gato”
(i)
representação da preposição “ de” [Z^W^de(Z,W)]
(ii)
representação do SN “ o gato” [(X^A)^d(o,sing,X,gato(X) & A)]
(iii)
pela regra sintagmática 8 (núcleo-complemento) (apresentada adiante), representação do SP
“ de o gato” [Z^d(o,sing,W,gato(W) & de(Z,W)]
“ pulga de o gato”
(iv)
representação do nome “ pulga” [P^pulga(P)]
(v)
representação do SP “ de o gato” [Z^d(o,sing,W,gato(W) & de(Z,W))]
(vi)
pela regra sintagmática acima descrita e composição de (iv) com (v), representação do N'
“ pulga de o gato” [P^(pulga(P) & d(o,sing,W,gato(W) & de(P,W)))]
“ a pulga de o gato”
(vii)
representação do determinante “ a” [(X^R)^(X^A)^d(o,sing,X,R & A)]
(viii)
representação do N’ “ pulga de o gato” [P^(pulga(P) & d(o,sing,W,gato(W)&
de(P,W)))]
(ix)
pela regra sintagmática 7 (especificador-núcleo) (apresentada adiante) e composição de (vii)
com
(viii),
representação
do
SN
final
[(P^A)^d(o,sing,P,pulga(P)
&
d(o,sing,W,gato(W) & de(P,W))) & A)]
O predicado trata_spr/6 verifica também se as listas de traços do sintagma adjunto e do modificador
não apresentam informação contraditória. Para isso utiliza o predicado unifica/3 de Marrafa (1993),
que recebe duas listas de traços e devolve uma nova lista com todos os traços sem repetições, se não
existirem inconsistências. Isto é, se numa lista aparece o atributo Z com valor W e na segunda lista
aparece o mesmo atributo Z mas com valor R, é captada uma inconsistência e o predicado falha.
ii)
Adjunções de quantificadores a N’’
Nesta regra sintagmática é também tratado o caso da adjunção de quantificadores a N’ ’ . O quantificador
“ todos” só pode co-ocorrer com um determinante definido, como é ilustrado pelos seguintes exemplos:
26) Todos os gatos são animais?
27) *Todos uns gatos são animais?
28) *Todos alguns gatos são animais?
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
79
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Por esta razão assume-se que o quantifiador “ todos” pode ser adjunto a um N’ ’ , ou seja, a um SN cujo
especificador já foi satisfeito com um determinante definido. A representação sintáctica destas
construções é ilustrada na figura 717.
Figura 7 – Representação da estrutura sintáctica adoptada para a adjunção do quantificador “ todos” a N’ ’
O predicado trata_spr/6 constrói a representação semântica mais adequada a estes casos, ou seja,
modifica a representação semântica do N’ ’ adjunto para que todo este seja quantificado pelo quantificador
“ todos” . Por exemplo, na frase seguinte:
29) Todos os gatos e cães são animais ?
O quantificador “ todos” pode ou não ter âmbito sobre “ os gatos” e sobre
“ cães” . No entanto, a
representação semântica do SN “ os gatos e cães são animais” é a seguinte:
d(o, plu, A, gato(A)>d(exi, plu, B, animal(B)&ser_v(A, B)))&
d(exi, plu, C, cão(C)&d(exi, plu, B, animal(B)&ser_v(C, B)))
Como se pode verificar, é necessário modificar a semântica da quantificação deste N’ para que seja
construída a interpretação em que o determinante “ todos” tenha âmbito sobre toda a coordenação. O
predicado trata_spr/6 constrói essa interpretação ficando:
d(todo, plu, A, gato(A)>d(exi, plu, B, animal(B)&ser_v(A, B)))&
d(todo, plu, C, cão(C)>d(exi, plu, B, animal(B)&ser_v(C, B)))
Este predicado restringe também a construção de estruturas de adjunção deste tipo com o quantificador
“ qualquer” . Este não pode ocorrer seguido de um determinante definido como se pode verificar nos
exemplos seguintes:
30) *Qualquer o gato é animal?
30’ ) Qualquer gato é animal?
17
Embora esta não seja a estrutura sintáctica mais aceite actualmente para este tipo de construções, é a estrutura
linguisticamente mais adequada e eficiente à implementação no formalismo escolhido. Para um tratamento adequado
da estrutura sintáctica ver, por exemplo, Zamparelli (1995).
80
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
O predicado trata_spr/6 devolve também uma nova lista de traços correspondente ao SN resultante da
adjunção.
Regra Sintagmática 4 – Adjunção da negação a SV
r(v,T1,[],[spr:[SPR], comp:[],
gap:GAP], X^Sem1) => [elex(neg,_,_,Sem^Sem1),
r(v,T1,[],[spr:[SPR],comp:[],
gap:GAP], X^Sem)].
Um fenómeno linguístico importante, e que tem de ser considerado, é a negação. Como vimos nas metaentradas lexicais, consideramos apenas o operador de negação “ não” . A sua representação semântica é
igual à de um verbo intransitivo (de um lugar) porque a ideia essencial é colocar todo o SV negado como
argumento da partícula de negação.
Nesta regra, a meta-entrada lexical da partícula de negação é associada a um V’ devolvendo um novo V’
com uma nova representação semântica. A restrição que se impõe à aplicação desta regra a um V’ é a da
lista spr ter de conter um elemento e de a lista comp estar obrigatoriamente vazia. A lista gap pode ou
não estar vazia, permitindo a negação dentro das orações relativas (de complemento ou de especificador)
assim como de qualquer V’ numa frase:
31) Os animais que não são mamíferos …
32) Os alimentos que o gato não come …
33) Uma planta não come carne?
A representação sintáctica adoptada para os V’ é uma estrutura de adjunção:
Figura 8 – Representação em árvore da estrutura sintáctica adoptada para a adjunção do operador de
negação a SV
A representação semântica destas estruturas é dada pela representação semântica do V’ com negação
sendo a variável abstraída mais externa deste V’ unificada com a variável abstraída mais externa da
representação semântica do novo V’ .
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
81
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Estas estruturas podem ser ambíguas dependendo do escopo da negação, que pode ou não incluir o
complemento de V. Neste sistema a estratégia seguida foi a de considerar apenas as interpretações mais
próximas da estrutura sintáctica da frase. As representações semânticas dos exemplos descritos acima são:
31) Os animais que não são mamíferos …
(A^B)^d(o,plu,A,animal(A)&~(d(exi,plu,C,mamífero(C)&ser(A,C)))& B)
32) Os alimentos que o gato não come …
(A^B)^d(o,plu,A,alimento(A)&d(o,sing,C,gato(C)&~(comer(A,C)))& B)
33) Uma planta não come carne?
d(o,plu,A,planta(A)&~(d(exi,sing,B,carne(B)&comer(A,B))))
No exemplo 32), é negado apenas o verbo porque se trata da negação de uma oração relativa de
complemento. A adjunção da negação nestes casos dá-se antes da junção da representação semântica do
V’ à do seu complemento. Este problema só seria correctamente resolvido se existisse um mecanismo que
gerasse todas as interpretações semânticas possíveis e as respectivas representações. Contudo, esse
mecanismo geraria muitas interpretações equivalentes e interpretações não usuais, o que dificultaria o
trabalho de inferência numa fase posterior.
Vejamos agora o processo de construção da representação semântica da frase “ o gato não comeu o
peixe” :
“ comeu o peixe”
(i)
representação do SN “ o peixe” [(Z^B)^d(o,sing,Z,peixe(Z) & B)]
(ii)
representação do verbo “ comer” [Y^W^comer(Y,W)]
(iii)
pela regra sintagmática 8 (núcleo-complemento) (ver adiante) e composição de (i) com (ii),
representação do SV [Y^d(o,sing,Z,peixe(Z) & comer(Y,Z))]
“ não comeu o peixe”
(iv)
representação da partícula de negação “ não” [X^~(X)]
(v)
representação do SV “ comeu o peixe” [Y^d(o,sing,Z,peixe(Z) & comer(Y,Z))]
(vi)
pela regra sintagmática acima descrita e composição de (iv) com (v), representação do SV
[Y^~(d(o,sing,Z,peixe(Z) & comer(Y,Z))]
“ o gato não comeu o peixe”
(vii)
representação do SN “ o gato” [(X^A)^d(o,sing,X,gato(X) & A)]
(viii)
representação
do
SV
“ não
comeu
o
peixe”
[Y^~(d(o,sing,Z,peixe(Z)
&
comer(Y,Z))]
82
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
(ix)
pela regra sintagmática 7 (especificador-núcleo) (ver adiante) e composição de (vii) com
(viii), representação da frase final “ o gato não comeu o peixe” [d(o,sing,X,gato(X) &
~(d(o,sing,Z,peixe(Z) & comer(Y,Z))]
Regra Sintagmática 5 – SNs marcados
r(n,[marcado:s|T1],[\+(extrai(T1,marcado,s)),
verifica_relacional(Sem,T1,Sem1)],
[spr:[], comp:[], gap:[]],Sem1) =>[r(marc,_,[],[spr:[],comp:[],gap:[]],_),
r(n,T1,[],[spr:[],comp:[],gap:[]],Sem)].
Esta regra sintagmática possibilita a construção de SNs marcados que possam ser complementos de
nomes. Esta regra associa um SN a um elemento do tipo “ marcador” e constrói um novo SN marcado cuja
semântica é idêntica à do SN inicial.
O predicado verifica_relacional/3 permite a análise correcta das seguintes estruturas:
37) O hipónimo do hipónimo de “ gato” é “ animal” ?
38) O hipónimo de “ gato” é “ felino” ?
39) * O hipónimo do “ gato” é “ felino” ?
Este predicado recebe a representação semântica do SN à direita do elemento “ marcador” , a sua lista de
traços e devolve a nova semântica (igual à que recebe). Desta forma é exigido que ou o SN não tem
determinante (38) (impondo que o segundo argumento de d seja do tipo exi que, como vimos, indica a
ausência de determinante) ou o SN é composto por um nome que selecciona complementos (37).
O SN resultante da aplicação desta regra apresenta uma lista de traços semelhante à do SN do lado direito
da regra, acrescentando no entanto o par marcado:s. A inclusão deste traço na lista do novo SN, assim
como a chamada ao predicado extrai/3 na lista de objectivos atrasados restringe a entrada do novo SN
nesta regra. Desta forma, frases como a seguinte são rejeitadas:
40) *O hipónimo de de “ gato” é “ mamífero” ?
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
83
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Regra Sintagmática 6 – Coordenações
r(V,Ltracos5,[ \+(extrai(Ltracos,coord,_)),
testa_conjuncao(C, Ltracos2, Ltracos3),
coordena(V,Sem1,Sem3,Ltracos3,Ltracos4,Sem4),
insere_cabeca(Ltracos4,marcado:s,Ltracos5),
verifica_sv(V,Ltracos,Ltracos2)],
[spr : SPR, comp: [],gap : Gap], Sem4) =>
[r(V,Ltracos,[],[spr:SPR,comp:[],gap:Gap],Sem1),
r(conj,conj:C],[],[spr:[],comp:[],gap: []],_),
r(V,Ltracos2,[],[spr: SPR, comp:[],gap: Gap],Sem3)].
Esta regra sintagmática18 trata as coordenações de SNs (marcados ou não), SVs, SPs e orações relativas
(VRs). O lado direito da regra contém dois SX do mesmo tipo, coordenados por uma conjunção.
Os operadores de conjunção tratados neste trabalho são “ e” e “ ,” . Estes operadores apresentam na sua
lista de traços o atributo conj que tem o valor f (final) — no caso do “ e” — ou nf (não final) — no caso
da “ ,” . Este atributo é fundamental para restringir a aceitação de estruturas como:
41) *O gato e o cão, a aranha são animais?
42) *O gato, o cão, a aranha são animais?
Sabemos que imediatamente depois de uma vírgula terá de figurar uma coordenação de SNs (SNc);
sabemos também que imediatamente depois de um “ e” terá de surgir um SN simples (SNs). Assim, um
SN coordenado terá a estrutura representada na figura 9.
Figura 9 – Representação em árvore da estrutura sintáctica adoptada para as conjunções
O predicado testa_conjuncao/3 conjuntamente com o predicado extrai/3, tratam esta restrição. O
primeiro predicado recebe o valor do atributo tipo da conjunção em questão, e a lista de traços do
sintagma à direita desta, devolvendo a lista de traços do novo sintagma. Esta nova lista contém todos os
18
Esta regra sintagmática foi baseada na regra da disjunção de Kamp & Reyle (1993).
84
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
traços da lista recebida mais o que indica que o sintagma já está coordenado coord:s. Este predicado
impõe as seguintes restrições:
•
Se a conjunção for do tipo f (um “ e” ), a lista de traços do sintagma à direita dessa conjunção não
pode ter o traço coord:s, ou seja, não pode haver coordenação
•
Se a conjunção for do tipo nf (uma “ ,” ) a lista de traços do sintagma à direita da coordenação tem de
ter o traço coord:s, obrigando assim a que seja um sintagma coordenado.
O sintagma mais à esquerda da conjunção é, nos dois casos acima, não coordenado (simples). Por essa
razão, é chamado o predicado extrai/3 sobre a lista de traços desse sintagma, verificando a ausência do
atributo coord.
A representação semântica de coordenações é dada através do operador “ &” que junta a representação
semântica do primeiro sintagma ao segundo deixando as respectivas variáveis abstraídas de fora. A
representação semântica teria a seguinte forma: X^Y^(S1 & S3), onde X^S1 corresponde a Sem1 e Y^S3
a Sem3, na regra acima descrita. Esta representação semântica não pode ser feita directamente na regra
sintagmática porque podemos ter coordenações de mais de dois sintagmas. Veja-se o exemplo do SN “ o
gato, o cão e a aranha” :
“ o cão e a aranha”
(i)
representação do SN1 “ o cão” [(X^A1)^d(o,sing,X,cão(X) & A1)]
(ii)
representação do SN2 “ a aranha” [(Y^A2)^d(o,sing,Y,aranha(Y) & A2)]
(iii)
pela regra semântica e composição de (i) com (ii), representação do SN “ o cão e a aranha”
[(X^A1)^(Y^A2)^(d(o,sing,X,cão(X)&A1) & d(o,sing,Y,aranha(Y) & A2))]
“ o gato, o cão e a aranha”
(iv)
representação do SN3 “ o gato” [(Z^A3)^d(o,sing,Z,gato(Z) & A3)]
(v)
representação do SN4 “ o cão e a aranha” [(X^A1)^(Y^A2)^(d(o,sing,X,cão(X) &
A1) & d(o,sing,Y,aranha(Y) & A2))]
(vi)
pela regra semântica a estudar e composição de (iv) com (v), representação do SN “ o gato, o
cão e a aranha”
[(Z^A3)^(X^A1)^(d(o,sing,Z,gato(Z))&(Y^A2)^d(o,sing,
X,cão(X) & A1) & d(o,sing,Y,aranha(Y) & A2))]
Como se pode observar, esta representação semântica tem alguns problemas quando se trata de coordenar
mais de dois sintagmas. Desta forma, a representação semântica das coordenações é dada pelo predicado
coordena/6 que recebe a categoria dos sintagmas a coordenar, a sua representação semântica e a lista de
traços devolvida pelo predicado testa_conjunção/3 (a lista de traços do sintagma mais à direita com o
traço coord:comp).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
85
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
O predicado coordena/6 chama os predicados coord_sn/3 e coord_sx/3 que realizam todas as
operações necessárias à coordenação de múltiplos SXs:
O coord_sn/3 [coord_sn(+A^SN1,+SN2,-A^SN)]:
-
recebe dois SNs,
-
guarda numa lista todas as abstracções de SN2 (pode ser um SN coordenado) e em SN2s a
fórmula sem abstracções,
-
aplica as abstracções da lista a (SN1 & SN2s), que devolve em SN (note-se que SN1 não tem
abstracções),
-
finalmente, aplica a abstracção do SN1 (A) a SN.
Obtém-se, assim, em SN, a representação semântica do SN coordenado final.
Neste caso, o predicado coordena/6 retira da lista de traços que recebe o traço relativo ao número e
introduz-lhe o par num:plu. Isto serve para que a concordância com o verbo seja feita de forma correcta.
O coord_sx/3 [coord_sx(+Sx1,+Sx2,-Sx).]:
-
recebe dois SXs com abstracções (Sx1 e Sx2),
-
retira essas abstracções e força a igualdade dessas variáveis,
-
aplica a variável resultante a (Sx1s & Sx2s) — (Sx1s e Sx2s correspondem às respectivas
fórmulas sem abstracções)
Exemplo do SV coordenado “ tem patas e é mamífero ” :
(i)
representação do SV “ tem patas” (SV1) [A^d(exi, plu, B, pata(B) & ter(A, B)]
(ii)
representação do SV “ é ‘mamífero’ ” (SV2) [C^d(exi,sing,D,mamífero(D)&ser(C,D))]
(iii)
pela regra de SV coordenado e composição de (i) com (ii), representação do SV final “ tem patas
e é ‘mamífero’ ” [E^(d(exi, plu, B, ovo_2(B) & ter(E, B)) & d(exi, sing, D,
mamífero(D) & ser(E, D)))]
O último predicado da lista de objectivos atrasados coloca à cabeça da lista de traços que será associada
ao novo SX o par marcado:s (se este existir na lista). Esta operação serve para facilitar o processamento
posterior, no caso de se tratarem coordenações de SNs marcados, como por exemplo:
43) O hipónimo de “gato” e de “cão” é “ mamífero” ?
86
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
Regra Sintagmática 7 – Especificador - núcleo
r(N,Ltracos3,[sem_spr(N,Ltracos,T1,Y^Sem,Sem1,Ltracos3,Sem2)],
[spr:[],comp:[],gap:GAP], Sem2) =>
[ r(C,Ltracos,[],SCAT,Sem1),
r(N,T1,[],[spr:[r(C,Ltracos,[],SCAT,Sem1)],
comp:[],gap:GAP],Y^Sem)].
Esta regra recebe um X’ e um Y’ ’ pedido pela lista de especificadores de X’ , e devolve como resultado um
X’ ’ . O esquema seguinte ilustra o tipo de estruturas tratado por esta regra:
Figura 10 – Representação em árvore da estrutura sintáctica adoptada para o especificador-núcleo
Esta regra pode ser aplicada a V’ , que tem como especificador SN, e a N’ que têm como especificador um
D. A lista spr de X’ é satisfeita com o Y’ ’ e, por essa razão, a lista do X’ ’ resultante encontra-se também
vazia. A lista gap sobe simplesmente na estrutura podendo estar ou não vazia. Se essa lista não estiver
vazia, a regra permite a associação de SNs a V’ em relativas, de modo a aceitar estruturas do tipo:
44) o alimentoi que o gato come ∅i
Esta regra permite associar o SN “ o gato” ao verbo “ comer” que contém um complemento na lista gap
“ o alimento” .
A lista de objectivos por realizar contém uma chamada ao predicado sem_spr/7, que recebe a
categoria do X’ , a lista de traços de Y’ ’ e de X’ e a representação semântica de X’ e de Y’ ’ . Este predicado
devolve a lista de traços e a representação semântica do novo sintagma tratando dois casos distintos:
i) X’ de categoria v e Y’ ’ um SN;
ii) Restantes categorias
i) X’ de categoria v e Y’’ um SN
Quando X’ é de categoria v e Y’’ é um SN, as duas listas de traços são unificadas (através do predicado
unifica/3) sendo a lista resultante a lista de traços do SV. A representação semântica do SV é dada
através do predicado subs/3, que recebe duas representações semânticas, co-indexa as variáveis
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
87
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
abstraídas mais externas da primeira representação com a variável abstraída da segunda, devolvendo uma
nova representação semântica. Neste caso, co-indexa a(as) variável(eis) abstraída(s) mais externa(s) do
SN (especificador) com a variável abstraída mais externa do V’ . Este predicado tem uma utilidade
particular no caso de o SN ser coordenado. Vejamos o seguinte exemplo:
45) O gato e o cão são animais?
A representação semântica do SN “ o gato e o cão” é a seguinte:
(A^Amb1)^(C^Amb2)^(d(o,sing,A,gato(A)>Amb1)&d(o,sing,C,cão(C)>Amb2))
A representação semântica do V’ “ são animais” é:
X^d(exi, plu, B, animal(B)&ser(X, B))
Como podemos observar pelos exemplos acima, existem dois âmbitos para instanciar com uma mesma
variável. Esta instanciação não pode ser feita apenas com o mecanismo de instanciação do Prolog e, por
esta razão, define-se o predicado subs/3 que realiza, recursivamente, a substituição de todas as variáveis
de uma fórmula. Este predicado é definido da seguinte forma:
subs(X^F,X,F):- var(X).
subs((X^A)^F,V^SV,R) :- substitute(X,V,SV,A), !, subs(F,V^SV,R).
subs(F,_^_,F).
A primeira cláusula serve para tratar os casos do verbo “ ser” sem semântica, que selecciona um SP,
enquanto a última serve para aceitar casos em que o SN final é constituído apenas por N.
O predicado subs/3 chama um outro predicado, substitute/4 (Sterling & Shapiro), que efectua a coindexação necessária entre todas as variáveis por abstrair do SN (Amb1 e Amb2) com a variável por
abstrair do V’ (X).
substitute(+Term,+Var,+Formula,-Result).
Este predicado recebe um termo Term, uma variável Var e uma fórmula Formula e devolve em Result
o resultado da substituição de Var por Term em Formula.
Exemplo:
?- substitute(A,B,sorrir(B),Z).
Z = sorrir(A)
88
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
A semântica da frase “ o cão e o gato são animais“ , depois de aplicados estes predicados seria:
d(o, sing, A, gato(A) > d(exi, plu, B, animal(B) & ser(A, B)))
& d(o, sing, C, cão(C) > d(exi, plu, B, animal(B) & ser(C, B)))
ii) Restantes categorias
Nos restantes casos, como por exemplo as expressões nominais que têm sintagmas determinantes como
especificador, o predicado sem_spr/7, chama apenas o predicado unifica/3, que unifica as duas
listas de traços de modo a detectar eventuais inconsistências.
Regra Sintagmática 8 – Verbo existir com inversão de sujeito
r(v,Ltracos1,[extrai(T1,tipo,existe), unifica(T1,Ltracos,Ltracos1),
subs(Sem1,Sem2,Sem3)],
[spr:[],comp:[],gap:[]],Sem3) =>
[r(v,T1,[],[spr:[r(n,Ltracos,[],[spr:[],comp:[],gap:[]],Sem1)]
comp:[], gap:[]],Sem2),
r(n,Ltracos,[],[spr:[], comp:[], gap:[]],Sem1)].
Nesta regra sintagmática é tratado o caso específico do verbo existir, com o sujeito à direita, em frases
como:
46) Existem quantos hipónimos de “ gato” ?
Este verbo apresenta algumas características especiais. Embora possa ser considerado um verbo
intransitivo em construções do tipo 47) e, consequentemente, tratado pela regra sintagmática 7, pode
também ocorrer em construções como a de 46), contrariamente aos verbos intransitivos 48).
47) Quantos hipónimos de “ gato” existem?
48) *Miam quantos hipónimos de “ gato” ?
Por esta razão, e por 46) se tratar de uma construção frequentemente utilizada em sistemas deste tipo, foi
necessária a inclusão de uma regra sintagmática específica.
Na lista de objectivos atrasados encontra-se o predicado extrai/3 que restringe a aplicação desta regra
ao verbo existir, exigindo a presença do par tipo:existe na lista de traços do V’ . Para além deste predicado
é chamado o predicado unifica/3 (que obriga a concordância entre o verbo e o seu sujeito) e o
predicado subs/3 (que constrói a representação semântica adequada permitindo um SN coordenado
como sujeito). Desta forma, as construções 49) e 50) são correctamente analisadas:
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
89
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
49) *Existe quantos hipónimos de “ gato” ?
50) Existem hipónimos de “ gato” e de “ cão” ?
Regra Sintagmática 9 – Gap à direita de um núcleo verbal
r(v,Ltracos,[subs(Sem1,Sem2,Sem3)],
[spr :[], comp:[], gap :[]], Sem3) =>
[r(C,Ltracos,[],SCAT,Sem1),
r(v,_,[],[spr :[], comp:[],
gap:[r(C,Ltracos,[],SCAT,_)]],Sem2)].
A regra sintagmática apresentada acima trata o caso das construções do tipo:
51) Quantos hipónimos de “ gato” há?
Nestas construções, como já foi referido anteriormente, o complemento do verbo “ haver” não se encontra
na sua posição canónica, tendo sido deslocado para a esquerda do núcleo verbal.
Embora esta regra seja semelhante à regra sintagmática 7 (especificador – núcleo), apresenta uma
diferença fundamental: o SN que se encontra à esquerda do verbo não é o seu argumento externo, mas
sim o argumento interno. Por esta razão, o verbo não tem traços de concordância com o SN que o
antecede. Assim, o único predicado chamado na lista de objectivos atrasados é o predicado subs/3, que
faz a construção semântica correcta quando se trata de um SN coordenado, permitindo construções como:
52) Quantos hipónimos de “ gato” e de “ cão” há?
Regra Sintagmática 10 – Predicados com um complemento in situ
r(N,T1,[faz_sem(Sem2,Sem1,T1,Sem3),verifica_comp(N,T1,L)],
[spr : SPR,comp: [],gap : Gap], Sem3) =>
[elex(N,T1,[spr : SPR, comp:[r(C2,L,[],SCAT2,Sem2)],
gap : Gap],Sem1),
r(C2,L,[],SCAT2,Sem2)].
Nesta regra são tratadas as meta-entradas lexicais de expressões com um complemento in situ como as
expressões verbais transitivas com um argumento, as expressões nominais que seleccionam complemento
e as preposições. O elemento da lista comp da meta-entrada lexical tem de ser igual aquele que é
encontrado à sua direita, sendo o resultado da aplicação da regra um X’ , em que X é da mesma categoria
da meta entrada.
90
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
A Gramática
A representação semântica deste X’ é dada através do predicado faz_sem/4 que recebe as representações
semânticas do complemento e do X’ e a lista de traços do predicado (núcleo). Este predicado trata o caso
em que X’ é o verbo “ haver” (impessoal) que apresenta a lista de spr vazia e, consequentemente, a sua
representação semântica contém apenas uma variável por abstrair que deve instanciar com a
representação semântica do complemento. Neste caso, o predicado faz_sem/4 certifica-se de que se trata
do verbo “ haver” através do predicado extrai/3, chamando em seguida o predicado subst/3, já visto
anteriormente, sobre as representações semânticas recebidas. Nos restantes casos, este predicado chama o
predicado subst/3 sobre a representação semântica do complemento e sobre a representação semântica
de X’ sem a variável mais externa abstraída. (a correspondente ao sujeito).
Esta regra sintagmática chama também o predicado verifica_comp/3. que recebe a categoria e a lista
de traços de X’ (núcleo) e a lista de traços do complemento. Este predicado booleano impede que nomes
que seleccionam complementos sejam complemento de verbos diferentes do verbo “ ser” identidade.
Assim, este predicado impede a construção de estruturas como a seguinte:
53) *O gato tem hipónimo de “ cão” ?
Para efeitos de ilustração da aplicação da gramática, no anexo 7 são apresentados alguns exemplos do
processamento sintáctico e semântico de interrogativas simples do português.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
91
Algoritmo de Conversão
12. Algoritmo de Conversão
Uma vez implementados a gramática e o parser, é necessário implementar um algoritmo capaz de ler uma
frase interrogativa em linguagem natural no ecrã, tratá-la de forma a poder ser aplicada à gramática e
devolver uma representação semântica legível pelo utilizador. Neste capítulo é descrito esse algoritmo,
cujo código se encontra em (anexo 8).
Pode aceder-se ao algoritmo através da execução do predicado go/0 no compilador Prolog. Este
algoritmo começa por ler o input do ecrã, através do predicado read_line/1 que lê, um a um, os
caracteres introduzidos pelo utilizador. Em seguida, é verificado se o input corresponde a uma frase
interrogativa (pela presença do símbolo “ ?” ) e tratada a posição da vírgula de forma a que esta esteja
sempre entre dois espaços em branco (mesmo que não tenha sido introduzida desta forma pelo utilizador).
Ainda durante a execução deste predicado, todas as sequências que se encontram entre espaços em branco
na string introduzida são colocadas numa lista. Esta lista é, em seguida, objecto de tratamento
relativamente às contracções. Todas as contracções presentes na lista são substituídas pela sequência
preposição-artigo19 correspondente através, do predicado subst_contract/2.
A lista resultante deste processo é posteriormente tratada pelo predicado analisador/1 que chama os
predicados verifica_lexico/2 e reconhecedor/1.
O primeiro verifica a presença de cada elemento da lista na base de dados lexical, devolvendo uma lista
com a interpretação ou as interpretações (resultantes da ambiguidade lexical) ligadas à frase, utilizando o
predicado build-in do Prolog findall/3. Por exemplo:
1) As fatias douradas são comida?
Neste caso, a execução do predicado findall(L,verifica_léxico(Frase,L),L1) devolveria uma
lista com duas sublistas correspondentes às duas leituras possíveis de “ fatia dourada” ou “ fatia” e
“ dourada” 20:
[[as,‘fatias douradas’,são,comida],[as,fatias,douradas,são,comida]]
Esta lista de listas é, seguidamente, tratada pelo predicado reconhecedor/1 que aplica as regras da
gramática a cada uma das sublistas através do predicado semf/2. O predicado semf/2 recebe uma das
sublistas e devolve uma lista com todas as interpretações semânticas possíveis para a análise da frase na
19
As preposições consideradas nesta fase do projecto são apenas as compostas por preposição e artigo.
20
Como é do conhecimento do leitor, “ dourada” pode ser um adjectivo. No entanto, a interpretação em que este
termo assume essa categoria não é levado em conta, uma vez que a WordNet.PT não contempla ainda lexicalizações
deste tipo. Assim, as únicas interpretações possíveis são as de “ fatia dourada” , “ fatia” e “ dourada” como nomes.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
93
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
gramática. Note-se que, para o exemplo 1) acima, o predicado semf/2 devolveria apenas uma
representação semântica pois não possui, na sua gramática, regras que permitam a ocorrência de dois
nomes seguidos. Assim, a interpretação em que “ fatia” e “ dourada” são expressões nominais atómicas é
rejeitada.
O predicado semf/2 chama o predicado parse/2 que corresponde ao parser propriamente dito. Este
predicado trata ainda da omissão do verbo ser em estruturas do tipo:
2) Qual o hipónimo de “ cão” ?
Este tratamento passa pela inserção do verbo ser, na lista de palavras, na posição de onde foi elidido. Esta
inserção é necessária para a aplicação das regras da gramática e licenciamento da estrutura.
O predicado parse/2 utiliza ainda o predicado statistics/2 build-in do Prolog para cronometrar o
tempo que o sistema demora a fazer o reconhecimento, a análise e a(as) representação(ões) semântica(s)
para uma dada frase.
O predicado semf/2 imprime ainda, no ecrã, as representações semânticas que encontra, de forma legível
pelo utilizador, através do predicado pprint/2.
No anexo 9, onde estão apresentados alguns exemplos de frases analisadas pelo sistema, foi utilizado este
algoritmo.
94
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Conclusões Finais e Trabalho Futuro
13. Conclusões e Trabalho Futuro
Neste relatório são apresentadas as principais fases de desenvolvimento do Módulo I – Análise
Sintáctico-Semântica – do Projecto INQUER – Interacção Pessoa-Máquina em linguagem natural.
Este projecto tem como principal objectivo o desenvolvimento de um recurso tecnológico capaz de
potencializar as possibilidades de exploração da WordNet.PT, facilitando a sua utilização por utilizadores
não especializados. Por outro lado, este sistema é também uma ferramenta linguística uma vez que analisa
e gera linguagem natural.
O desenvolvimento deste sistema passa pelo desenvolvimento de três módulos distintos, a saber: Análise
Sintáctico-Semântica, Inferência e Geração em Linguagem Natural. O primeiro destes módulos, da
responsabilidade da estagiária, e objecto deste relatório, consiste na análise sintáctica das frases
interrogativas introduzidas pelo utilizador, gerando uma ou mais representações semânticas de acordo
com a(s) interpretação(ões) da frase. Estas representações são posteriormente processadas no módulo
Inferência que procura e extrai a informação necessária para a resposta à pergunta. No módulo Geração
em Linguagem Natural é gerada a resposta à pergunta através da análise da representação semântica e da
informação extraída. Este último módulo não está ainda a ser desenvolvido.
Embora este projecto envolva uma forte componente de investigação não deixa de ser um projecto de
desenvolvimento de uma ferramenta de software. Por esta razão foi necessário combinar metodologias
adequadas ao desenvolvimento de cada uma das tarefas, o que se revelou uma experiência muito
enriquecedora do ponto de vista profissional.
Por outro lado, uma vez que o seu desenvolvimento é feito de forma modular, é necessária uma interacção
constante entre os responsáveis de cada módulo para que todo o sistema fosse eficiente. O trabalho de
equipa foi fundamental no desenvolvimento de todo o sistema.
13.1 TRABALHO FUTURO
O desenvolvimento do projecto INQUER não termina com este estágio, estando já planeadas outras fases
de desenvolvimento como é o caso do Módulo III – Geração em Linguagem Natural.
No que respeita ao módulo I, o desenvolvimento inicial foi assegurado no decorrer deste estágio. No
entanto, como este projecto está directamente relacionado com o projecto WordNet.PT, serão necessárias
extensões à base de dados lexical e relacional do sistema INQUER à medida que novos domínios
semânticos são revistos e desenvolvidos no projecto WordNet.PT.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
95
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Por outro lado, nesta primeira fase de desenvolvimento do módulo I foram implementadas apenas
algumas das estruturas sintácticas presentes nas interrogativas do Português, motivadas pelas respostas
obtidas através de um questionário elaborado para o efeito.
A estagiária propõe o desenvolvimento de regras capazes de lidar com mais algumas estruturas
sintácticas presentes nas respostas do questionário nomeadamente:
•
estruturas de disjunção
•
inversões de sujeito
•
adjunções de sintagmas adjectivais a N’
•
estruturas com complementos causais
Para além destas estruturas, para um tratamento mais alargado da quantificação, é sugerida a adaptação do
formalismo usado à estrutura de quantificadores generalizados.
Numa fase posterior do projecto, é também sugerido que o site na internet tenha a capacidade de registar
as perguntas e respostas resultantes da interacção utilizador-sistema. Os resultados permitirão definir as
áreas de desenvolvimento do sistema INQUER de forma a ir de encontro às expectativas dos utilizadores.
96
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Referências
Referências
Aldana, Emilio (2000), “ An application for translation of Spanish sentences into First Order Logic
implemented in Prolog” , Proceedings of First International Congress on Tools for Teaching Logic,
University of Salamanca, Spain.
http://aracne.usal.es/congress/PDF/EmilioRodriguez.pdf
Allen,
James
(1995),
Natural
Language
Understanding,
University
of
Rochester,
The
Benjamin/Cummings Publishing Company, Inc.
Blackburn, Patrick & Johan Bos & Kristina Striegnitz (2001), Learn Prolog Now!.
http://www.coli.uni-sb.de/~kris/prolog-course/
Blackburn, Patrick & Johan Bos (1999), Representation and Inference for Natural Language, a First
Course in Computational Semantics, Volume I, working with first-order logic, Computerlinguistik,
Universitat des Saarlandes.
http://www.iccs.informatics.ed.ac.uk/~jbos/comsem/book1.html
Branco, António (2000), Reference Processing and its Universal Constraints, Lisboa, Edições Colibri..
Cardie, Claire et al (2000), “ Examining the role of Statistical and Linguistic Knowledge Sources in a
General- Knowledge Question-Answering System” , Proceedings of the Sixth Applied Natural
Language Processing Conference, New York.
http://acl.ldc.upenn.edu/A/A00/A00-1025.pdf
Carnie, Andrew (2000), “ Head Driven Phrase Structure Grammar I (HPSG)” , HandOuts.
http://www.linguistlist.org/~carnie/classes/LING505/HPSG.pdf
Chaves, Rui (2002), Fundamentos para uma Gramática Computacional do Português – Uma Abordagem
Lexicalista, Tese de mestrado apresentada à Faculdade de Letras da Universidade de Lisboa,
Lisboa.
Covington, Michael (1993), Natural Language Processing for Prolog Programmers, Artificial Intelligence
Programs, The University of Georgia, Athens, Prentice Hall.
Covington, Michael (2001), “ Some Coding Guidelines for Prolog” , Artificial Intelligence Center, The
University of Georgia, Athens.
Fellbaum, Christiane (1998), “ A Semantic Network of English Verbs” , in Christiane Fellbaum (ed),
WordNet – An Electronic Lexical Database, Cambridge, Massachusetts, London, England, The
Mitt Press
Gazdar, Gerald & Chris Mellish (1989), Natural Language Processing in Prolog, Workingham, Addison
Wesley.
http://www.cogs.susx.ac.uk/lab/nlp/gazdar/nlp-in-prolog/index.html
Gawron, Jean et al (1982), “ Processing English with a Generalized phrase structure grammar” ,
Proceedings of the 20th annual meeting association for computational linguistics, Computer
Research Center, Palo Alto.
http://acl.ldc.upenn.edu/P/P82/P82-1014.pdf
Ginzburg, Jonathan & Ivan Sag (2000), “ Interrogative Investigations: The form, meaning and use of
English interrogative constructions” , CSLI Publications.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
97
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Hellwig, Peter (2002), “ Natural Language Parsers – A “ Course in Cooking” ” , Heidelberg.
Hermjakob, Ulf & Eduard Hovy & Chin-Yew Lin (2002), “ Knowledge-Based Question Answering” ,
Proceedings of the 6th World Multiconference on Systems, Cybernetics and Informatics (SCI2002), Orlando, U.S.A.
http://www.isi.edu/natural-language/projects/ webclopedia/pubs/02sci.pdf
Jurafsky, Daniel &James Martin (2000), Speech and Language Processing, Prentice Hall.
Kamp, Hans & Uwe Reyle (1993), From Discourse to Logic: An Introduction to Model-Theoretic
Semantics of Natural Language, Formal Logic and Discourse Representation Theory, Dordrecht,
Holland, Kluwer Academic Publishers.
Kordoni, Valia (2001), “ Grammatiktheorie Head Driven Phrase Structure Grammar” .
www.coli.uni-sb.de/~kordoni/courses/ ws01-02/lecture2.pdf
Marrafa, Palmira (2001), WordNet do Português – uma base de dados de conhecimento linguístico,
Lisboa, Instituto Camões.
Marrafa, Palmira (1993), Predicação Secundária e Predicados complexos em Português – Análise e
Modelização, Tese de Doutoramento, Lisboa.
Mccawley, James (1993), Everything that Linguists have always wanted to know about Logic but were
ashamed to ask, Chicago and London, The University of Chicago Press.
Meurers, Detmar (2001), “ Lectures Notes for the Introduction to Symbolic Computacional Linguistics” ,
Department of Linguistics, The Ohio State University.
http://www.ling.ohio-state.edu/~dm/2001/winter/684.01/
Miller, George (1998), “ Nouns in WordNet” , in Christiane Fellbaum (ed), WordNet – An Electronic
Lexical Database, Cambridge, Massachusetts, London, England, The Mitt Press.
Moldovan, Don & Sandra Harabagin (2001), Open-Domain Textual Question Answering, Pittsburgh,
Cornegie Mellon
Moldovan, Don & Vasile Rus (2001), “ Logic Form Transformation of WordNet and its Applicability to
Question Answering” , Proceedings of the ACL 2001 Conference, Toulouse, France.
http://acl.ldc.upenn.edu/P/P01/P01-1052.pdf
Pardo, Thiago & Lucia Rino (1999), “ O Formalismo GPSG e sua Comparação com DCG e LFG” .
www.nilc.icmc.usp.br/~thiago/RTDC00299-PardoRino.pdf
Pereira, Fernando & Stuart Shieber (2002 1978), Prolog and Natural-Language Analysis, Microtome
Publishing, digital edition.
http://www.mtome.com/prolog-digital.pdf
Park, Jong (1992), “ A unification-based semantic interpretation for coordinate constructs” , Proceedings
of the 30th annual meeting association for computational linguistics.
http://acl.ldc.upenn.edu/P/P92/P92-1027.pdf
Poesio, Massimo (1998), “ Lectures – Computational Linguistics 2” , Division of Informatics, University
of Edinburgh.
http://www.cogsci.ed.ac.uk/~poesio/CL2
98
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Referências
Prager, John & Jennifer Chu-Carroll & Krysztof Czuba (2001), “ Use of WordNet for Answering
What-is Questions” , The Tenth Text REtrieval Conference, Gaithersburg MD.
http://trec.nist.gov/pubs/trec10/index_track.html#qa
Ristad, Eric (1986), “ Defining Natural Language Grammars in GPSG” , Proceedings of the 24th Annual
Meeting of the ACL, New York.
http://acl.ldc.upenn.edu/P/P86/P86-1007.pdf
Ristad, Eric (1986), “ Computational Complexity of current GPSG theory” , Proceedings of the 24th
Annual Meeting of the ACL, New York.
http://acl.ldc.upenn.edu/P/P86/P86-1006.pdf
Russel, Stuart & Peter Norvig (1995), Artificial Intelligence – A Modern Approach, Prentice Hall
Sag, Ivan & Thomas Wasow (1999), Syntactic Theory: A Formal Introduction.
Shiber, Stuart et al (1989), “ A Semantic Head-Driven Generation Algorithm for Unification-Based
Formalisms” , Proceedings of the 27th ACL, Menlo Park, USA and Utrecht, Netherlands.
http://acl.ldc.upenn.edu/P/P89/P89-1002.pdf
Srihari, Rohini & Wei Li (1999), “ Information Extraction Supported Question Answering” , Eighth Text
REtrieval Conference (TREC-8), Gaithersburg, MD.
http://trec.nist.gov/pubs/trec8/papers/cymfony.pdf
Sterling, Leon & Ehud Shapiro (1997), “ The Art of Prolog” , second edition, Cambridge, Massachusetts,
The MIT Press.
Thompson, Cynthia & Raymond Mooney & Lappoon Tang (1997), “ Learning to parse natural language
database queries into logical form” , Proceedings of ML-97 Workshop on Automata Induction,
Grammatical Inference and language acquisition.
http://www.cs.utah.edu/~cindi/papers/chill/nlw-97.pdf
Vellino, André (1990), “ Programming in Logic” , Perspectives in Computing, Bell-Northern Research
http://www.iit.nrc.ca/~andre/publications/PIC-Prolog.PDF
Vicedo, Jose & António Ferrández (2002), “ A semantic approach to Question Answering systems” ,
Dpto. Lenguajes y Sistemas Informáticos, Universidad de Alicante, Alicante, Espanha
http://trec.nist.gov/pubs/trec9/papers/alicante_trec9_paper.pdf
Volk, Martin (1988), “ Parsing german with GPSG: the problem of separable-prefix verbs” , A Thesis
Submitted to the Graduate Faculty of The University of Georgia in Partial Fulfilment of the
Requirements for the Degree MASTER OF SCIENCE, Atenas, Georgia
http://www.ifi.unizh.ch/CL/volk/SyntaxVorl/GPSG.thesis.html
Vossen, Piek (1999), EuroWordNet – General Document, (version 3), University of Amesterdam.
http://www.illc.uva.nl/EuroWordNet/docs/GeneralDocPS.zip
Zamparelli, Roberto (1995), Layers in the Determiner Phrase, Ph. D. Thesis, University of Rochester.
Rochester, N.Y.
http://www.cogsci.ed.ac.uk/~roberto/layres/dp-hyp.html
Wielmaker, Jan (2002), SWI – Prolog 5.0 – Reference Manual, University of Amsterdam.
http://www.swi.psy.uva.nl/cgi-bin/nph-download/SWI-Prolog/refman/refman.pdf
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
99
Anexos
ANEXOS
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
101
Anexos
ANEXO 1 – AVALIAÇÃO DOS PARSERS
:-consult(’lexicofinal.txt’).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
Operadores
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:-op(950,xfx,’=>’).
:-op(960,xfx,’:’).
:-op(950,xfx,’==>’).
:-op(940,xfx,’--->’).
:-op(900,yfx,’>’).
:-op(800,yfx,’&’).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
Frases de Teste
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f(1,[o,gato,tem,patas]).
f(2,[a,aranha,tem,patas]).
f(3,[a,pata,é,um,animal]).
f(4,[o,borrego,é,um,mamífero]).
f(5,[as,patas,de,o,gato,são,membros]).
f(6,[os,membros,de,o,gato,são,patas]).
f(7,[os,animais,que,são,carnívoros,comem,carne]).
f(8,[as,plantas,que,têm,tronco,são,árvores]).
f(9,[o,bolo,que,tem,ovos,de,a,galinha,é,de,fruta]).
f(10,[o,bolo,que,tem,ovos,que,são,de,a,galinha,é,de,fruta]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
Procedimento Principal
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
teste(11).
teste(N):-
f(N,F),
printList(F),!,
findall(Y,parse_shift_lcorner(Y,F),R),nl,
descarrega(R),
N2 is N+1,
teste(N2).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
103
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
META REGRAS LEXICAIS
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%____________________________________________________________________
%
%Meta-entrada Lexical para preposições
%____________________________________________________________________
elex(p,Ltracos,[spr : [], comp: [r(n,_,[],_)], gap : []]) ==>
p(_, Ltracos)^[].
%____________________________________________________________________
%
%Meta-entrada Lexical para marcadores
%____________________________________________________________________
elex(marc,[],[spr : [], comp: [], gap : []]) ==> marc(_,_)^[].
%____________________________________________________________________
%
%Meta-entrada Lexical para determinantes indefinidos
%____________________________________________________________________
elex(det,Ltracos,[spr : [],comp: [],gap : []]) ==>
det(_, Ltracos)
^[\+(retira_elemento(Ltracos,tipo:uni,_))].
%____________________________________________________________________
%
%Meta-entrada Lexical para determinantes universais
%____________________________________________________________________
elex(det,Ltracos,[spr : [],comp: [],gap : []]) ==>
det(_, Ltracos)
^[retira_elemento(Ltracos,tipo:uni,_)].
%____________________________________________________________________
%
%Meta-entrada Lexical para pronomes relativos
%____________________________________________________________________
elex(pr,[],[spr : [], comp: [], gap : []]) ==> pr(_,[]) ^[].
104
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
%____________________________________________________________________
%
%Meta-entrada Lexical para nomes com especificador e complemento
%singular
%____________________________________________________________________
elex(n,Ltracos1,[spr : [r(det,_,[],_)],
comp: [r(n,Ltracos2,[],[spr:[],comp:[]|_])],
gap : []]) ==>
n(_, Ltracos)
^[retira_elemento(Ltracos,marcador:s,Ltracos1),
member(num:sing,Ltracos2)].
%_____________________________________________________________________
%
%Meta-entrada Lexical para nomes com especificador e complemento
%plural
%_____________________________________________________________________
elex(n,Ltracos1,[spr : [r(det,_,_)],
comp: [r(n,Ltracos2,[],[_,comp:[]|_])],
gap : []]) ==>
n(_, Ltracos)
^[retira_elemento(Ltracos,marcador:s,Ltracos1),
member(num:plu,Ltracos2)].
%____________________________________________________________________
%
%Meta-entrada Lexical para nomes sem complementos
%____________________________________________________________________
elex(n,Ltracos,[spr : [r(det,_,[],_)],comp: [],gap : []]) ==>
n(_, Ltracos) ^[].
%____________________________________________________________________
%
%Meta-entrada Lexical para verbos com um argumento interno
%____________________________________________________________________
elex(v,Ltracos1,[spr : [r(n,_,[],_)], comp: [r(C,_,[],_)],
gap : []]) ==> v(_,Ltracos)
^[retira_elemento(Ltracos,scat:[comp:C],Ltracos1)].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
105
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
REGRAS SINTAGMÁTICAS
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%____________________________________________________________________
%
% Promove X0 para X'
% ___________________________________________________________________
r(N,T,[],[spr : SCAT, comp: [],gap : Gap]) => [elex(N,T,[spr : SCAT,
comp: [],
gap : Gap])].
%____________________________________________________________________
%
% Orações relativas restrictivas
%____________________________________________________________________
r(vr,T,[],[spr : [], comp: [], gap : []]) =>
[ r(pr,_,[],_),
r(v,T,[],[spr : _,comp: [],gap : _])]^[].
% ___________________________________________________________________
%
% Adjunção de um modificador (SP/VR) a um N’
% ___________________________________________________________________
r(n,T1,[adjunto(C)],[spr:SPR,comp:[], gap:[]]) =>
[ r(n,T1,[],[spr:SPR,comp:[],gap:[]]),
r(C,_,[],[spr:[],comp:[],gap:[]])]
^[adjunto(C)].
% ___________________________________________________________________
%
% SNs marcados
% ___________________________________________________________________
r(n,[marcado:s|T1], [\+(extrai(T1,marcado,s))],
[spr:[],comp:[],gap:[]]) =>
[r(marc,_,[],[spr:[],comp:[],gap:[]]),
r(n,T1,[],[spr:[],comp:[],gap:[]])]
^[\+(extrai(T1,marcado,s))].
106
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
%____________________________________________________________________
%
% Especificador - Núcleo
% ___________________________________________________________________
r(N,T2,[], [spr : [],comp: [], gap : Gap]) =>
[ r(C,T1,[],SCAT),
r(N,T2,[],[spr : [r(C,T1,[],SCAT)],
comp: [],gap :Gap])]
^[subst(N),unifica(T1,T2,T3)].
%____________________________________________________________________
%
% Predicados com um complemento in situ
%____________________________________________________________________
r(N,T1,[],[spr : SPR, comp: [], gap : Gap]) =>
[elex(N,T1,[spr : SPR,
comp: [r(C2,_,[],SCAT2)],
gap : Gap]),
r(C2,_,[],SCAT2)]^[].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
PARSER LEFT-CORNER
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
parse(L) -->
{statistics(runtime,_)},
recognise_t(L),
{statistics(runtime,[_,T]),
Time is T / 1000,nl,nl,
write('Tempo de análise: '),
write(Time),write(' segundos.'),nl}.
recognise_t(L) --> recognise(L).
recognise(Phrase) -->
[Word], {(EL ---> [Word]),
EL =.. [C|_],
(elex(C,Ltracos,S) ==> EL^Prolog),
executa(Prolog)},
lc(elex(C,Ltracos,S),Phrase).
lc(r(v,_,[],[spr:[],comp:[],gap:[]]),[],[],[]).
lc(Phrase,Phrase) --> [].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
107
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
lc(Subphrase1, Superphrase) -->
{obj_atrasados(Subphrase1,Subphrase2)},
{Phrase => [Subphrase2|Right]},
recognise_rest(Right), lc(Phrase, Superphrase).
recognise_rest([]) --> [].
recognise_rest([Phrase|Rest]) --> recognise(Phrase),
recognise_rest(Rest).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
PARSER SHIFT-REDUCE
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
parse(p(L),L) -->
{statistics(runtime,_)},
recognise(L),
{statistics(runtime,[_,T]),
Time is T / 1000,nl,nl,
write('Tempo de análise: '),
write(Time),write(' segundos.'),nl}.
recognise([r(v,_,[],[spr:[],comp:[],gap:[]])],[],[]).
recognise([Y,X|Rest]) -->
[], {obj_atrasados(X,Z),
(LHS => [Z,Y])},
recognise([LHS|Rest]).
recognise([X|Rest]) -->
[], {obj_atrasados(X,Y),
LHS => [Y]},
recognise([LHS|Rest]).
recognise(Stack) -->
[Word],
{(EL ---> [Word]),
EL =.. [C|_],
(elex(C,Ltracos,S) ==> EL^Prolog),
executa(Prolog)},
recognise([elex(C,Ltracos,S)|Stack]).
108
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
PARSER TABULAR ASCENDENTE
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:-dynamic edge/4.
parse(R,Expr):retractall(edge(_,_,_,_)),
statistics(runtime,_),
start_chart(1,Vn,Expr),
statistics(runtime,[_,T]),
Time is T / 1000,
write('Tempo de análise: '),write(Time),
write(' segundos.'),nl,
retractall(edge(_,_,_,[_|_])),
edge(1,Vn, R ,[]),!.
start_chart(V0,V0,[]).
start_chart(V0,Vn,[Word|Words]):V1 is V0 + 1,
foreach( (lexema(Word,Category)),
add_edge(V0,V1,Category,[])),
start_chart(V1,Vn,Words).
lexema(Word,elex(C,Ltracos,S)):(EL ---> [Word]),
(elex(C,Ltracos,S) ==> EL^Prolog),
executa(Prolog).
foreach(X,Y):call(X),
do(Y),
fail.
foreach(_,_):- true.
do(Y):- Y, !.
add_edge(V0,V1,Category,Categories):edge(V0,V1,Category,Categories),!.
add_edge(V1,V2,Category0,[]):obj_atrasados(Category0,Category1),
asserta(edge(V1,V2,Category1,[])),
foreach( Category2 => [Category1|Categories],
add_edge(V1,V1,Category2,[Category1|Categories])),
foreach(edge(V0,V1,Category2,[Category1|Categories]),
(add_edge(V0,V2,Category2,Categories))).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
109
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
add_edge(V0,V1,Category1,[Category2|Categories]):asserta(edge(V0,V1,Category1,[Category2|Categories])),
foreach(edge(V1,V2,Category1,[]),
add_edge(V0,V2,Category1,Categories)).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
PREDICADOS AUXILIARES
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/*=========================================
executa(+ListaChamadasProlog)
Executa todos os predicados de uma lista
=========================================*/
executa([]).
executa([P|L]):call(P),
executa(L).
/* =================================================================
retira_elemento(+Lista,?Elemento,?ListaSemElemento)
Retira da primeira lista o elemento X devolvendo uma lista sem esse
elemento
===================================================================*/
retira_elemento([X|L],X,L).
retira_elemento([Y|L1],X,[Y|L]):- retira_elemento(L1,X,L).
/* =================================================================
unifica(+ListaAtributos,+ListaAtributos,?NovosAtributos)
Unifica duas listas de traços distintas sem inconsistência dando uma
terceira como resultado
===================================================================*/
unifica([],X,X).
unifica([X|R],[],[X|R]).
unifica([Atr1:Val1|Resto],[Atr1:Val1|Resto2],[Atr1:Val1|Result]):unifica(Resto,Resto2,Result).
110
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
unifica([Atr1:Val1|_],[Atr1:Val2|_],_):\+(Val1=Val2),
!, fail.
unifica([Atr1:Val1|Resto],[Atr2:Val2|Resto2],Result):unifica([Atr1:Val1],Resto2,NResto),
unifica(Resto,[Atr2:Val2|NResto],Result),!.
/* ==========================================================
objectivos_atrasados(+RegraSintagmática,-RegraSintagmática)
Executa objectivos prolog atrasados
============================================================*/
obj_atrasados(r(C,T,LGOALS,Scat), r(C,T,[],Scat)):!,executa(LGOALS).
obj_atrasados(C,C).
/* ==========================================
print_list(+Lista)
Imprime o conteúdo de uma lista para o ecrã
===========================================*/
printList([X]):write(X).
printList([X|L]):write(X),
write(' '),
printList(L).
/* ==========================================
descarrega(+Lista)
Imprime o conteúdo de uma lista para o ecrã
============================================*/
descarrega([]):write('-------------------------------'),nl,nl.
descarrega([S1|LS]):write(S1),nl,
descarrega(LS).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
111
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
/* ====================================
categorias que podem estar em adjunção
======================================*/
adjunto(p).
adjunto(vr).
/* ===========================================
categorias que podem receber especificadores
============================================*/
subst(n).
subst(v).
112
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
ANEXO 2 – QUESTIONÁRIO
INQUER
!"#$
$
%&
'(
)
*,+.-/&01325456798:<;>=>?A@(BC;ED?5F.GAHI?IJKBFMLNAOQPA;ER'6?E8?:C7SFTB<?UNA;
6IBF.V.FMWINAD";":XF.GIB<?:YNALF.:@Q;"7ZN57\[IR'6F.GN5G;5]<;":7\N3B<;^8?:YL'6GIB<NI_
:Y?IJ38;JKB<NU?79`3F.GL'6NAL"?7a-N3B6:YNVIbdc3;":dB6L'6eIJKfYg
1QJKB<N7\;J&Nh]<NAWI?:X679VM?3HANGIB<N7\?GIBC;EDNIJh8?:YL'6GIB<NIJiB<j#8"FM@QNIJ&R'6?567
6IBF.V.FMWINAD";":@Q;"Vk;@QNUN567lJ3FkJKB<?7\NUD?IJKB<N5GN3B6:Y?AWNg"cQN:YN5FkJQJ(;
L;JKB<N:Yj.N75;J&R'6?U@Q;"VMNm;":YNIJQJ(?U@Q;"GG;J(@Q;"n?IJ(@A:Y?QHA?GD;^GNU@QNFToN\D?
B<?3oB<;Eb?79mNFTo";f'NVML'6"7\NIJh8?:YL'6GIB<NIJ&R'6?p=q6VML'6?58?:dBF.G?GIBC?IJ3g
r;"GJ3FMD?:Y?56"7lJ3FkJKB<?7\NU@Q;'7Z@QN8NA@AFMDNAD"?UD?5:Y?IJ38;"GD"?:NhB<;DNIJ&NIJ
8?:YL'6GIB<NIJhGNIJ&[:Y?ANIJ&D?UsYt3?:Y?IJvuXFwHA;J(s?UsYr;'7EFMDNAsCg"x?3]F.G"FMOQy?IJ&?
:Y?VMNAOQy?IJ&?GIB:Y?5F.GD'FwHAjzD'6;J{J(PA;E?3o"?7S8VM;JiB<j8FM@Q;J&D?h]<;":7\N3B<;J&D"?
8?:YL'6GIB<NIJ3g
EXEMPLOS:
"Quais os animais que têm tromba?"
"O que é um gato?"
"Um gato é mamífero?"
"Que tipo de planta é uma roseira?"
"Quantos tipos de bolos há?"
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
113
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
!#"
*&m:CFMLNAD;8?VMN\J36NU@Q;"VMNm;":YNAOQPA;%$
rN3B<N:CF.GN52F.m?F.:Y;^_52FM@QN:YD";Et3NGIBC;J
&%')(*',+-&/.1032#465879.:'3;0=<?>=@BA 2#;DC)E-79EF(*09; GH.14
A);D79EI79.-79.:'3;A)J=59E
&%'LKM+-KN4>9O=5879.-&/5?P8O9>I2
EIQ)R3587958&S5?09T=.ICI;PF.10I2
5U'V3WS;DC)5+IKN46E1P-E32#;DC)E1X
YI.32.1P8J9465879.FZ9[9[?Z
114
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
ANEXO 3 – LISTA DE PERGUNTAS RECEBIDAS
Nº Pergs.
Tipos de Perguntas
124
que solicitam uma definição
21
O que é uma batata?
O que é um rinoceronte?
O que é uma toupeira?
O que é o Kiwi?
O que é um estoma?
O que é um vivíparo?
O que é um ornitorrinco?
O que é um cogumelo?
O que é o musgo?
O que é uma ema?
O que é um waffle?
O que é rizzoto?
O que é file mignon?
O que é um marsupial?
O que é um fungo?
O que é um souffle?
O que é uma morsa?
O que é uma medusa?
O que é uma anémona?
O que é bacalhau à lagareiro?
O que é um cão ?
O que é o ... ?
O que é um ... ?
O que é ... ?
Totais (Polares e de alternativa)
A batata pode ser congelada?
O cão é esperto?
Todos os animais que têm tromba são mamíferos?
As papoilas são venenosas?
O rato é um animal doméstico?
O hamster é um rato?
O homem é um animal?
Há peixes mamíferos?
As galinhas voam?
A lesma é comestível?
A mosca nada?
O coelho canta?
A bolota é redonda?
O caracol anda?
A galinha tem patas?
O gato fala?
O pardal anda?
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
O sistema O sist. não
analisa
analisa
47
77
16
X
X
X
X
X
X
X
5
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
2
16
3
2
13
1
0
3
2
31
13
18
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
115
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
X
Os sapos têm sangue frio?
Todos os animais tem um coração?
A coruja é um animal diurno ou nocturno? ALT
O gafanhoto é comestível?
O arroz é uma planta?
O faisão é uma ave comestível?
Existem sardinhas nos rios?
Os ratos são carnívoros?
Os leões comem antílopes?
Há mais elefantes na Índia ou em África? ALT
Existem animais de três patas?
O gato é um mamífero?
É verdade que os cães são os melhores amigos dos homens?
O musgo é uma planta?
SN é SN?
Há/Existe SN Adj?
SN V?
Alternativa
SN tem SN?
SN V SN?
É verdade que ...?
Parciais sobre argumentos
Que ingredientes tem uma omelete?
Como se chama a fêmea da girafa?
Que tipos de couve há?
Quais são os vegetais verdes?
O bife de vaca provem de que animal?
Qual o nome da planta de onde deriva a canela?
Qual das raças é mais perspicaz?
Quais os animais que têm os membros superiores mais curtos que
os inferiores?
Quais os tipos de planta que há?
Em que época do ano devem ser plantadas as camélias?
Quais os mamíferos que vivem no mar?
Que tipo de vegetal é a batata?
Que tipo de vegetal é o arroz?
Que tipo de animal é o polvo?
Que tipo de animal é o camarão?
Que tipo de animal é o caracol?
Quais são os animais domésticos?
Quais os animais omnívoros?
De onde vem a cachupa?
De que pais vêm a muamba e a mandioca?
Em que pais há mais koalas?
O que comem os pandas gigantes?
De que maneiras se cozinham as batatas?
Quais os mamíferos que são venenosos?
Qual o animal mais venenoso do mundo?
Em que partes do mundo se come cão?
Qual a carne mais consumida do mundo?
Qual o animal cuja barbatana faz uma bela sopa?
116
X
X
X
X
X
X
X
X
X
X
X
X
X
15
3
6
2
3
1
1
6
0
4
0
2
1
0
9
3
2
2
1
0
1
54
13
41
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
X
X
X
X
X
Qual é o animal que pode viver mais tempo?
Qual o animal que vê melhor ao longe?
Em que pais se come tradicionalmente peixe com batatas fritas?
De que se alimentam as aranhas?
Qual o mamífero mais pequeno do mundo?
Quais são os animais que têm barbatanas?
Que tipo de insecto é uma mosca?
Qual o animal mais lento do mundo?
O que é que as baleias comem?
Para termos uma alimentação saudável, o que é que devemos
incluir nas nossas refeições?
Que frutas não devem estar numa salada de frutas?
Qual o maior animal carnívoro terrestre?
Que tipo de peixe é um bacalhau?
O que come uma anaconda?
Que mamíferos são venenosos?
Que mamíferos vivem na água?
O que come um rinoceronte?
Que mamíferos põem ovos?
Quais os animais que têm tromba?
Qual é a ave de rapina mais pesada do mundo?
Que tipo de animal é um gato?
Qual é o maior lagarto do mundo?
O que é que os pandas comem?
De que é composto o chucrute?
De que é feita a manteiga?
Que comida come uma tartaruga?
Que ... ?
Como... ?
Qual/Quais é/são ...?
Qual das... ?
Em que ... ?
De onde ... ?
De que ... ?
O que ... ? (o que é que...? 3)
Outras
Parciais sobre especificadores
Quantas patas tem um pato?
Quantos tipos de laranja existem?
Quantos cães tem uma matilha?
Quantas variedades de pratos de bacalhau existem?
Quantas raças tem o homem?
Quantos tipos de mamíferos há?
Quantos anos, em média, vive um elefante?
Quantos mamíferos marinhos existem?
Quantos tentáculos têm habitualmente os polvos?
Quanto tempo pode uma tartaruga chegar a viver?
Quantas raças de gatos há?
Quantos tipos de feijão existem?
Quantos tipos de aves existem?
Um cavalo vive quanto tempo?
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
15
1
20
1
4
1
5
6
1
9
0
3
0
0
0
0
1
0
6
1
17
1
4
1
5
5
1
14
5
9
X
X
X
X
X
X
X
X
X
X
X
X
X
X
117
INQUER – Interacção Pessoa – Máquina em Liguagem Natural
Quantos ... há/existem?
Quantos X tem Y?
Quantos N V N?
Outras
Sobre adjuntos causais
7
4
2
1
5
0
0
0
2
4
2
1
3
0
3
X
X
X
Porque é que os caranguejos andam de lado?
Como se reproduzem os macacos?
Como se faz um bacalhau com natas?
Porque ...?
Como ... ?
Que envolvem comparação
1
2
0
0
1
2
1
0
1
X
O que têm em comum o gato e o cão?
Ter em comum
118
1
0
1
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
ANEXO 4 – EXCERTO DA BASE DE DADOS LEXICAL
/*===================================
nomes que seleccionam complementos
====================================*/
n(tipo,[num:sing,gen:mas,cont:n,abst:s,anim:n,ser_vivo:n,hum:n,
scat:[comp:[marc:de]]]) ---> [tipo].
n(tipo,[num:plu,gen:mas,cont:n,abst:s,anim:n,ser_vivo:n,hum:n,
scat:[comp:[marc:de]]]) ---> [tipos].
/*=====================================
Determinantes universal e existencial
======================================*/
det(o,[tipo_d:univ,num:sing,gen:mas]) ---> [o].
det(o,[tipo_d:univ,num:sing,gen:fem]) ---> [a].
det(o,[tipo_d:univ,num:plu,gen:mas]) ---> [os].
det(o,[tipo_d:univ,num:plu,gen:fem]) ---> [as].
det(um,[tipo_d:exist,num:sing,gen:mas]) ---> [um].
det(um,[tipo_d:exist,num:sing,gen:fem]) ---> [uma].
det(um,[tipo_d:exist,num:plur,gen:mas]) ---> [uns].
det(um,[tipo_d:exist,num:plur,gen:fem]) ---> [umas].
/*============
preposições
=============*/
p(de,[]) ---> [de].
p(com,[]) ---> [com].
/*=======================
pronomes interrogativos
========================*/
pi(oque,[num:sing]) ---> ['o que'].
pi(qual,[num:sing]) ---> [qual].
pi(qual,[num:plu]) ---> [quais].
pi(quantos,[num:plu,gen:fem]) ---> [quantas].
pi(quantos,[num:plu,gen:mas]) ---> [quantos].
/*===========
conjunções
============*/
conj(e,[conj:f]) ---> [e].
conj(e,[conj:nf]) ---> [,].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
119
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
/*=======
verbos
========*/
v(ser_v,[num:sing,tipo_v:pred,scat:[comp:p]]) ---> [é].
v(ser_v,[num:plu,tipo_v:pred,scat:[comp:p]]) ---> [são].
v(existir,[num:sing,tipo_v:existe]) ---> [existe].
v(existir,[num:plu,tipo_v:existe]) ---> [existem].
v(existir,[num:plu,tipo_v:imp,scat:[comp:n]]) ---> [há].
v(ter,[num:sing,scat:[comp:n]]) ---> [tem].
v(ter,[num:plu,scat:[comp:n]]) ---> [têm].
v(ladrar,[tempo:inf]) ---> [ladrar].
v(ladrar,[num:sing]) ---> [ladra].
v(ladrar,[num:plu]) ---> [ladram].
v(piar,[tempo:inf]) ---> [piar].
v(piar,[num:sing]) ---> [pia].
v(piar,[num:plu]) ---> [piam].
v(preparar_2,[tempo:inf]) ---> [preparar].
v(preparar_2,[num:sing,scat:[comp:n]]) ---> [prepara].
v(preparar_2,[num:plu,scat:[comp:n]]) ---> [preparam].
/*============================================================
expressões nominais retiradas da WordNet.PT (hierarquizadas)
=============================================================*/
n('substância',[num:sing,gen:fem,cont:n,abst:n,anim:n,ser_vivo:n,hum:n
,mass:s]) ---> [substância].
n('substância',[num:plu,gen:fem,cont:n,abst:n,anim:n,ser_vivo:n,hum:n,
mass:s]) ---> [substâncias].
n('alimento',[num:sing,gen:mas,cont:n,abst:n,anim:n,ser_vivo:n,hum:n])
---> [alimento].
n('alimento',[num:plu,gen:mas,cont:n,abst:n,anim:n,ser_vivo:n,hum:n])
---> [alimentos].
n('fruta', [num:sing,gen:fem,cont:s]) ---> [fruta].
n('fruta', [num:plu,gen:fem,cont:s]) ---> [frutas].
n('lacticínio',[num:sing,gen:mas]) ---> [lacticínio].
n('lacticínio',[num:plu,gen:mas]) ---> [lacticínios].
n('produto lácteo',[num:sing,gen:mas]) ---> ['produto lácteo'].
n('produto lácteo',[num:plu,gen:mas]) ---> ['produtos lácteo'].
n('queijo',[num:sing,cont:s]) ---> [queijo].
n('queijo',[num:plu,cont:s]) ---> [queijos].
n('queijo fundido',[num:sing]) ---> [queijo,fundido].
n('queijo fundidos',[num:plu]) ---> ['queijos
fundidos'].
n('queijo fresco',[num:sing]) ---> ['queijo fresco'].
n('queijo fresco',[num:plu]) ---> ['queijos
frescos'].
n('queijo de ovelha',[num:sing]) ---> ['queijo de
ovelha'].
n('queijo de ovelha',[num:plu]) ---> ['queijos de
ovelha'].
120
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
n(’animal’,[num:sing,cont:s]) ---> [animal].
n(’animal’,[num:plu,cont:s]) ---> [animais].
n('carnívoro',[num:sing]) ---> [carnívoro].
n('carnívoro',[num:plu]) ---> [carnívoros].
n('canídeo',[num:sing]) ---> [canídeo].
n('canídeo',[num:plu]) ---> [canídeos].
n('cão',[num:sing]) ---> [cão].
n('cão',[num:plu]) ---> [cães].
n('pastor-alemão',[num:sing]) --->
[pastor-alemão].
n('pastor-alemão',[num:plu]) --->
[pastores-alemães].
n('São Bernardo',[num:sing]) ---> ['são
bernardo'].
n('São Bernardo',[num:plu]) ---> ['são
bernardos'].
n('caniche',[num:sing]) ---> [caniche].
n('caniche',[num:plu]) ---> [caniches].
n('Serra da Estrela',[num:sing]) --->
['serra da estrela'].
n('Serra da Estrela',[num:plu]) --->
['serras da estrela'].
n('vegetal',[num:sing,gen:mas]) ---> [vegetal].
n('vegetal',[num:plu,gen:mas]) ---> [vegetais].
n('alface',[num:sing,gen:fem]) ---> [alface].
n('alface',[num:plu,gen:fem]) ---> [alfaces].
n('aipo',[num:sing]) ---> [aipo].
n('aipo',[num:plu]) ---> [aipos].
n('beldroega',[num:sing,gen:fem]) ---> [beldroega].
n('beldroega',[num:plu,gen:fem]) ---> [beldroegas].
n('couve',[num:sing,gen:fem,cont:s]) ---> [couve].
n('couve',[num:plu,gen:fem,cont:s]) ---> [couves].
n('brócolos',[num:plu,gen:mas]) --->
[brócolos].
n('brocos',[num:plu,gen:mas]) ---> [brócos].
n('couve-nabiça',[num:sing,gen:fem]) --->
['couve-nabiça'].
n('couve-nabiça',[num:plu,gen:fem]) --->
['couves-nabiças'].
n('couve-nabo',[num:sing,gen:fem]) --->
['couve-nabo'].
n('couve-nabo',[num:plu,gen:fem]) --->
['couves-nabos'].
n('colza',[num:sing,gen:fem]) ---> [colza].
n('colza',[num:plu,gen:fem]) ---> [colza].
n('couve-flor',[num:sing,gen:fem]) --->
['couve-flor'].
n('couve-flor',[num:plu,gen:fem]) --->
['couves-flores'].
n('couve-galega',[num:sing,gen:fem]) --->
['couve-galega'].
n('couve-galega',[num:plu,gen:fem]) --->
['couves-galegas'].
n('galega',[num:sing,gen:fem]) ---> [galega].
n('galega',[num:plu,gen:fem]) ---> [galegas].
n('couve chinesa',[num:sing,gen:fem]) --->
['couve chinesa'].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
121
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
n(’couve chinesa’,[num:plu,gen:fem]) --->
[’couves chinesas’].
n(’couve de bruxelas’,[num:sing,gen:fem]) --->
[’couve de bruxelas’].
n(’couve de bruxelas’,[num:plu,gen:fem]) --->
[’couves de bruxelas’].
n(’repolho’,[num:sing,gen:mas]) ---> [repolho].
n(’repolho’,[num:plu,gen:mas]) ---> [repolhos].
n(’couve roxa’,[num:sing,gen:fem]) --->
[’couve roxa’].
n(’couve roxa’,[num:plu,gen:fem]) --->
[’couves roxas’].
n(’couve-lombarda’,[num:sing,gen:fem])--->
[’couve-lombarda’].
n(’couve-lombarda’,[num:plu,gen:fem]) --->
[’couves-lombardas’].
n('sabóia',[num:sing,gen:fem]) --->
[sabóia].
n('sabóia',[num:plu,gen:fem]) --->
[sabóias].
n('couve branca',[num:sing,gen:fem]) --->
['couve branca'].
n('couve branca',[num:plu,gen:fem]) --->
['couves brancas'].
n('doce',[num:sing,gen:mas,cont:s]) ---> [doce].
n('doce',[num:plu,gen:mas,cont:s]) ---> [doces].
n('bolo',[num:sing]) ---> [bolo].
n('bolo',[num:plu]) ---> [bolos].
n('bolo-rei',[num:sing]) ---> ['bolo-rei'].
n('bolo-rei',[num:plu]) ---> ['bolos-reis'].
n('bolo inglês',[num:sing]) ---> ['bolo inglês'].
n('bolo inglês',[num:plu]) ---> ['bolos ingleses'].
n('bolo-marmore',[num:sing]) ---> ['bolo-mármore'].
n('bolo-mármore',[num:plu]) ---> ['bolos-mármore'].
n('bolo seco',[num:sing]) ---> ['bolo seco'].
n('bolo seco',[num:plu]) ---> ['bolos secos'].
n('biscoito',[num:sing]) ---> [biscoito].
n('biscoito',[num:plu]) ---> [biscoitos].
n('língua-de-gato',[num:sing,gen:fem]) --->
['língua-de-gato'].
n('língua-de-gato',[num:plu,gen:fem]) --->
['línguas-de-gato'].
122
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
ANEXO 5 – MECANISMO DE HERANÇA DE TRAÇOS
/* ==========================================================
heranca_de_tracos(+Nome,+LtracosEspecíficos,-LTracos)
Devolve, em Ltracos, os traços completos
(herdados) do nome Nome (um conceito pode ter várias listas
atributos se tiver várias cadeias de hiperónimos)
============================================================*/
heranca_de_tracos(Nome,Ltracos,Lista1):findall(TracosHyper,tracos(Nome,Ltracos,TracosHyper,_),Lista),
junta_lista(Lista,Lista1).
/* ================================================================
tracos(+Nome,+LtracosEspecíficos,-LtracosTotal,-Lhiperónimos)
Devolve uma lista com os traços completos de um dado conceito
(LtracosTotal) e uma lista de todos os hiperónimos desse conceito
=================================================================*/
tracos(Nome,Ltracos1,Ltracos,[Hyper|Hs]):has_hyperonym(Nome,Hyper),
(n(Hyper,LtHyper)---> [_]),!,
herda(LtHyper,Ltracos1,Ltracos2),
tracos(Hyper,Ltracos2,Ltracos,Hs).
tracos(Var,Ltracos1,Ltracos,[Hyper|Hs]):variant(Nome,Var),
(n(_,LtVar)--->[Nome]),
has_hyperonym(Nome,Hyper),
herda(LtVar,Ltracos1,Ltracos2),
tracos(Hyper,Ltracos2,Ltracos,Hs).
tracos(Nome,LtNome,LtNome,[]):\+ has_hyperonym(Nome,_),
\+ variant(_,Nome).
/* ===========================================
herda(+Lista1,+Lista2,-ListaR)
Insere na Lista2 os elementos
da Lista1 que não contém. Resulta na ListaR.
===========================================*/
herda([],L,L).
herda([X:Y],[],[X:Y]).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
123
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
herda([X:Y|Rest],Rest2,Result):\+ member(X:_,Rest2) ->
insere_lista(X:Y,Rest2,Nova),
herda(Rest,Nova,Result);
herda(Rest,Rest2,Result).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
PREDICADOS AUXILIARES
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/* =====================================
insere_lista(+Traço,+ListaTraços,-LtraçosResultado
insere um traço à cabeça de uma lista
=======================================*/
insere_lista(X,[],[X]).
insere_lista(X,[X|R],[X|R]).
insere_lista(X,[Y|R],[X,Y|R]).
/* ==========================================================
extrai(+ListaTraços,+Atributo,+Valor)
verifica se um dado atributo valor está presente numa lista
============================================================*/
extrai([],_,_):- fail.
extrai([Atr:Val|_],Atr,Val):- true.
extrai([_:_|L],Atr1,Val1):- extrai(L,Atr1,Val1).
/* ===========================================================
junta_lista(+ListaListasAtributos, -ListaAtributos)
junta todas as listas de uma lista de lista se não tiverem
inconsistências relativamente aos seus elementos (traços)
=============================================================*/
junta_lista([X],X):-!.
junta_lista([X,Y|L],L3):unifica(X,Y,L2),
junta_lista([L2|L],L3).
124
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
ANEXO 6 – IMPLEMENTAÇÃO DA GRAMÁTICA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
META-ENTRADAS LEXICAIS
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%_____________________________________________________________________
%
% Meta Entrada Lexical para preposições
%_____________________________________________________________________
elex(p,[],[spr : [],
comp: [r(n,_,[],[spr:[]|_],_)],
gap : []],X^Y^P) ==> p(Palavra,[])
^[P =..[Palavra,X,Y]].
%_____________________________________________________________________
%
% Meta Entrada Lexical para marcadores
%_____________________________________________________________________
elex(marc,[],[spr : [],
comp: [],
gap : []],_) ==> marc(_,_) ^[].
%_____________________________________________________________________
%
%Meta Entrada Lexical das conjunções
%_____________________________________________________________________
elex(conj,Ltracos,[spr : [],
comp: [],
gap : []],_) ==> conj(_,Ltracos) ^[].
%_____________________________________________________________________
%
%Meta Entrada Lexical para a negação
%_____________________________________________________________________
elex(neg,[],[spr : [],
comp: [],
gap : []],X^P) ==> neg(_,_) ^[P =..[~,X]].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
125
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
%_____________________________________________________________________
%
% Meta Entrada Lexical para determinantes indefinidos
%_____________________________________________________________________
elex(det,Ltracos,[spr : [],
comp: [],
gap : []],
(X^P)^(X^Q)^d(Palavra,Num,X,P & Q)) ==>
det(Palavra,Ltracos)
^[retira_elemento(Ltracos,tipo_d:exist,_),
extrai(Ltracos,num,Num)].
%_____________________________________________________________________
%
% Meta Entrada Lexical para determinantes universais
%_____________________________________________________________________
elex(det,Ltracos,[spr : [],
comp: [],
gap : []],
(X^Res)^(X^Amb)^d(Palavra,Num,X,Res>Amb)) ==>
det(Palavra,Ltracos)
^[extrai(Ltracos,tipo_d,univ),
extrai(Ltracos,num,Num)].
%_____________________________________________________________________
%
% Meta Entrada Lexical para pronomes interrogativos
%_____________________________________________________________________
elex(n,Ltracos,[spr : [],
comp: [],
gap : []],(X^Q)^(P *> Q)) ==> pi(Palavra,Ltracos)
^[P =..[Palavra,X]].
%_____________________________________________________________________
%
% Meta Entrada Lexical para pronomes interrogativos que podem ocorrer
% como especificadores
%_____________________________________________________________________
elex(det,Ltracos,[spr : [],
comp: [],
gap : []],(X^Q)^(X^W)^(P *> (Q & W)) ) ==>
pi(Palavra,Ltracos)
^[(extrai(Ltracos,quant,s)),
P=..[Palavra,X]].
126
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
%_____________________________________________________________________
%
% Meta Entrada Lexical para o pronome relativo
%_____________________________________________________________________
elex(pr,[],[spr : [],
comp: [],
gap : []],_) ==> pr(_,[])^[].
%_____________________________________________________________________
%
% Meta Entrada Lexical para expressões nominais que seleccionam
% especificador e complemento
%_____________________________________________________________________
elex(n,[nom:comp|Ltracos],
[spr : [r(det,_,[],[spr:[]|_],_)],
comp:[r(n,[marcado:s|_],[],[spr:[],comp:[],gap:[]],_)],
gap : []], Y^X^P) ==> n(Palavra, Ltracos)
^[retira_elemento(Ltracos,scat:[comp:[marc:_]],_),
P=..[Palavra,Y,X]].
%_____________________________________________________________________
%
% Meta Entrada Lexical para expressões nominais com complemento e sem
% especificador
%____________________________________________________________________
elex(n,[nom:comp|Ltracos],
[spr : [],
comp: [r(n,[marcado:s|_],[],[spr:[]|_],_)],
gap : []],(X^Q)^Y^(d(exi,Num,X,P & Q))) ==>
n(Palavra, Ltracos)
^[retira_elemento(Ltracos,scat:[comp:[marc:_]],_),
extrai(Ltracos,num,Num),
P =..[Palavra,X,Y]].
%_____________________________________________________________________
%
%Meta Entrada Lexical para nomes sem complementos
%_____________________________________________________________________
elex(n,Ltracos1,[spr : [r(det,_,[],[spr:[]|_],_)],
comp: [],
gap : []], X^P) ==> n(Palavra,Ltracos)
^[heranca_de_tracos(Palavra,Ltracos,Ltracos1),
\+(extrai(Ltracos,scat,[comp:[_]])),
(extrai(Ltracos1,mass,s),
extrai(Ltracos1,cont,s));
(\+(extrai(Ltracos1,mass,s))),
P =..[Palavra,X]].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
127
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
%_____________________________________________________________________
%
% Meta Entrada Lexical para nomes sem complementos e sem especificador
%_____________________________________________________________________
elex(n,Ltracos1,[spr : [],
comp: [],
gap : []],(X^W)^(d(exi,Num,X,P & W))) ==>
n(Palavra, Ltracos)
[extrai(Ltracos,num,Num),
\+(extrai(Ltracos,scat,[comp:_])),
heranca_de_tracos(Palavra,Ltracos,Ltracos1),
P =..[Palavra,X]].
%_____________________________________________________________________
%
% Meta Entrada Lexical para nomes que representam conceitos da
% WordNet.PT
%_____________________________________________________________________
elex(n,[num:sing],[spr : [],
comp: [],
gap : []],(X^Q)^d(exi,sing,X,P & W)) ==>
r(ListaASCII)
^[name(Palavra2,ListaASCII),
(n(Palavra1,_) ---> [Palavra2];
v(Palavra1,[tempo:inf]) ---> [Palavra2]),
P =..[Palavra1,X]].
%_____________________________________________________________________
%
% Meta Entrada Lexical para o verbo "ser" predicativo
%_____________________________________________________________________
elex(v,Ltracos,[spr : [r(n,_,[],[spr:[]|_],_)],
comp: [r(C,_,[],_,_)],
gap : []], X^X) ==> v(ser_v,Ltracos)
^[ extrai(Ltracos,tipo_v,pred),
extrai(Ltracos,scat,[comp:C])].
%_____________________________________________________________________
%
%Meta Entrada Lexical para verbos intransitivos
%_____________________________________________________________________
elex(v,Ltracos,[spr : [r(n,_,[],[spr:[]|_],_)],
comp: [],
gap : []], Y^P) ==> v(Palavra, Ltracos)
^[\+ retira_elemento(Ltracos,scat:_,_),
P =..[Palavra,Y]].
128
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
%_____________________________________________________________________
%
% Meta Entrada Lexical para verbos com um argumento interno
%_____________________________________________________________________
elex(v,Ltracos1,[spr : [r(n,_,[],[spr:[]|_],_)],
comp: [r(C1,_,[],[spr:[],comp:[],_],_)],
gap : []],X^Y^P) ==> v(Palavra, Ltracos)
^[\+(extrai(Ltracos,tipo_v,pred)),
\+(extrai(Ltracos,tipo_v,imp)),
retira_elemento(Ltracos,scat:[comp:C1],Ltracos1),
P =.. [Palavra,X,Y]].
%_____________________________________________________________________
%
% Meta Entrada Lexical para verbos impessoais (há)
%_____________________________________________________________________
elex(v,Ltracos,[spr : [],
comp: [r(C,_,[],[spr:[],comp:[],_],_)],
gap : []],Y^P) ==> v(Palavra, Ltracos)
^[extrai(Ltracos,tipo_v,imp),
extrai(Ltracos,scat,[comp:C]),
P =.. [Palavra,Y]].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
REGRAS LEXICAIS
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%_____________________________________________________________________
%
% Regra Lexical para o tratamento do gap de complemento
% (relativas de complemento)
%_____________________________________________________________________
elex(v,Ltracos1,[spr : SPR,
comp: [],
gap : [r(_,_,[],_,Y)]],X^P) ==>
elex(v,Ltracos1,[spr : SPR,
comp: [r(_,_,[],_,Y)],
gap : []],X^Y^P).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
129
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
%_____________________________________________________________________
%
% Regra Lexical para o tratamento de verbos impessoais com sujeito
% nulo
%_____________________________________________________________________
elex(v,Ltracos1,[spr : [],
comp: [],
gap : [r(n,_,[],[spr:[],comp:[],gap:[]],_)]],Sem) ==>
elex(v,Ltracos1,[ spr : [],
comp: [r(n,_,[],_,_)],
gap : []],Sem).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
REGRAS SINTAGMÁTICAS
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
%
%
%
____________________________________________________________________
Regra sintagmática 1
Promove X0 para X'
____________________________________________________________________
r(N,T,[],[spr : SPR,
comp: [],
gap : Gap],Sem) => [elex(N,T,[spr : SPR,
comp: [],
gap : Gap],Sem)].
%_____________________________________________________________________
%
% Regra sintagmática 2
%
% Orações relativas restrictivas
%_____________________________________________________________________
r(vr,T,[compoe_sem(SPR,GAP,T1,SEM,SEMCOMP,T)],
[spr : [],
comp: [],
gap : []], SEMCOMP) => [ r(pr,_,[],_,_),
r(v,T1,[],[spr : SPR,
comp: [],
gap : GAP],
SEM)].
130
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
%
%
%
%
%
%
%
____________________________________________________________________
Regra sintagmática 3
Adjunção de um modificador (SP/VR) a um N’ e um quantificador
a um N’’
____________________________________________________________________
r(n,T1,[adjunto(C1,C),
trata_spr(SPR,Sem,T1,T,Sem1,Sem2)],
[spr:SPR,
comp:[],
gap:[]], Sem2) =>
[ r(C1,T1,[],[spr:SPR,
comp:[],
gap:[]],Sem1),
r(C,T,[],[spr:[],
comp:[],
gap:[]],Sem)].
%
%
%
%
%
%
___________________________________________________________________
Regra sintagmática 4
Adjunção com negação a SV
___________________________________________________________________
r(v,T1,[],[ spr:[SPR],
comp:[],
gap:GAP], X^Sem1) =>
[ elex(neg,_,_,Sem^Sem1),
r(v,T1,[],[spr:[SPR],
comp:[],
gap:GAP],X^Sem)].
%
%
%
%
%
%
___________________________________________________________________
Regra sintagmática 5
SNs marcados
___________________________________________________________________
r(n,[marcado:s|T1],[\+(extrai(T1,marcado,s)),
verifica_relacional(Sem,T1,Sem1)],
[spr:[],
comp:[],
gap:[]], Sem1) =>
[r(marc,_,[],[spr:[],
comp:[],
gap:[]],_),
r(n,T1,[],[spr:[],
comp:[],
gap:[]],Sem)].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
131
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
%_____________________________________________________________________
%
% Regra sintagmática 6
%
% Coordenações
%_____________________________________________________________________
r(V,Ltracos5,[\+(extrai(Ltracos,coord,_)),
testa_conjuncao(C, Ltracos2, Ltracos3),
coordena(V,Sem1,Sem3,Ltracos3,Ltracos4,Sem4),
insere_cabeca(Ltracos4,marcado:s,Ltracos5),
verifica_sv(V,Ltracos,Ltracos2)],
[spr : SPR,
comp: [],
gap : Gap], Sem4) =>
[ r(V,Ltracos,[],[spr: SPR,
comp:[],
gap: Gap],Sem1),
r(conj,[conj:C],[],[spr : [],
comp: [],
gap : []],_),
r(V,Ltracos2,[],[spr: SPR,
comp:[],
gap: Gap],Sem3)].
%
%
%
%
%
%
___________________________________________________________________
Regra sintagmática 7
Especificador - núcleo
___________________________________________________________________
r(N,Ltracos3,[sem_spr(N,Ltracos,T1,Y^Sem,Sem1,Ltracos3,Sem2)],
[spr:[],
comp:[],
gap:GAP], Sem2) =>
[ r(C,Ltracos,[],SCAT,Sem1),
r(N,T1,[],[spr:[r(C,Ltracos,[],SCAT,Sem1)],
comp:[],
gap:GAP],Y^Sem)].
132
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
%
%
%
%
%
%
__________________________________________________________________
Regra sintagmática 8
Verbo existir com inversão de sujeito
___________________________________________________________________
r(v,Ltracos1,[extrai(T1,tipo_v,existe),
unifica(T1,Ltracos,Ltracos1),subs(Sem1,Sem2,Sem3)],
[spr:[],
comp:[],
gap:[]], Sem3) =>
[r(v,T1,[],[spr:[r(n,Ltracos,[],[spr:[],
comp:[],
gap:[]],Sem1)],
comp:[],
gap:[]],Sem2),
r(n,Ltracos,[],[ spr:[],
comp:[],
gap:[]],Sem1)].
%
%
%
%
%
%
___________________________________________________________________
Regra sintagmática 9
Gap à direita de um núcleo verbal
___________________________________________________________________
r(v,Ltracos,[subs(Sem1,Sem2,Sem3)],
[spr :[],
comp:[],
gap :[]], Sem3) =>
[ r(C,Ltracos,[],SCAT,Sem1),
r(v,_,[],[spr :[],
comp:[],
gap:[r(C,Ltracos,[],SCAT,_)]],Sem2)].
%________________________________________________________________
%
% Regra sintagmática 10
% Predicados com um complemento in situ
%________________________________________________________________
r(N,T1,[faz_sem(Sem2,Sem1,T1,Sem3),
verifica_comp(N,T1,L)],[spr : SPR,
comp: [],
gap : Gap], Sem3) =>
[elex(N,T1,[spr : SPR,
comp:[r(C2,L,[],SCAT2,Sem2)],
gap : Gap],Sem1),
r(C2,L,[],SCAT2,Sem2)].
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
133
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
PARSER TABULAR ASCENDENTE
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:-dynamic edge/4.
parse(R,Expr1):retractall(edge(_,_,_,_)),
subst_contrac(Expr1,Expr2),
testa_qual(Expr2,Expr),
statistics(runtime,_),
start_chart(1,Vn,Expr),
statistics(runtime,[_,T]),
Time is T / 1000,
write('Tempo de análise: '),write(Time),
write(' segundos.'),nl,
retractall(edge(_,_,_,[_|_])),
edge(1,Vn, R ,[]).
start_chart(V0,Vn,[Word|Words]):V1 is V0 + 1,
foreach( (lexema(Word,Category)),
add_edge(V0,V1,Category,[])),
start_chart(V1,Vn,Words).
foreach(X,Y):call(X),
do(Y),
fail.
foreach(_,_):- true.
do(Y):- Y, !.
add_edge(V0,V1,Category,Categories):edge(V0,V1,Category,Categories),!.
add_edge(V1,V2,Category0,[]):obj_atrasados(Category0,Category1),
asserta(edge(V1,V2,Category1,[])),
foreach( Category2 => [Category1|Categories],
add_edge(V1,V1,Category2,[Category1|Categories])),
foreach(edge(V0,V1,Category2,[Category1|Categories]),
(add_edge(V0,V2,Category2,Categories))).
add_edge(V0,V1,Category1,[Category2|Categories]):asserta(edge(V0,V1,Category1,[Category2|Categories])),
foreach(edge(V1,V2,Category1,[]),
add_edge(V0,V2,Category1,Categories)).
134
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
PREDICADOS AUXILIARES
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%--------------------------------------------------------------------%
%
%
%
Parser
%
%--------------------------------------------------------------------%
/* ==================================================================
testa_qual(+LPalavrasintoduzidas,-LPalavrasaAnalisar)
Predicado que trata a elisão do verbo “ser” em interrogatives
pronominais com “qual”
====================================================================*/
testa_qual([Word,Word1|L],[Word,é,Word1|L]):Word = qual,
\+(Word1 = é).
testa_qual([Word,Word1|L],[Word,são,Word1|L]):Word = quais,
\+(Word1 = são).
testa_qual(L,L).
/* ==================================================================
lexema(+Palavra, -Meta-entradaLexical)
Predicado que aplica as meta entradas lexicais e as regras lexicais
aos lexemas presentes na interrogativa
===================================================================*/
lexema(Word,elex(C,Ltracos,S,Sem)):(EL ---> [Word]),
(elex(C,Ltracos,S,Sem) ==> EL^Prolog),
executa(Prolog).
lexema(Word,elex(C,Ltracos1,S1,Sem1)):(EL ---> [Word]),
(elex(C,Ltracos,S,Sem) ==> EL^Prolog),
executa(Prolog),
(elex(C,Ltracos1,S1,Sem1) ==> elex(C,Ltracos,S,Sem)).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
135
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
%--------------------------------------------------------------------%
%
%
%
Semântica
%
%--------------------------------------------------------------------%
/* ==================================================================
compoe_sem(+ListaSPR,+ListaGap,+LtracosInicial,+RepSemInicial,
-RepSemFinal,-LtracosFinal)
Predicado que faz a semântica das relativas com gap de complemento
ou de sujeito
===================================================================*/
compoe_sem([],[r(n,_,_,_,X)],T,X^S,X^S,[]):(extrai(T,tipo_v,existir);
extrai(T,tipo_v,imp)),!.
compoe_sem([],[r(_,_,_,_,X)],_,S,X^S,[]).
compoe_sem([r(_,_,_,_,X)],[],T,X^S,X^S,T).
/* ===================================================================
trata_spr(+ListaSPR,+RepSem1,+Ltracos1,+Ltracos2,+RepSem2,
-RepSemFinal)
Predicado que que faz a semântica das adjunções de modificadores a N’
e de quantificadores a N’’
===================================================================*/
trata_spr([],X^Sem,T1,T,(X^Y)^d(exi,N,X,P & Q),
(X^Y)^d(exi,N,X,(P & Sem & Q))):unifica(T1,T,_).
trata_spr([],Formula,T1,T,(X^Res)^(X^Amb)^d(todo,N1,X,Res>Amb),Sem2):unifica(T1,T,_),
abs_l(Formula,d(o,N,M,R > A)& Det1,L),
trata_quant(Det1,(X^Res)^(X^Amb)^d(todo,N1,X,Res>Amb),Detfinal),
abs_l(Sem2,d(todo,N,M,R > A)&Detfinal,L).
trata_spr([],(X^Amb)^d(o,_,X,Res>Amb),T1,T,
(X^Res)^(X^Amb)^d(todo,N1,X,Res > Amb) ,
(X^Amb)^d(todo,N1,X,Res > Amb)):unifica(T1,T,_).
trata_spr([_],X^Sem,T1,T,X^Sem1,X^(Sem1 & Sem)):unifica(T1,T,_)
136
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
/* ==================================================================
trata_quant(+RepSem,+RepSemQuantificador,-NovaRepSEm)
Predicado que distribui o quantificador “todo” por toda a estrutura
Quantificada (escopo do quantificador “todo”)
====================================================================*/
trata_quant(d(exi,N,M,R & A)&Det1,(X^Res)^(X^Amb)^d(Z,_,_,Res > Amb),
d(Z,N,M,R > A)&Detfinal):trata_quant(Det1,(X^Res)^(X^Amb)^d(Z,_,_,Res > Amb),Detfinal).
trata_quant(d(exi,N,M,R & A),(X^Res)^(X^Amb)^d(Z,_,_,Res > Amb),
d(Z,N,M,R > A)).
/*===================================================================
sem_spr(+CatNúcleo,+LtracosEspecificador,LtracosNúcleo,+RepSEmNúcleo,
+RepSemEspecificador,-LtracosFinal,-RepSemFinal)
Predicado que compõe a semântica do núcleo com a do seu especificador
===================================================================*/
sem_spr(v,Ltracos,T1,Y^Sem,Sem1,Ltracos3,Sem2):unifica(T1,Ltracos,Ltracos3),
subs(Sem1,Y^Sem,Sem2).
sem_spr(_,Ltracos,T1,Sem,Sem^Sem1,Ltracos3,Sem1):unifica(T1,Ltracos,Ltracos3).
/*==============================================================
verifica_relacional(+RepSem1,Ltracos1,-RepSemFinal)
Predicado que permite a semântica de hipónimo do hipónimo e
excluí a de hipónimo do gato
===============================================================*/
verifica_relacional((X^Y)^d(exi,N,X,S&Z),T,(X^Y)^d(exi,N,X,S&Z)):\+extrai(T,nom,comp).
verifica_relacional(Sem,T,Sem):extrai(T,nom,comp).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
137
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
/*===============================================================
faz_sem(+RepSem1,+RepSem2,+Ltraços2,-RepSemFinal)
Predicado que faz a semântica do nucleo mais complemento.
O primeiro caso serve para tratar o verbo "haver" que não tem
sujeito (impessoal)
O segundo caso serve para todos os outros verbos
===============================================================*/
faz_sem(Sem2,Sem1,T1,Sem3) :extrai(T1,tipo_v,imp),
subs(Sem2,Sem1,Sem3).
faz_sem(Sem2,X^Sem1,_,X^Sem3) :subs(Sem2,Sem1,Sem3).
/* ================================================================
verifica_comp(+cat,+Ltracos,+Ltracos2)
Predicado que verifica se um verbo selecciona nomes que seleccionam
complementos
==================================================================*/
verifica_comp(v,L1,L2):member(tipo_v:igual,L1),!,
member(nom:comp,L2).
verifica_comp(v,L1,L2):\+(member(tipo_v:igual,L1)),!,
\+(member(nom:comp,L2)).
verifica_comp(_,_,_).
/* ===============================================================
coordena(+Cat,+RepSem1,+RepSem2,+Ltraços1,+Ltracos2,-RepSEm)
trata a coordenação de sns ou de svs. Distribui o quantificador
quantos por todos os SNs coordendados
===============================================================*/
coordena(n,X^Sem1,Y^Sem2,Ltracos,[num:plu|Ltracos2],Sem3):abs_l(Sem2,Sem4,A),
abs_l(Sem1,Sem5,_),
verifica_det(Sem5,Sem4,Sem6),
retira_elemento(Ltracos,num:_,Ltracos2),
(A==[] -> coord_sn(X^Sem1,Y^Sem6,Sem3);
parte_lista(A,C),coord_sn(X^Sem1,Y^C^Sem6,Sem3)).
coordena(C,Sem1,Sem2,Ltracos,Ltracos,Sem3):\+C==n,
coord_sx(Sem1,Sem2,Sem3).
138
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
/*==================================================================
verifica_det(+RepSemsemVariáveisAbstraídas1,
+RepSemsemVariáveisAbstraídas2,
-RepSemsemVariáveisAbstraídasFinal)
Predicado que distribui a a quantificação do determinante quantos
sobre todas as estruturas quantificadas (coordenações)
===================================================================*/
verifica_det(quantos(_)*>_,d(exi,_,X,A&D),quantos(X)*>A&D).
verifica_det(A,Sem1&Sem3,Sem2&Sem4):verifica_det(A,Sem1,Sem2),
verifica_det(A,Sem3,Sem4).
verifica_det(_,d(A,B,C,D),d(A,B,C,D)).
verifica_det(_,quantos(A)*>B,quantos(A)*>B).
/* ==================================================================
insere_cabeca(+Listatracos,+Traço,-Listacomtracoàcabeça)
Predicado que insere um determinando traço, presente na lista, na
cabeça da lista.
Se esse traço não estiver presente devolve a própria lista
===================================================================*/
insere_cabeca(L,E,[E|L2]):retira_elemento(L,E,L2),!.
insere_cabeca(L,_,L).
/* ==================================================================
verifica_sv(+Categoria,+Listatraços,+Listatraços2)
Predicado que verifica se duas listas de traços de constituintes
verbais contêm o mesmo valor para o atributo número.
===================================================================*/
verifica_sv(v,Ltracos,Ltracos2):extrai(Ltracos,num,N),
extrai(Ltracos2,num,N).
verifica_sv(C,_,_):- C\==v.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
139
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
/*===================================================================
testa_conjuncao(+TipoConj,+ListaTracos,-ListaTracos)
Predicado que verifica o tipo de coordenação: se o segundo sn é
simples e a conjunção for um e; e se o sn for composto e a conjunção
uma vírgula
====================================================================*/
testa_conjuncao(f,Ltracos,[coord:s|Ltracos]):\+(extrai(Ltracos,conj,_)).
testa_conjuncao(nf,Ltracos,[coord:s|Ltracos]):extrai(Ltracos,coord,s).
/* ===============================================================
coord_sn(+RepSem1,+RepSem2,-RepSemFinal)
Predicado que devolve a representação semântica de SNs coordenado
==================================================================*/
coord_sn(A^SN1,SN2,A^Fr) :abs_l(SN2,SN2s,L),
aplica(L,(SN1 & SN2s), Fr).
/* ===================================================================
abs_l(+RepSem,-RepSemsemVariáveisAbstraídas,
-ListaVariáveisAbstraídas)
Predicado que, dada uma Fórmula com abstracções, devolve essa Fórmula
sem abstracções e uma Lista com todas as abstracções
da Fórmula inicial
====================================================================*/
abs_l(A^F,Fr,[A|R]):abs_l(F,Fr,R),!.
abs_l(F,F,[]).
/*===================================================================
aplica(+ListaVariaveisAbstraidas,+RepSemsemVariaveisAbstraídas,
-RepSemcomVariaveisAbstraídas)
Predicado que, dada uma Lista de abstracções e uma Fórmula, devolve a
aplicação das abstracções de LA em F
====================================================================*/
aplica([A|L],F,A^Fr) :aplica(L,F,Fr).
aplica([A],F,A^F).
140
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
/*=============================================================
coord_sx(+RepSem1,+RepSem2,-RepSEmFinal)
Predicado que faz a construção da representação semântica da
coordenação de sintagmas não nominais
==============================================================*/
coord_sx(SV1a,SV2a,F):retira_abs(SV1a,A,SV1),
retira_abs(SV2a,A,SV2),
c(A,SV1,SV2,F).
/*===================================================================
retira_abs(+RepSem,-VariavelmaisExternaAbstraida,
-RepSemsemVariavelmaisExternaAbstraida)
Predicado que dada uma representação semântica, devolve a sua
variável mais externa abstraída e a restante representação semântica
===================================================================*/
retira_abs(A^F,A,F).
/*==========================================================
c(+Variavel,+RepSemSX1,+RepSemSX2,-RepSemSXFinal)
Predicado que aplica a mesma variável a duas representações
semânticas de SXs. (coordenação de SXs)
===========================================================*/
c(A,SX1,SX2,A^(SX1 & SX2)).
/*===================================================================
subs(+RepSem1,+RepSem1,-RepSemFinal)
Predicado que, dadas duas representações semânticas, devolve uma
representação semântica resultado da substituição das suas variáveis
abstraidas
===================================================================*/
subs(X^F,X,F):- var(X).
subs((X^A)^F,V^SV,R) :substitute(X,V,SV,A),!,
subs(F,V^SV,R).
subs(F,_^_,F).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
141
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
/*==============================================================
substitute(+Termo,+Variavel,+RepSem,-RepSemFinal)
Predicado que dado um termo, uma variável e uma representação
semântica substitui todas as ocorrências da Variavel pelo Termo
===============================================================*/
substitute(Term,Var,Exp,Result):Exp==Var, !,
Result=Term.
substitute(_Term,_Var,Exp,Result):\+ compound(Exp), !,
Result=Exp.
substitute(Term,Var,Formula,Result):compose(Formula,Functor,[Exp,F]),
memberList(Functor,[todos,o,um,algum,exi]), !,
(Exp==Var, !,
Result=Formula;
substitute(Term,Var,F,R),
compose(Result,Functor,[Exp,R])).
substitute(Term,Var,Formula,Result):compose(Formula,Functor,ArgList),
substituteList(Term,Var,ArgList,ResultList),
compose(Result,Functor,ResultList).
substituteList(_Term,_Var,[],[]).
substituteList(Term,Var,[Exp|Others],[Result|ResultOthers]):substitute(Term,Var,Exp,Result),
substituteList(Term,Var,Others,ResultOthers).
/* ==============================================================
memberList(+Elemento,+Lista)
Predicado que verifica se um dado elemento pertence a uma lista
================================================================*/
memberList(X,[X|_]).
memberList(X,[_|Tail]):memberList(X,Tail).
142
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
/*=================================================================
compose(+Predicado,-Simbolo,-ListadeArgumentos)
Predicado que, dado um predicado devolve o seu símbolo e uma lista
com os seus argumentos
===================================================================*/
compose(Term,Symbol,ArgList):Term =.. [Symbol|ArgList].
/*===================================================================
adjunto(+cat,+cat2)
Predicado que indica quais as categorias que podem estar em adjunção
====================================================================*/
adjunto(n,p).
adjunto(n,vr).
adjunto(det,n).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
143
Anexos
ANEXO 7 – EXEMPLOS DO PROCESSAMENTO SINTÁCTICO E
SEMÂNTICO DE INTERROGATIVAS
•
Os gatos são mamíferos?
SV (F)
“ os gatos são mamíferos”
d(o, plu, A, gato(A)&d(exi, plu, B, mamífero(B)&ser(A, B)))
SN
SV
“ os gatos”
(A^C)^d(o, plu, A, gato(A)&C)
“ são mamíferos”
D^d(exi, plu, B, mamífero(B)&ser(D, B))
1
2
1
D
N’
N
“ gatos”
E^gato(E)
“ os”
(A^F)^(A^C)^d(o, plu, A, F&C)
2
V’
SN
V
N’
“ são”
N
H^D^são(H,D)
(B^G)^d(exi, plu, B, mamífero(B)&G)
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
145
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
•
Quantos animais miam e andam?
SV (F)
“ quantos animais miam?”
quantos(A)*>animal(A)& (miar(A)&andar(A))
SN
SV
“ quantos animais”
“ miam e andam”
(A^X)^(quantos(A)*>animal(A)&X)
Z^(miar(Z)&andar(Z))
2
1
1
D
N’
N
“ animais”
A^animal(A)
“ quantos”
(A^Y)^ (A^X)^ (quantos(A)*>Y&X)
2
V’
V
“ miam”
B^miar(B)
146
V’
Conj
V
e
“ andam”
C^andar(C)
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
•
Quais são os hipónimos de “felino” que não rugem?
SV (F)
“ quais são os hipónimos de “felino” que não rugem?”
qual(A)*>d(o,plu,B,d(exi,sing,C,felino(C)&hipónimo(B,C))&
~(rugir(B))>igual(A,B))
SN
SV
“ quais ”
“ são os hipónios de “felino que não rugem”
(A^X)^ (qual(A)*>X)
E^d(o,plu,B,d(exi,sing,C,felino(C)&
hipónimo(B,C))&~(rugir(B))>igual(E, B))
1
1
V
N’
N
“ os hipónimos de “felino” que não rugem”
(B^Y)^d(o,plu,B,d(exi,sing,C,felino(C)&
“ são”
hipónimo(B, C))& ~(rugir(B))>Y)
E^T^igual(E, T)
2
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
147
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
2
N’
VR
N’
“ os hipónimos de “felino” ”
“ que não rugem”
(B^R)^d(o,plu,B,d(exi,sing,C,
F^~(rugir(F))
felino(C)&hipónimo(B,C))>R)
3
3
D
N’
“ os”
“ hipónimos de “felino” ”
(B^Q)^(B^R)^d(o,plu,B,Q>R)
W^d(exi,sing,C,felino(C)&hipónimo(W,C)
4
4
N
148
Marc
“ hipónimos”
“ de “felino” ”
G^H^hipónimo(G,H)
(C^S)^d(exi,sing,C,felino(C)&S)
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
ANEXO 8 – IMPLEMENTAÇÃO DO ALGORITMO DE CONVERSÃO
/*=================================================================
Predicado topo do módulo I. Recebe uma string em Língua natural e
constrói a respectiva representação semântica
===================================================================*/
go:- read_line(S),
analisador(S).
/* ===========================================================
read_line(-ListadePalavrasIntoduzidas)
Predicado que lê, um a um, os caracteres introduzidos pelo
Utilizador devolvendo uma lista de palavras
=============================================================*/
read_line(Line):read_chars(Chars),
processa(Chars,Line).
/*=====================================================
Predicado que aplica a gramática à string introduzida
=====================================================*/
analisador(stop).
analisador(S):nl,
write('_________________________________________________'),
nl,
findall(S1,verifica_lexico(S,S1),F),
reconhecedor(F,_),!,
nl,
write('_________________________________________________'),
nl,nl,
go.
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
149
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
/*===================================================================
reconhecedor(+ListaStrings)
Predicado que aplica as regras da gramática a cada string resultante
da ambiguidade lexical
====================================================================*/
reconhecedor([X|L]):semf(_,X),
reconhecedor(L).
reconhecedor([]).
/*=================================================================
sem(-RepSem,+ListaPalavras)
Predicado que aplica uma lista de palavras às regras da gramática
devolvendo uma interpretação semântica
==================================================================*/
semf(L,F):findall(A,(parse(r(v,_,[],[spr:[],comp:[],gap:[]],A),F),
output_pprint(A)),L).
/* ========================================================
output(+RepSem)
Predicado que imprime no ecrã uma representação semântica
==========================================================*/
output_pprint(A):copy_term(A,A1),
numbervars(A1,0,_),nl,
pprint(A1,0),nl,nl,!.
/*==================================================================
read_Chars(+Caracter)
Predicado que lê um caracter do ecrã e devolve a sua representação
ASCII
===================================================================*/
read_chars( Chars ):get0(C),
read_chars_2( C, Chars ).
150
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
read_chars_2(Ch, []) :end_of_input_char(Ch).
read_chars_2(C, [C|T]):read_chars(T).
/*===================================================================
processa(+ListacaractersAscii,-Listade PalvrasIntroduzidas)
Predicado que recebe uma lista de caracteres ascii e retorna a lista
de palavras correspondente
===================================================================*/
processa([102,105,109|_],stop).
processa(Chars,Line):trata_virgula(Chars,Chars2),
trata_inter(Chars2,Chars3),
cicle(Chars3,L_char),
char(L_char,Line).
/* ===================================================
Facto que indica o fim do input do utilizador (enter)
=====================================================*/
end_of_input_char(10).
/*====================================================================
trata_virgula(+ListaCaracteresAscii,-ListaCaracteresAscii)
Predicdo que coloca um espaço em branco antes e depois de uma vírgula
(se ainda não estiver)
====================================================================*/
trata_virgula([X,44,Y|L],[X,32,44,32,Y|L2]):X \== 32,
Y \== 32, !,
trata_virgula(L,L2).
trata_virgula([X,44,32|L],[X,32,44,32|L2]):X \== 32,!,
trata_virgula(L,L2).
trata_virgula([32,44,Y|L],[32,44,32,Y|L2]):Y \== 32,!,
trata_virgula(L,L2).
trata_virgula([X|L],[X|L2]):trata_virgula(L,L2).
trata_virgula([],[]).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
151
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
/*===================================================================
verifica_inter(+ListaCaracteresAscii,-ListaCaracteresAscii)
Predicado que verifica se o último caracter da string de input é um ?
====================================================================*/
trata_inter(L,L2):last(63,L),
delete(L,63,L2).
/*===================================================================
cicle(+ListacracteresAscii,-ListaCaracteresAscciSeparadosemPalavras)
Predicado que recebe uma lista Ascii e devolve outra lista cujos
elementos são sequências de caracteres ascii (palavras)
====================================================================*/
cicle([],[]).
cicle(F,[Y|L]):break(F,Y,T),
cicle(T,L),!.
/*===================================================================
break(+ListaCaractersAscii,-ListaTemp,-ListaCaracteresAscii)
Recebe uma lista de ASCII correspondente à string de input, criando
uma nova lista cujos elementos são sequências de símbolos ASCII
correspondentes a palavras
====================================================================*/
break([],[],[]).
break([34|L],[34|L4],L2):procura34(L,L4),
retira_elems_lista(L,L4,L3),
break(L3,_,L2).
break([32|L],[],L):- !.
break([X|L],[X|L2],L3):- break(L,L2,L3).
/*==================================================================
procura_34(+ListaCaracteresAscii,-ListaApartirdoElemento34)
Predicado que recebe uma lista ASCII, procura o elemento 34
(correspondente a aspas) e devolve a lista a partir desse elemento
===================================================================*/
procura34([34|_],[34]):-!.
procura34([X|L],[X|L2]):procura34(L,L2).
152
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
/*=================================================================
char(+ListaSequênciasAscii,-ListaPalavras)
Predicado que recebe uma lista de sequências ascii e devolve uma
lista das palavras correspondentes
==================================================================*/
char([],[]):-!.
char([[34|X]|L],[Y|L2]):retira_aspas([34|X],34,Y),
char(L,L2),!.
char([X|L],[Y|L2]):name(Y,X),
char(L,L2).
/*==================================================================
retira_aspas(+ListaCarateresAscii,+elemento,
-ListaSemOcorresnciasdeElemento)
Predicado que recebe uma lista de caracteres Ascii e um elemento e
devolve uma lista sem qualquer ocrrência desse elemento
===================================================================*/
retira_aspas([],_,[]).
retira_aspas([X|L],X,L2):retira_aspas(L,X,L2),!.
retira_aspas([Y|L],X,[Y|L2]):retira_aspas(L,X,L2).
/*====================================================================
verifica_lexico(+ListaPalavras,-ListaPalavras)
Predicado que verifica se todas as palavras da lista estão presentes
na base de dados lexical
====================================================================*/
verifica_lexico([],[]).
verifica_lexico([Word1,Word2|L],L2):atom(Word1),
atom(Word2),
concat_atom([Word1,Word2],' ',Word3),
verifica_lexico([Word3|L],L2).
verifica_lexico([ASCII|L],[ASCII|L2]):is_list(ASCII),!,
verifica_lexico(L,L2).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
153
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
verifica_lexico([Word|L],[Word|L2]):(_ ---> [Word]), !,
verifica_lexico(L,L2).
/*==================================================================
pprint(+RepSem,+Tab)
Predicado que imprime uma representação semântica indentada no ecrã
====================================================================*/
pprint(V,_):- var(V), write(V).
pprint(d(Q,_,X,F),C) :tab(C),write(Q),
write('('),
write(X),
write(','),nl,!,
Cn is C+9, pprint(F,Cn),
write(' )').
pprint(A *> B,C) :pprint(A,C),!,
write('*>'),nl,nl,
C1 is C + 10,
pprint(B,C1).
pprint(~(B),C) :tab(8),
write(' ~ ('), nl,
tab(5),
pprint(B,C),
write(')').
pprint(A & B,C) :pprint(A,C),!,nl,
tab(C),write('&'),nl,
pprint(B,C).
pprint(A > B,C) :pprint(A,C),!,
write(' -> '),nl,
pprint(B,C).
pprint(P,C):nonvar(P),
P=..[Symb|X],!,
tab(C),
write(Symb),write('('),
imprime(X),
write(')').
154
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
/*=========================================================
imprime(+Lista)
Predicado que imprime elemento de uma lista entre virgulas
===========================================================*/
imprime([]).
imprime([X]):- write(X).
imprime([X,Y|Z]):- write(X),write(’,’),imprime([Y|Z]).
/* ==================================================================
subst_contract(+ListaPalavras,-ListadePalavrasSemContraccões)
Predicado que substitui as contracções presentes na lista pelos seus
elementos básicos
====================================================================*/
subst_contrac([],[]).
subst_contrac([X|L],[Z,Y|L2]):(contrac(X) ===> [Z,Y]),!,
subst_contrac(L,L2).
subst_contrac([X|L],[X|L1]):subst_contrac(L,L1).
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
155
Anexos
ANEXO 9 – EXEMPLOS DA REPRESENTAÇÃO SEMÂNTICA DE
INTERROGATIVAS EM PORTUGUÊS UTILIZANDO O ALGORITMO
DE CONVERSÃO
go.
|: todos os gatos miam?
_________________________________________________
Tempo de análise: 0.07 segundos.
todo(A,
gato(A) ->
miar(A) )
________________________________________________
|: todos os gatos e cães são animais?
_________________________________________________
Tempo de análise: 0.161 segundos.
todo(A,
gato(A) ->
exi(B,
animal(B)
&
ser_v(A,B) ) )
&
todo(C,
cão(C) ->
exi(B,
animal(B)
&
ser_v(C,B) ) )
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
157
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
todo(A,
gato(A) ->
exi(B,
animal(B)
&
ser_v(A,B) ) )
&
exi(C,
cão(C)
&
exi(B,
animal(B)
&
ser_v(C,B) ) )
_________________________________________________
|: quantos gatos e cães são animais?
_________________________________________________
Tempo de análise: 0.13 segundos.
quantos(A)*>
gato(A)
&
exi(B,
animal(B)
&
ser_v(A,B) )
&
quantos(C)*>
cão(C)
&
exi(B,
animal(B)
&
ser_v(C,B) )
_________________________________________________
158
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Anexos
|: o hiperónimo do hiperónimo de cão é animal?
_________________________________________________
Tempo de análise: 0.19 segundos.
o(A,
o(B,
exi(C,
cão(C)
&
hiperónimo(B,C) ) ->
hiperónimo(A,B) ) ->
exi(D,
animal(D)
&
ser_v(A,D) ) )
_________________________________________________
|: os cães,gatos e aranhas que são animais têm patas?
___________________________________________________________
Tempo de análise: 0.3 segundos.
o(A,
cão(A) ->
exi(B,
pata_2(B)
&
ter(A,B) ) )
&
exi(C,
gato(C)
&
exi(B,
pata_2(B)
&
ter(C,B) ) )
&
exi(D,
aranha(D)
&
exi(E,
animal(E)
&
ser_v(D,E) )
&
exi(B,
pata_2(B)
&
ter(D,B) ) )
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
159
INQUER – Interacção Pessoa – Máquina em Linguagem Natural
o(A,
cão(A) ->
exi(B,
pato(B)
&
ter(A,B) ) )
&
exi(C,
gato(C)
&
exi(B,
pato(B)
&
ter(C,B) ) )
&
exi(D,
aranha(D)
&
exi(E,
animal(E)
&
ser_v(D,E) )
&
exi(B,
pato(B)
&
ter(D,B) ) )
_________________________________________________
|: os elefantes têm membros?
_________________________________________________
Tempo de análise: 0.07 segundos.
o(A,
elefante(A) ->
exi(B,
membro(B)
&
ter(A,B) ) )
_________________________________________________
160
Grupo de Computação do Conhecimento Léxico-Gramatical – CLG
Download