コロンの位置でチャンクを分割しようとしています : 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を試し、ドキュメントを調べましたが、賢明ではありません. この投稿チャンクを問題なく処理できますが、その理由または方法を知ることができました。:-)