如何将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
相关产品推荐
相关产品推荐

