diff --git a/alexp.py b/alexp.py index 68c0c81..977d75e 100644 --- a/alexp.py +++ b/alexp.py @@ -1,5 +1,15 @@ #! /usr/bin/env python2.6 # -*- coding: utf-8 -*- + +#--------------------------------- + +# EDIT: +# Erickson Silva(erickson.silva@lavid.ufpb.br) +# LAViD - Laboratório de Aplicações de Video Digital + +#--------------------------------- + + # Donatus Brazilian Portuguese Parser # # Copyright (C) 2010-2013 Leonel F. de Alencar @@ -26,47 +36,23 @@ from Aelius import AnotaCorpus DIR="cfg.syn.nltk" # definição de etiquetador e arquitetura default -ETIQUETADOR=[] -ETIQUETADOR.extend(list((carrega("AeliusHunPos"),"nltk"))) +ETIQUETADOR = list((carrega("AeliusHunPos"),"nltk")) # eventualmente será preciso incluir aqui outros sinais # de pontuação, como o travessão PUNCT=string.punctuation -# nesta lista são armazenados etiquetadores criados -# ao longo de uma sessão junto com os caminhos das -# gramáticas a partir das quais foram compilados -ANALISADORES=[] - -# nesta lista são armazenadas sentenças dadas -# para análise; a cada execução da função analisaBlocoDeSentencas() -# a lista é esvaziada e reinicializada -SENTENCAS=[] - -def configuraEtiquetador(modelo,arquitetura): - """Esta função permite mudar os valores por defeito da lista armazenada na variável global ETIQUETADOR. - """ - - ETIQUETADOR[0],ETIQUETADOR[1]=carrega(modelo),arquitetura - -def armazenaAnalisador(tupla): - """Esta função armazena até cinco analisadores, incluindo os caminhos da gramática a partir das quais foram construídos. O argumento da função é uma tupla constituída de (gramatica,parser), onde 'gramatica' é o caminho do arquivo com as regras da parte sintática da gramática. - """ - if len(ANALISADORES) > 4: - ANALISADORES.pop(0) - ANALISADORES.append(tupla) - def toqueniza(s): """Decodifica string utilizando utf-8, retornando uma lista de tokens em unicode. -""" + """ decodificada=s.decode("utf-8") return AnotaCorpus.TOK_PORT.tokenize(decodificada) -def etiquetaSentenca(s,etiquetador=ETIQUETADOR[0]): +def etiquetaSentenca(s): """Aplica um dos etiquetadores do Aelius na etiquetagem da sentença dada como lista de tokens. """ - anotada=AnotaCorpus.anota_sentencas([s],etiquetador,"hunpos")[0] + anotada=AnotaCorpus.anota_sentencas([s],ETIQUETADOR,"hunpos")[0] return anotada def geraEntradasLexicais(lista): @@ -118,7 +104,6 @@ def analisaSentenca(sentenca): """Retorna lista de árvores de estrutura sintagmática para a sentença dada sob a forma de uma lista de tokens, com base na gramática CFG cujo caminho é especificado como segundo argumento da função. Esse caminho é relativo à pasta nltk_data da instalação local do NLTK. A partir da etiquetagem morfossintática da sentença são geradas entradas lexicais que passam a integrar a gramática CFG. O caminho da gramática e o parser gerado são armazenados como tupla na variável ANALISADORES. """ parser=constroiAnalisador(sentenca) - #armazenaAnalisador((caminho,parser)) codificada=[w.encode("utf-8") for w in sentenca] trees=parser.nbest_parse(codificada) return trees @@ -132,31 +117,12 @@ def constroiAnalisador(s): lexico="\n".join(entradas) gramatica="%s\n%s" % (extraiSintaxe(DIR).strip(),lexico) cfg=nltk.parse_cfg(gramatica) - print cfg return nltk.ChartParser(cfg) def exibeArvores(arvores): """Função 'wrapper' para a função de exibição de árvores do NLTK""" nltk.draw.draw_trees(*arvores) -def constroiArvores(sent=None,num=None,analisador=-1): - """Constrói, com base no analisador na posição especificada na pilha ANALISADORES, árvores para uma sentença toquenizada ou a sentença de número dado . - """ - s=None - if sent: - s=sent - if num: - s=SENTENCAS[num-1] - if s: - return ANALISADORES[analisador][1].nbest_parse(s) - else: - print "Nenhuma sentença foi especificada." - -def mostraArvores(numero): - """Constrói e exibe arvores para a sentença de número dado geradas pelo analisador no topo da pilha ANALISADORES. - """ - exibeArvores(constroiArvores(num=numero)) - def run(sentenca): tokens=toqueniza(sentenca) trees=analisaSentenca(tokens) -- libgit2 0.21.2