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

如何将BBC数据集.mtx文件传入Spacy与Neuralcoref共指消解处理流程?

解决BBC数据集.mtx文件用于共指消解的问题

问题核心

你读取的bbc.mtx是词袋/TF-IDF数值矩阵,存储的是文档-词的频率映射关系,并非原始新闻文本内容。spaCy和Neuralcoref的处理对象是自然语言文本,直接传入矩阵必然无法得到有效结果。

正确处理流程

1. 获取BBC数据集的原始文本

首先需要下载数据集的原始文本文件(而非.mtx这类预处理后的矩阵文件)。该数据集包含5个新闻分类,每个分类对应独立文件夹,内部是单篇新闻的文本文件。

2. 批量读取原始文本

遍历文件夹读取所有新闻的原始内容:

import os

# 假设原始文本存储在data/bbc目录下
text_dir = "data/bbc"
documents = []

# 遍历分类文件夹
for category in os.listdir(text_dir):
    category_path = os.path.join(text_dir, category)
    if os.path.isdir(category_path):
        # 读取文件夹内所有文本文件
        for filename in os.listdir(category_path):
            file_path = os.path.join(category_path, filename)
            with open(file_path, 'r', encoding='utf-8') as f:
                raw_text = f.read()
                documents.append(raw_text)

3. 用spaCy+Neuralcoref处理文本

拿到原始文本后,即可按照共指消解流程处理单篇或多篇文本:

import spacy
import neuralcoref

# 加载spaCy英文模型
nlp = spacy.load("en_core_web_sm")
# 把Neuralcoref加入处理管道
neuralcoref.add_to_pipe(nlp)

# 处理单篇示例文本
sample_doc = nlp(documents[0])

# 查看共指结果
print(sample_doc._.has_coref)
for cluster in sample_doc._.coref_clusters:
    print(f"共指簇: {cluster.main} -> {[mention.text for mention in cluster.mentions]}")

关于.mtx文件的补充说明

若需要理解.mtx矩阵对应的内容,可配合数据集内另外两个文件:

  • bbc.terms:每行对应一个词,与矩阵的列索引一一对应
  • bbc.docs:每行对应一个文档标识,与矩阵的行索引一一对应

读取示例:

# 读取词列表
with open("data/bbc.terms", 'r', encoding='utf-8') as f:
    terms = [line.strip() for line in f.readlines()]

# 读取文档标识列表
with open("data/bbc.docs", 'r', encoding='utf-8') as f:
    doc_ids = [line.strip() for line in f.readlines()]

但这些仅用于矩阵内容映射,对共指消解任务而言,核心依赖还是原始文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:50:33