【问题标题】:Chunk a colon in NLTK在 NLTK 中分块冒号
【发布时间】: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


【解决方案1】:

似乎 NLTK 将每个块定义的第二个冒号视为开始新块的指示符。

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

假设我们有以下语法:

grammar = r"""
  SOME_CHUNK: 
    {<NN><:>}
    {<JJ><:>}          
"""

要解决此问题,请将其更改为:

grammar = r"""
  SOME_CHUNK: {<NN><:>}
  SOME_CHUNK: {<JJ><:>}          
"""

不幸的是,如果一个人正在使用带有另一个冒号的 chinking 正则表达式,这将不起作用,就像在您的示例中一样。

为了帮助您解决您的具体问题,请发布您尝试解析的确切句子。从您的示例中,很难说出您为什么需要 |&lt;NNP.*&gt;&lt;\:&gt;&lt;VBD&gt; 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-27
    • 2013-01-19
    • 2012-04-21
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多