Nltk: chomsky_normal_form () para gramáticas

Criado em 13 nov. 2017  ·  4Comentários  ·  Fonte: nltk/nltk

nltk.tree.Tree tem uma função chomsky_normal_form() , mas as gramáticas não. Visto que CNF é uma forma de gramática , deveria, também.

enhancement nice idea parsing

Todos 4 comentários

O chomsky_normal_form() em NLTK é uma função de binarização de árvore. Acho que não pode ser aplicado diretamente a gramáticas, consulte https://github.com/nltk/nltk/blob/develop/nltk/treetransforms.py

A transformação da gramática para CNF é bastante complexa e ainda não foi implementada. Seria bom se houvesse uma tentativa, mas pode não ser trivial.

Se alguém estiver interessado em contribuir, um bom algoritmo para começar é

  • Lange e Leiß (2009). "Para CNF ou não para CNF? Uma versão eficiente, mas apresentável do algoritmo CYK"

Eu estava procurando exatamente isso e tropecei aqui,
Eu criei essa funcionalidade explorando internos nltk para um de meus projetos (e um analisador CKY em cima dele também, embora sem manipulação de nulos, mas acredito que seja útil para muitas gramáticas de qualquer maneira, por exemplo, a gramática de teste ATIS ), ficaria feliz em enviar um PR, apenas gostaria de confirmar se este problema ainda se mantém e está disponível para trabalhar (especialmente após os últimos comentários em https://github.com/nltk/nltk/issues/1722)

Além disso, se não houver um analisador CYK conforme mencionado na outra edição, ficaria feliz em enviar um PR para isso também

@virresh @alvations Desculpe por deixar # 1722 ficar obsoleto. A vida atrapalhou.

@virresh Se você quiser dar uma de

https://github.com/aetilley/pcfg/blob/master/src/pcfg.py#L524

Lembro-me de reordenar as etapas no algoritmo usual, mas também me lembro de me convencer de que eram equivalentes. Prossiga com cuidado.

Vou encerrar o outro problema.

Há um problema com CNFs para CFGs; eles estão retornando produções duplicadas. Você pode testar isso:

import nltk
grammar = nltk.data.load("grammars/large_grammars/atis.cfg")
grammar = grammar.chomsky_normal_form()
print(len(grammar.productions()))
print(len(list(set(grammar.productions()))))

gramática tem 20344 produções, que quando convertida em um conjunto dá 12396 produções.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

libingnan54321 picture libingnan54321  ·  3Comentários

talbaumel picture talbaumel  ·  4Comentários

Zaazik picture Zaazik  ·  5Comentários

Chris00 picture Chris00  ·  3Comentários

vezeli picture vezeli  ·  3Comentários