使用textacy提取文本引语及说话人时输出异常与报错排查
问题根因
两段代码的核心错误均为API使用逻辑混淆:
- 初始代码错误将
Vectorizer.fit_transform()返回的稀疏文档词条矩阵赋值给doc变量,后续遍历该矩阵对象时未实际调用引语提取逻辑,仅得到未执行的生成器对象,无法输出结构化引语结果。 - 修改后的代码存在两个问题:一是
direct_quotations()方法仅接受单个spaCy格式的Doc对象作为入参,向量化输出的稀疏矩阵不属于合法入参类型,触发属性不存在报错;二是引语提取属于句法解析类任务,和Vectorizer实现的TF-IDF向量化功能完全无关,属于多余引入的组件。
可运行修正代码
import textacy from textacy import extract data = [ ("\"Hello, nice to meet you,\" said world 1", {"url": "example1.com", "date": "Jan 1"}), ("\"Hello, nice to meet you,\" said world 2", {"url": "example2.com", "date": "Jan 2"}), ] # 加载模型初始化语料库,移除无关的Vectorizer组件 corpus = textacy.Corpus("en_core_web_sm", data=data) # 遍历语料库内预解析完成的Doc对象,逐个提取直接引语 for doc in corpus: quotes = list(textacy.extract.triples.direct_quotations(doc)) print(quotes)
运行结果
[DQTriple(speaker=[world 1], cue=[said], content="Hello, nice to meet you,")] [DQTriple(speaker=[world 2], cue=[said], content="Hello, nice to meet you,")]
使用说明
- 调用
direct_quotations()时必须传入经过spaCy模型处理后的单个Doc对象,禁止传入语料库实例、向量化矩阵、生成器等其他类型对象。 - 引语提取依赖spaCy模型的词性标注、依存解析结果,运行前需确保已安装对应版本的
en_core_web_sm模型。
内容的提问来源于stack exchange,提问作者jedmund
相关产品推荐
相关产品推荐

