O analisador sintáctico PEN

Documentos relacionados
PAPEL. Utilização do (analisador sintáctico) PEN para extracção de informação das denições de um dicionário

Uma Abordagem ao PÁGICO baseada no Processamento e Análise de Sintagmas dos Tópicos

Analisadores Descendentes Tabulares; Cjs First Follow

Folha 4.1 Análise sintática descendente

TRABALHO Nº 4: Desenvolvimento de um Interpretador ou de um Compilador

Análise Sintática Introdução

Compiladores - Gramáticas

Conceitos de Linguagens de Programação

AULA TEÓRICA RESOLUÇÃO DE PROBLEMAS 4ª

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

QUESTÃO 1 (0,6 ponto) Classifique os processadores de linguagens com relação aos tipos das linguagens-fonte e objeto.

Linguagens de Domínio Específico

Processamento de Linguagens Mestrado e Curso de Especialização em Informática Universidade do Minho

Análise Sintáctica. Definições: Conjuntos First() e Follow() Compiladores, Aula Nº 19 João M. P. Cardoso. Conjunto First(β)

1) Considere a gramática constituída pelas seguintes regras e em que F é o símbolo inicial.

Comunicação. Capítulo 22

Capítulo II Gramáticas

Compiladores - Gramáticas

Trabalho de Linguagens Formais e Compilação

Capítulo II Gramáticas

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

Análise Sintática (Cap. 04) Análise Sintática Descendente

Gramáticas Livres de Contexto

Linguagens Formais e Autômatos

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Compiladores. Análise Léxica

17/09/2010 SINTAXE PARTE 1. SCC5869 Tópicos em Processamento de Língua Natural. Thiago A. S. Pardo SINTAXE E GRAMÁTICAS

Compiladores Aula 4. Celso Olivete Júnior.

Lógica Computacional

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Comunicação. Capítulo 22 (Secções 1-3)

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Compiladores - Análise LL(1)

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

Ferramenta de apoio a identificação de eventos utilizando Linguagem Natural. Aluno: Ricardo Tomelin Orientador: Everaldo Artur Grahl

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Compiladores - Análise LL(1)

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07. Tópicos avançados

Definições Hierarquia de Chomsky Exemplos de gramáticas. Gramáticas. Objetivo de ensinar o inglês pelo computador e conseguir um tradutor de línguas

Construção de Compiladores Aula 16 - Análise Sintática

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Construção de um compilador para a linguagem Panda

28/04/2011 SINTAXE PARTE 1. SCC5908 Tópicos em Processamento de Língua Natural. Thiago A. S. Pardo SINTAXE E GRAMÁTICAS

Compiladores - Análise Recursiva

BCC244. Alfabeto, String, Linguagem, Gramática. Registro aqui o agradecimento à Profa. Lucília por ceder slides que fazem parte deste materal.

Linguagens de Programação

Compiladores - Análise Recursiva

Compiladores - JACC. Fabio Mascarenhas

Compiladores - Análise Ascendente

Ordenação por Seleção Métodos de Ordenação Parte 3

Métodos de Ordenação

Compiladores - Análise Ascendente

Tokens, Padroes e Lexemas

Revisão. Fases da dacompilação

Processamento de Linguagens I LESI + LMCC (3 o ano)

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Aula de Hoje. Processamento Estatístico da Linguagem Natural. Bottom-Up Filtering. Ambiguidade. Combinando Top-Down e Bottom-Up

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Introdução à Programação. João Manuel R. S. Tavares

U.C Raciocínio e Representação do Conhecimento. 26 de setembro de INSTRUÇÕES --

Construção de Compiladores

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Earley Parser. CT200 - Fundamentos de Autômatas e Linguagens Formais. Israel C.S. Rocha

Linguagens de Programação Aula 5

Familiarização com a ferramenta JavaCC

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

Linguagem de programação Java

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Fundamentos da Programação

Compiladores Análise Semântica

Exame Especial de Linguagens de Programação - DCC024 -

Marcação de Nomes Próprios usando técnicas de pesquisa local e recorrendo a fontes de conhecimento na Internet

INE5318 Construção de Compiladores. AULA 4: Análise Sintática

TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS

Lógica Proposicional

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Definições Exemplos de gramáticas

Testes em Haskell com a framework HUnit 1.0

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

Análise Sintática. Fabiano Baldo

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Capítulo 6: Linguagens de Programação

Computação II Orientação a Objetos

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

