【发布时间】:2017-02-24 19:43:40
【问题描述】:
我试图在冒号的位置拆分一个块:在 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))
上面的代码确实使一个块将冒号作为一个块。 <.>}{ 行在 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:非法块模式:>
谁能解释一下如何做到这一点,我尝试了谷歌并浏览了文档,但我并不聪明。我可以处理这个帖子块没问题,但我只是知道为什么或如何。 :-)
【问题讨论】:
-
好问题!为了让人们帮助您,请提供一个简短(但完整)的代码示例,展示您如何使用 RegexpParser 并获得错误的简单示例。
标签: regex nltk text-chunking