使用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
相关产品推荐
相关产品推荐

