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

如何在Spacy中拆分doc phrase并提取Text标签后的指定文本

问题原因

你现有代码的错误点有两个:

  1. 正则匹配的目标对象错误:你将原始输入文本text传入了re.findall,但你需要匹配的是doc._.phrases返回的Phrase对象的字符串表示,自然匹配不到内容返回空列表
  2. 正则规则大小写不匹配:你输出的示例是小写开头的phrase(,但正则写的是大写开头的Phrase(,规则和目标字符串不匹配

最优实现方案

不需要用正则解析字符串,spaCy textrank返回的Phrase对象本身自带text属性,直接取值拼接即可,代码如下:

import spacy

en_nlp = spacy.load("en_core_web_sm")
en_nlp.add_pipe("textrank", config={ "stopwords": { "word": ["NOUN"] } })
doc = en_nlp(text)

# 直接取前5个短语的text属性,用|拼接为单行字符串
result = " | ".join([phrase.text for phrase in doc._.phrases[:5]])
print(result)

这种方式比解析字符串更稳定,也不会出现末尾多余分隔符的问题。

若一定要用正则解析的兼容方案

如果特殊场景需要从Phrase的字符串输出里提取内容,可以用以下代码:

import re
import spacy

en_nlp = spacy.load("en_core_web_sm")
en_nlp.add_pipe("textrank", config={ "stopwords": { "word": ["NOUN"] } })
doc = en_nlp(text)

res = []
for phrase in doc._.phrases[:5]:
    match = re.search(r"phrase\(Text:'([^']+)'\)", str(phrase))
    if match:
        res.append(match.group(1))
result = " | ".join(res)
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:54:05