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

如何将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()

关键说明

  1. 分组逻辑:通过groupby("data")将同一文本的所有实体标注聚合到一起
  2. 实体整理:对每个文本对应的所有实体,提取start(字符起始索引)、end(字符结束索引)、label(实体类型),组成spaCy识别的实体元组
  3. 格式适配:最终生成的列表结构完全符合spaCy v2.x的训练数据要求,可直接用于模型训练

注意事项

  • 确保CSV中的start和end是字符级的索引,与文本内容的字符位置严格对应,否则spaCy无法正确定位实体
  • 如果原始数据中的位置是基于词索引或其他规则,需要先转换为字符索引再进行处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:25:23