gpt4 book ai didi

regex - 在 NLTK 中分块冒号

转载 作者:行者123 更新时间:2023-12-01 06:05:35 25 4
gpt4 key购买 nike

我试图在 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: Illegal chunk pattern: >



谁能解释一下如何做到这一点,我试过谷歌并浏览文档,但我并不聪明。我可以处理这个帖子块没问题,但我只是知道为什么或如何。 :-)

最佳答案

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

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

假设我们有以下语法:

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

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

不幸的是,如果有人将 chinking regex 与另一个冒号一起使用,这将不起作用,就像在您的示例中一样。

为了帮助您解决您的具体问题,请发布您正在尝试解析的确切句子。从你的例子中很难看出你为什么需要 |<NNP.*><\:><VBD>部分。

关于regex - 在 NLTK 中分块冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40059022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com