Nltk: 文法のchomsky_normal_form()

作成日 2017年11月13日  ·  4コメント  ·  ソース: nltk/nltk

nltk.tree.Treeにはchomsky_normal_form()関数がありますが、文法にはありません。 CNFは文法の一形態であるため、これも必要です。

enhancement nice idea parsing

全てのコメント4件

NLTKのchomsky_normal_form()は、ツリーの2値化関数です。 文法に直接適用することはできないと思います。https://github.com/nltk/nltk/blob/develop/nltk/treetransforms.pyを参照して

CNFへの文法変換はかなり複雑で、まだ実装されていません。 それを試みればいいのですが、些細なことではないかもしれません。

誰かが貢献することに興味があるなら、始めるための良いアルゴリズムは

  • LangeandLeiß(2009)。 「CNFにするかしないか?CYKアルゴリズムの効率的でありながら見栄えのするバージョン」

私はまさにこれを探していて、ここでつまずいた、
私は自分のプロジェクトの1つでnltk内部を利用してこの機能を作成しました(ヌル処理はありませんが、その上にあるCKYパーサーも同様ですが、ATISテスト文法などの多くの文法に役立つと思います)、PRを送信していただければ幸いです。この問題がまだ発生していて、作業できるかどうかを確認したいだけです(特に、https://github.com/nltk/nltk/issues/1722の最後のコメントの後)

また、他号に記載されているCYKパーサーがない場合は、PRもお送りします。

@virresh @ alvations #1722を古くしてすみません。 人生は邪魔になっています。

@virreshこれで

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

通常のアルゴリズムでステップを並べ替えたことを覚えていますが、それらが同等であると自分自身に納得させたことも覚えています。 注意して続行してください。

もう1つの問題を閉じます。

CFGのCNFには問題があります。 彼らは複製された作品を返しています。 これは次の方法でテストできます。

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

文法には20344プロダクションがあり、セットに変換すると12396プロダクションになります。

このページは役に立ちましたか?
0 / 5 - 0 評価