CP Compiladores I Prof. Msc.. Carlos de Salles

Análise Sintática LL(1)

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática

Implementação de Linguagens

MCTA001 Algoritmos e Estruturas de Dados I. Aula 08 Árvores (parte 1) Laboratório

Semântica e Gramática Gerativa Aula 1

Análise Sintática de Frases utilizando Gramáticas Livres de Contexto Probabilísticas

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 206 Departamento de Informática Centro Tecnológico

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Transcrição:

O analisador sintáctico PEN Hugo Gonçalo Oliveira hroliv@dei.uc.pt University of Coimbra Faculty of Sciences and Technology Department of Informatics Engineering Knowledge and Intelligent Systems Laboratory Cognitive and Media Systems Group Centre of Informatics and Systems of the University of Coimbra

Introdução Analisador sintáctico, vulgo parser Implementa, em Java, o algoritmo de Earley Permite analisar qualquer linguagem livre de contexto Normalmente utilizado no processamento de linguagem natural Disponível sob uma licença BSD, a partir de http://code.google.com/p/pen/ 2

Classes EarleyParser: classe principal, onde está implementado o algoritmo Grammar: gramática PhraseRule: regra e seu corpo TerminalRule: regra relativa a símbolo terminal Chart ChartRow SemanticNode: nó da árvore Sentence: frase atomizada 3

Classes (cont.) Outputter: para imprimir árvores GrammarValidator: para validar gramáticas Indica quando é encontrado o nome de uma regra não definida ou falta algum outro símbolo. 4

Utilização Utilização java EarleyParser <gramatica> <ficheiro> Onde <gramatica> é um ficheiro com regras utilizadas pelo PEN <ficheiro> é um ficheiro com uma frase por linha 5

Gramáticas Constituídas por regras para derivar frases Uma regra representa-se da seguinte forma: REGRA_UM ::= REGRA_DOIS <&> terminal Os nomes de regras têm todos os caracteres maiúsculos ou _ Os terminais têm de ter pelo menos um caracter minúsculo Todas as derivações começam pela regra RAIZ 6

