Regex 在NLTK中分块冒号

Regex 在NLTK中分块冒号,regex,nltk,text-chunking,Regex,Nltk,Text Chunking,我试图在冒号位置分割一个块:在NLTK中,但这似乎是一个特例。在普通正则表达式中,我可以把它放到[:]中,没有问题 但是在NLTK中,无论我做什么,它都不喜欢在regexParser中 from nltk import RegexpParser grammar = r""" NP: {<DT|PP\$>?<JJ>*<NN>|<NNP.*><\:><VBD>} # chunk (Rapunzel + : + let

我试图在冒号位置分割一个块:在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))
来自nltk导入RegexpParser
语法=r“”
NP:{?*|}#chunk(莴苣+:+let)在一起
{+}                
}{           
"""
cp=RegexpParser(语法)
句子=[(“长发公主”、“NNP”)、(“金色”、“JJ”)、(“头发”、“NN”)、(“绒毛”、“RP”)、(“她的”、“PP$”)、(“长发”、“JJ”)、(“金色”、“JJ”)、(“头发”、“NN”)]
打印(cp.parse(句子))
上面的代码确实构成了一个将冒号作为块拾取的块。 }{line在let之前的位置拆分由(rapanzel+:+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))
来自nltk导入RegexpParser
语法=r“”
NP:{?*|}#chunk(莴苣+:+let)在一起
{+}                
}{           
"""
cp=RegexpParser(语法)
句子=[(“长发公主”、“NNP”)、(“金色”、“JJ”)、(“头发”、“NN”)、(“绒毛”、“RP”)、(“她的”、“PP$”)、(“长发”、“JJ”)、(“金色”、“JJ”)、(“头发”、“NN”)]
打印(cp.parse(句子))
ValueError:非法块模式:>


有人能解释一下怎么做吗?我试过谷歌并浏览了文档,但我一点也不知道。我可以处理这个帖子块没有问题,但我只是知道为什么或者如何处理。:-

NLTK似乎将每个块定义的第二个冒号作为开始新块的指标

对于那些遇到相同错误的人,一个解决方法是将多个正则表达式分解为多个同名的块。

假设我们有以下语法:

grammar = r"""
  SOME_CHUNK: 
    {<NN><:>}
    {<JJ><:>}          
"""
grammar=r”“”
有些人:
{}
{}          
"""
要解决此问题,请将其更改为:

grammar = r"""
  SOME_CHUNK: {<NN><:>}
  SOME_CHUNK: {<JJ><:>}          
"""
grammar=r”“”
某些_块:{}
某些_块:{}
"""
不幸的是,如果将chinking正则表达式与另一个冒号一起使用,这将不起作用,如您的示例中所示


为了帮助您解决您的具体问题,请发布一个您正试图解析的确切句子。从您的示例中很难看出您为什么需要
|
部分。

好问题!为了让人们帮助您,请给出一个简短(但完整)的代码示例,展示如何使用RegexpParser并获得错误的一个简单示例。