You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NLTK自定义语法下RecursiveDescentParser无输出及recursion error问题

故障原因排查结论

是自定义CFG语法定义错误,和递归下降解析器本身无关,核心问题是现有语法规则完全无法匹配输入句子的完整结构,具体问题如下:

  • 根节点S的产生式规则错误:现有规则S -> NP | VP只能匹配单个名词短语或单个动词短语,无法匹配你输入的「主语(NP)+ 谓语(VP)」结构的完整6词句子。现有规则下S能匹配的最长序列只有3个词(Det Adj N结构的NP),远短于输入的6个词。
  • 动词短语VP的产生式规则错误:现有规则VP -> V P只能匹配2个词的动词+介词结构,而你输入中谓语部分是attracted by the touching story共5个词,缺少后续宾语NP的匹配规则。

修正后的可运行代码示例

import nltk
sent = ["I'm", 'attracted', 'by', 'the', 'touching', 'story']
grammar = nltk.CFG.fromstring("""
    # 修正S的产生式,支持NP+VP的完整主谓句
    S -> NP VP
    NP -> "I'm" | Det Adj N
    # 修正VP的产生式,支持V+P+宾语NP的结构
    VP -> V P NP
   
    V -> 'attracted'
    P -> 'by'
    Det -> 'the'
    Adj -> 'touching'
    N -> 'story'
   """)

rd_parser = nltk.RecursiveDescentParser(grammar)
for tree in rd_parser.parse(sent):
    print(tree)

运行后输出结果为:

(S (NP I'm) (VP (V attracted) (P by) (NP (Det the) (Adj touching) (N story))))

内容的提问来源于stack exchange,提问作者rodericktung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:06:01