Nltk: chomsky_normal_form() pour les grammaires

Créé le 13 nov. 2017  ·  4Commentaires  ·  Source: nltk/nltk

nltk.tree.Tree a une fonction chomsky_normal_form() , mais pas les grammaires. Puisque le CNF est une forme de la grammaire , il devrait aussi le faire.

enhancement nice idea parsing

Tous les 4 commentaires

Le chomsky_normal_form() dans NLTK est une fonction de binarisation arborescente. Je pense que cela ne peut pas être directement appliqué aux grammaires, voir https://github.com/nltk/nltk/blob/develop/nltk/treetransforms.py

La transformation de la grammaire en CNF est assez complexe et n'a pas encore été implémentée. Ce serait bien s'il y avait une tentative, mais ce n'est peut-être pas trivial.

Si quelqu'un est intéressé à contribuer, un bon algorithme pour commencer est

  • Lange et Leiß (2009). "Au CNF ou pas au CNF ? Une version efficace mais présentable de l'algorithme CYK"

Je cherchais exactement ça et je suis tombé ici,
J'ai créé cette fonctionnalité en exploitant les composants internes de nltk pour l'un de mes projets (et un analyseur CKY en plus, bien que sans gestion de null, mais je pense que c'est quand même utile pour beaucoup de grammaires, par exemple la grammaire de test ATIS ), serait heureux d'envoyer un PR, je voulais juste confirmer si ce problème persiste et est disponible pour travailler (surtout après les derniers commentaires dans https://github.com/nltk/nltk/issues/1722)

De plus, s'il n'y a pas d'analyseur CYK comme mentionné dans l'autre numéro, je serais heureux d'envoyer un PR pour cela également

@virresh @alvations Désolé d'avoir laissé le #1722 devenir périmé. La vie s'est mise en travers du chemin.

@virresh Si vous souhaitez vous

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

Je me souviens qu'il réorganisait les étapes de l'algorithme habituel, mais je me souviens aussi m'être convaincu qu'elles étaient équivalentes. Procéder avec prudence.

Je vais clore l'autre sujet.

Il y a un problème avec les CNF pour les CFG ; ils retournent des productions dupliquées. Vous pouvez tester cela en :

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()))))

la grammaire a des productions de 20344 , qui, une fois converties en un ensemble, donnent des productions de 12396 .

Cette page vous a été utile?
0 / 5 - 0 notes