如何将CSV数据转换为spaCy v2.0格式并按data列分组
将CSV数据转换为spaCy v2.0格式的解决方案
需求说明
现有CSV数据为逐行存储的实体标注(每行对应文本中的一个实体),需要按data列(文本内容)分组,转换为spaCy v2.0要求的训练数据格式:每个条目为(文本内容, {"entities": [(起始位置, 结束位置, 实体类型)]})。
原代码问题
你之前的代码直接将groupby对象转为DataFrame,没有处理分组内的实体标注聚合,无法生成spaCy所需的结构化数据。
正确转换代码
import pandas as pd import json def convert_to_spacy_format(): # 读取原始CSV数据 df = pd.read_csv("Training_data_sample.csv") # 按文本内容分组 text_groups = df.groupby("data") spacy_training_data = [] # 遍历每个文本分组,整理实体标注 for text_content, label_group in text_groups: entities = [] for _, row in label_group.iterrows(): # 提取实体的起始位置、结束位置和类型 entities.append((row["start"], row["end"], row["label"])) # 组装为spaCy要求的格式 spacy_training_data.append((text_content, {"entities": entities})) # 将结果保存为JSON文件(方便后续训练使用) with open("spacy_training_data.json", "w", encoding="utf-8") as f: json.dump(spacy_training_data, f, ensure_ascii=False, indent=2) return spacy_training_data # 执行转换 convert_to_spacy_format()
关键说明
- 分组逻辑:通过
groupby("data")将同一文本的所有实体标注聚合到一起 - 实体整理:对每个文本对应的所有实体,提取
start(字符起始索引)、end(字符结束索引)、label(实体类型),组成spaCy识别的实体元组 - 格式适配:最终生成的列表结构完全符合spaCy v2.x的训练数据要求,可直接用于模型训练
注意事项
- 确保CSV中的
start和end是字符级的索引,与文本内容的字符位置严格对应,否则spaCy无法正确定位实体 - 如果原始数据中的位置是基于词索引或其他规则,需要先转换为字符索引再进行处理
内容的提问来源于stack exchange,提问作者Sourabh Raj
相关产品推荐
相关产品推荐