Gramáticas (cont.) Primitivas ::= corpo de uma regra <&> conjunção <?> qualquer átomo <> átomo vazio [ comentário > inclusão de outra gramática # ou <#> (dependendo da versão) separador para o peso <@> anotação 7

Derivações Gramática RAIZ SN SV SN PRON SV V PRON eu V vi Permite derivar eu vi No formato do PEN RAIZ ::= SN <&> SV SN ::= PRON SV ::= V PRON ::= eu V ::= vi Com o Outputter [RAIZ] [S] [SN] [PRON] > [eu] [SV] [V] > [vi] 8

Derivações Gramática RAIZ SN SV SV SN DET N PRON SV V V SN DET o um N cão livro PRON eu V li vi leu viu No formato do PEN RAIZ ::= SN <&> SV RAIZ ::= SV SN ::= DET <&> N SN ::= PRON DET ::= o DET ::= um N ::= cão N ::= livro PRON ::= eu V ::= li V ::= vi V ::= viu V ::= leu 9

Derivações Permite derivar o cão viu um livro Com o Outputter [RAIZ] [QUALQUERCOISA] > [o] [QUALQUERCOISA] > [cão] [S] [SV] [V] > [viu] [QUALQUERCOISA] > [um] [QUALQUERCOISA] > [livro] 10

Derivações Mas já não permite derivar: eu vi um cão e um gato eu vi um cão, um gato e um rato eu li um livro completo alguém me disse que o cão leu um livro o cão viu o livro mas não o leu... Apenas é possível derivar frases em que todos os átomos são conhecidos! 11

Recursividade Por vezes é necessário ter regras que se referem a elas mesmas no seu corpo Para satisfazer essas situações, o PEN suporta recursividade 12

Recursividade Acrescentando regras recursivas SN ENUM_SN ENUM_SN SN CONJ SN ENUM_SN SN, ENUM_SN CONJ e ou E mais alguns terminais N cão gato rato No PEN... SN ::= ENUM_SN ENUM_SN ::= SN <&> CONJ <&> SN ENUM_SN ::= SN <&>, <&> ENUM_SN CONJ ::= e CONJ ::= ou N ::= gato N ::= rato 13

Recursividade Agora deriva eu vi um cão, um gato e um rato Com o Outputter [RAIZ] [S] [SN] [PRON] > [eu] [SV] [V] > [vi] [SN] [ENUM_SN] [SN] [DET] > [um] [N] > [cão] > [,] [ENUM_SN] [SN] [DET] > [um] [N] > [gato] [CONJ] > [e] [SN] [DET] > [um] [N] > [rato] 14

Derivações completas Para derivar todas as frases, mesmo que não existam regras específicas para elas... Utilizar regras recursivas para apanhar qualquer coisa! QUALQUERCOISA? QUALQUERCOISA QUALQUERCOISA? No formato do PEN... QUALQUERCOISA ::= <?> <&> QUALQUERCOISA QUALQUERCOISA ::= <?> 15

Derivações completas Acrescentando na gramática RAIZ QUALQUERCOISA S RAIZ S QUALQUERCOISA RAIZ QUALQUERCOISA S QUALQUERCOISA RAIZ S S ::= SV S ::= SN SV No formato do PEN RAIZ ::= QUALQUERCOISA <&> S RAIZ ::= S <&> QUALQUERCOISA RAIZ ::= QUALQUERCOISA <&> S <&> QUALQUERCOISA RAIZ ::= S S ::= SV S ::= SN <&> SV Apagar RAIZ ::= SV RAIZ ::= SN <&> SV 16

Derivações completas Desta forma é possível derivar eu li um livro completo E também alguém me disse que o cão leu um livro... Com o Outputter... [RAIZ] [S] [SN] [PRON] > [eu] [SV] [V] > [li] [SN] [DET] > [um] [N] > [livro] [QUALQUERCOISA] > [completo] 17

Inclusão de gramáticas Em regras utilizadas por várias gramáticas Para não ter de repetir a mesma regra em vários ficheiros Incluir gramáticas umas nas outras Um ficheiro (qqcoisa.txt) com as regras QUALQUERCOISA pode ser incluído noutras gramáticas com: > qqcoisa.txt A gramática funcionará como se tivesse todas as suas regras e ainda as incluídas 18

Pesos É ainda possível definir um peso, inteiro, para cada regra 10 # RAIZ ::= S N ::= cão -1 # QUALQUERCOISA ::= <?> <&> QUALQUERCOISA Ou na outra versão RAIZ ::= S <#> 10 N ::= cão QUALQUERCOISA ::= <?> <&> QUALQUERCOISA <#> -1 O peso por omissão é 0. 19

Derivações múltiplas Dependendo da gramática, é possível obter mais de uma derivação para a mesma frase. Como no exemplo acima, para frases como eu vi um cão [RAIZ] [QUALQUERCOISA] > [eu] [S] [SV] [V] > [vi] [QUALQUERCOISA] > [um] [QUALQUERCOISA] > [cão] [RAIZ] [S] [SN] [PRON] > [eu] [SV] [V] > [vi] [QUALQUERCOISA] > [um] [QUALQUERCOISA] > [cão] [RAIZ] [RAIZ] [QUALQUERCOISA] [S] > [eu] [SN] [S] [PRON] [SV] > [eu] [V] [SV] > [vi] [V] [SN] > [vi] [DET] [SN] > [um] [DET] [N] > [um] > [cão] [N] > [cão] 20

Derivações múltiplas Quando se quer apenas uma, é necessário programar uma forma de escolher a melhor derivação, por exemplo: menos nós desconhecidos, árvore com melhor pontuação,... 21

Programação Instanciar o PEN EarleyParser parser = new EarleyParser(String pathgramatica); Obter as derivações para uma frase ArrayList<SemanticNode> parses = parser.parse(new Sentence(frase)); Cada SemanticNode é a raíz de uma derivação 22

Programação Obter o peso de um nó int weight = node.getweight(); Obter o peso do nós e todos os nós abaixo int score = node.getscore(); Obter todos os nós de determinado tipo (e.g. DET), abaixo de um determinado nó LinkedList<SemanticNode> nodes = node.getnodes( DET ); Obter todos os nós filhos LinkedList<SemanticNode> children = node.getchildren(); Calcular o número de filhos de um nó int childcount = node.getchildcount(); 23

Desafio Gramática para a extracção de relações de hiperonímia, utilizando padrões de Hearst HIPERONIMO, tais/tal como (DET* HIPONIMO,/e/ou)+ HIPERONIMO, incluindo (DET* HIPONIMO,/e/ou)+ HIPONIMO e outros/outras HIPERONIMO Implementar um programa para extrair estas relações a partir das derivações do PEN Definir e implementar uma forma de seleccionar apenas uma derivação 24