diff --git a/src/new/alexp.py b/src/new/alexp.py index dc185df..0cc7885 100644 --- a/src/new/alexp.py +++ b/src/new/alexp.py @@ -27,16 +27,15 @@ """Este módulo contém funções que permitem utilizar o Aelius para etiquetar uma sentença, construindo entradas lexicais com base nas etiquetas atribuídas às palavras da sentença. Essas entradas lexicais são integradas em uma gramática CFG dada, que é transformada em um parser, utilizado para gerar uma árvore de estrutura sintagmática da sentença. """ -import re, string,nltk,platform +import re,nltk,platform, time, random from os.path import expanduser from Aelius.Extras import carrega from Aelius import AnotaCorpus -from nltk_tgrep import tgrep_positions, tgrep_nodes from unicodedata import normalize sentenca_anotada="" - +sleep_times=[0.1,0.2] def toqueniza(s): """Decodifica string utilizando utf-8, retornando uma lista de tokens em unicode. @@ -52,6 +51,9 @@ def etiquetaSentenca(s): """ etiquetador = carrega("AeliusHunPos") anotada = AnotaCorpus.anota_sentencas([s],etiquetador,"hunpos")[0] + while (len(anotada) is 0): + time.sleep(random.choice(sleep_times)) + anotada = AnotaCorpus.anota_sentencas([s],etiquetador,"hunpos")[0] anotada[0] = (anotada[0][0].lower(), anotada[0][1]) return anotada @@ -64,7 +66,7 @@ def geraEntradasLexicais(lista): # que não são aceitos pelo NLTK como símbolos não terminais c=re.sub(r"[-+]","_",e[1]) c=re.sub(r"\$","_S",c) - entradas.append("%s -> '%s'" % (c, removeAcento(e[0].lower()))) + entradas.append("%s -> '%s'" % (c, removeAcento(e[0]))) return entradas def corrigeAnotacao(lista): @@ -76,8 +78,6 @@ def corrigeAnotacao(lista): lista[i]=(lista[i][0],"VB-PP") i+=1 -# a função abaixo parece muito restritiva; talvez não seja necessário -# que o arquivo esteja no diretório nltk_data def encontraArquivo(): """Encontra arquivo na pasta vlibras-translate. """ @@ -119,31 +119,9 @@ def constroiAnalisador(s): cfg=nltk.CFG.fromstring(gramatica) return nltk.ChartParser(cfg) -def corrigeArvore(arvore): - lista_pos_arv = [] - for tupla in sentenca_anotada: - string_grep = adaptaAnotacao(tupla[1]) + " < " + tupla[0].lower() - node = tgrep_positions(arvore, string_grep) - if not node: - string_grep = adaptaAnotacao(tupla[1]) + " < " + removeAcento(tupla[0].lower()) - node = tgrep_positions(arvore, string_grep) - if node[0] in lista_pos_arv: - node.reverse() - lista_pos_arv.append(node[0]) - for i in range(0, len(sentenca_anotada)): - if arvore[lista_pos_arv[i]][0] != sentenca_anotada[i][0]: - arvore[lista_pos_arv[i]][0] = sentenca_anotada[i][0] - return arvore - def removeAcento(texto): return normalize('NFKD', texto.encode('utf-8').decode('utf-8')).encode('ascii', 'ignore') -def adaptaAnotacao(anotacao): - split = anotacao.split('_') - for i in range(0, len(split)): - split[i] = split[i].replace('-','_') - return "-".join(split) - def exibeArvores(arvores): """Função 'wrapper' para a função de exibição de árvores do NLTK""" nltk.draw.draw_trees(*arvores) @@ -151,4 +129,4 @@ def exibeArvores(arvores): def run(sentenca): tokens=toqueniza(sentenca) tree=analisaSentenca(tokens) - return corrigeArvore(tree) \ No newline at end of file + return tree \ No newline at end of file -- libgit2 0.21.2