Analise Ascendente – Bottom-Up

0.5 – Processamento de Linguagem Natural – Simbolico
0.5.2 – Analise Sintatica – Parsing
0.5.2.1 – Analise Descendente – Top-Down
0.5.2.2 – Analise Ascendente – Bottom-Up
LEGENDA
Principal
Ramo
Metodo
Problemas
Modelo
Arquitetura

construindo das palavras para a frase

A análise ascendente (bottom-up) parte das palavras concretas e combina-as em constituintes maiores. Diferente da análise descendente, ela não parte de hipóteses sobre a estrutura da frase. O algoritmo começa com a sequência de palavras e aplica regras no sentido inverso. Ele reduz partes da sequência quando encontra um padrão que corresponde ao lado direito de uma regra. Por exemplo, ao ver “o” e “cachorro”, pode reduzi-los a um sintagma nominal (NP). Esse processo continua até que toda a sequência se reduza ao símbolo inicial S. Essa abordagem é natural para reconhecimento de padrões ascendentes.

funcionamento do algoritmo shift-reduce

O algoritmo shift-reduce é uma implementação clássica da análise ascendente para linguagens. Ele mantém uma pilha onde empilha (shift) palavras conforme as lê da entrada. Quando o topo da pilha corresponde ao lado direito de uma regra, ele reduz (reduce). A redução substitui esses elementos pelo lado esquerdo da regra na pilha. Por exemplo, se a pilha termina com “artigo” e “substantivo”, aplica redução para “sintagma nominal”. O processo continua até que toda entrada seja consumida e a pilha contenha apenas S. Conflitos entre shift e reduce podem ocorrer em gramáticas ambíguas.

exemplo prático passo a passo

Considere a frase “o cachorro late” e uma gramática para análise ascendente. Começamos com a pilha vazia e lemos a primeira palavra “o”, classificada como Det (shift). Em seguida, lemos “cachorro” (N) e empilhamos. Agora, o topo Det N corresponde à regra NP → Det N, então reduzimos para NP. A pilha contém agora NP. Lemos “late” (V) e empilhamos. Com NP V no topo, verificamos se há regra VP → V (mas NP V não corresponde). A regra VP → V NP também não se aplica. Continuamos até encontrar S → NP VP, reduzindo NP VP para S.

algoritmo CYK e programação dinâmica

O algoritmo CYK (Cocke-Younger-Kasami) é um método ascendente baseado em programação dinâmica. Ele requer a gramática na forma normal de Chomsky, onde regras têm no máximo dois símbolos. O algoritmo preenche uma tabela triangular onde cada célula contém os não-terminais que geram uma substring. Por exemplo, a célula para as palavras i até j contém todos os constituintes possíveis para aquele trecho. A construção começa com substrings de tamanho 1 (palavras individuais) e avança para tamanhos maiores. No final, se o símbolo inicial está na célula que cobre toda a frase, a análise é bem-sucedida. O CYK é completo e encontra todas as análises possíveis.

vantagens e aplicações

A análise ascendente oferece vantagens importantes para certos tipos de gramática e aplicações. Ela lida naturalmente com gramáticas que possuem recursão à esquerda, sem modificações. Diferente da análise descendente, não sofre com loops infinitos causados por recursão à esquerda. Algoritmos como CYK garantem completude e encontram todas as análises possíveis de uma frase. O método shift-reduce é amplamente utilizado em compiladores para linguagens de programação. Para linguagens naturais, analisadores ascendentes são usados em combinação com modelos probabilísticos. Para iniciantes, compreender análise ascendente é entender uma perspectiva complementar à descendente. Ambas as abordagens revelam diferentes aspectos da estrutura linguística.

Deixe um comentário