我试图在冒号的位置拆分一个块:在 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:非法块模式:>
谁能解释如何做到这一点,我尝试了谷歌并浏览了文档,但我并不聪明。我可以处理这个帖子块没问题,但我只是知道为什么或如何。:-)