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

使用textacy批量提取引语及引语归属时遭遇类型错误的技术咨询

解决textacy批量处理多条文本提取引语的类型错误问题

你遇到的问题核心在于 textacy.make_spacy_doc() 函数并不接受列表类型的输入——它只能处理单个字符串、textacy.types.Record 对象或者已有的Spacy Doc 对象,这就是触发类型错误的原因。

要实现批量从多条记录中提取引语,我们可以通过两种方式来处理:

方案1:循环遍历单条处理

这是最直观的实现方式,逐个遍历每条文本记录,分别创建Spacy Doc并提取引语:

import textacy

data = [
    "\"Hello, nice to meet you,\" said world 1",
    "\"Hello, nice to meet you,\" said world 2",
]

all_quotes = []
for text in data:
    doc = textacy.make_spacy_doc(text, lang="en_core_web_sm")
    quotes = textacy.extract.triples.direct_quotations(doc)
    all_quotes.extend(list(quotes))

print(all_quotes)

执行后会输出两条引语结果:

[DQTriple(speaker=[world], cue=[said], content=""Hello, nice to meet you,""), DQTriple(speaker=[world], cue=[said], content=""Hello, nice to meet you,"")]

方案2:用Spacy批量处理提升效率

如果你的数据集规模较大,单条循环的效率会偏低。我们可以先加载Spacy模型,再用nlp.pipe()批量处理文本,利用Spacy的批量优化特性提升速度:

import textacy

# 先加载Spacy语言模型
nlp = textacy.load_spacy_lang("en_core_web_sm")
data = [
    "\"Hello, nice to meet you,\" said world 1",
    "\"Hello, nice to meet you,\" said world 2",
]

all_quotes = []
# 批量处理文本生成Doc对象
for doc in nlp.pipe(data):
    quotes = textacy.extract.triples.direct_quotations(doc)
    all_quotes.extend(list(quotes))

print(all_quotes)

这种方式的优势在于nlp.pipe()会批量处理文本,减少重复初始化的开销,处理大量数据时速度会快很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:13:10