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

如何从spaCy依存匹配器提取的词元中获取对应完整句子?

解决spaCy获取匹配模式对应完整句子的报错问题

错误原因分析

  1. 无效的内层循环:pattern[1:2]返回的是单个spaCy Token对象(比如第一个元组里的rabbits),你试图在循环中把它拆成subject和verb,但单个Token不是可迭代的二元结构,直接触发TypeError。而且你已经在第23行完成了元组解包,完全不需要这个内层循环。
  2. 错误的sent属性调用:(subject.text, verb.text)是由字符串组成的元组,不存在.sent属性。spaCy的sent属性属于Token对象,而非字符串或元组。

修正后的代码

comp_sentences = []
dep_patterns = [('nsubj_verb', rabbits, jumping),
                ('nsubj_verb', grass, getting),
                ('nsubj_verb', they, come)]

for pattern in dep_patterns:
    pattern_name, subject, verb = pattern
    # 主语和动词属于同一句子,取任意一个Token的sent属性即可
    matched_sentence = subject.sent
    # 若需存储句子文本,用matched_sentence.text;若需保留Sentence对象,直接append(matched_sentence)
    comp_sentences.append(matched_sentence.text)

# 输出验证结果
for sent in comp_sentences:
    print(sent)

代码说明

  • 移除了多余的内层循环,直接使用已解包的subject和verb Token对象。
  • 利用spaCy Token的.sent属性直接获取所属句子,由于匹配到的主语和动词必然属于同一句子,取其中一个的sent属性即可。
  • 可根据需求选择存储句子的文本字符串(.text)或原始Sentence对象(方便后续NLP处理)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:15:39