4

コロンの位置でチャンクを分割しようとしています : NLTK ですが、それは特殊なケースのようです。通常の正規表現では[:]、問題なく配置できます。

しかし、NLTK では何をしても、regexParser では気に入りません。

from nltk import  RegexpParser

grammar = r"""
  NP: {<DT|PP\$>?<JJ>*<NN>|<NNP.*><\:><VBD>}   # chunk (Rapunzel + : + let) together
    {<NNP>+}                
    <.*>}{<VBD.*>           


"""
cp = RegexpParser(grammar)
sentence = [("Rapunzel", "NNP"), (":",":"), ("let", "VBD"), ("down", "RP"), ("her", "PP$"), ("long", "JJ"), ("golden", "JJ"), ("hair", "NN")]

print(cp.parse(sentence))

上記のコードは、コロンをブロックとして選択するチャンクを作成します。<.*>}{<\VBD.*> 行は、let の前の位置で (Rapunzel+:+let) で構成されるチャンクを分割します。その分割を取り出してコロンに置き換えると、エラーが発生します

from nltk import  RegexpParser

grammar = r"""
  NP: {<DT|PP\$>?<JJ>*<NN>|<NNP.*><\:><VBD>}   # chunk (Rapunzel + : + let) together
    {<NNP>+}                
    <.*>}{<\:.*>           


"""
cp = RegexpParser(grammar)
sentence = [("Rapunzel", "NNP"), (":",":"), ("let", "VBD"), ("down", "RP"), ("her", "PP$"), ("long", "JJ"), ("golden", "JJ"), ("hair", "NN")]

print(cp.parse(sentence))

ValueError: 不正なチャンク パターン: >

誰でもこれを行う方法を説明できますか?私はGoogleを試し、ドキュメントを調べましたが、賢明ではありません. この投稿チャンクを問題なく処理できますが、その理由または方法を知ることができました。:-)

4

1 に答える 1