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

如何将印度姓名数据集转换为Spacy NER要求的训练数据格式?

把印度姓名CSV转换成Spacy NER训练数据格式的方法

我来帮你拆解这个转换过程,其实很简单,分几步就能搞定:

核心思路

Spacy要求的TRAIN_DATA是一个列表,每个元素是**(文本字符串, 包含实体信息的字典)**。对于你的姓名数据集来说,每个文本就是单独的姓名,实体就是整个姓名的起止索引+PERSON标签。


方法1:用Python内置csv模块(无需额外安装依赖)

如果不想装第三方库,用Python自带的csv模块就能搞定:

import csv

TRAIN_DATA = []

# 替换成你的CSV文件路径
with open('Indian-Female-Names.csv', 'r', encoding='utf-8') as file:
    # 用DictReader读取,方便通过列名获取姓名
    csv_reader = csv.DictReader(file)
    for row in csv_reader:
        # 取出姓名并清理前后多余空格
        name = row['Name'].strip()
        # 跳过空的姓名行(避免无效数据)
        if not name:
            continue
        # 生成实体元组:(起始索引, 结束索引, 标签)
        entity_tuple = (0, len(name), 'PERSON')
        # 组装成Spacy需要的格式并加入训练列表
        TRAIN_DATA.append((name, {'entities': [entity_tuple]}))

# 可以打印前5条验证格式是否正确
print(TRAIN_DATA[:5])

方法2:用pandas(更简洁高效)

如果你的数据集比较大,用pandas处理会更方便,先确保已经安装pandas(pip install pandas):

import pandas as pd

# 读取CSV文件
df = pd.read_csv('Indian-Female-Names.csv')

# 清理姓名列的空格+过滤空值
df['Name'] = df['Name'].str.strip()
df = df.dropna(subset=['Name'])

# 用列表推导式快速生成训练数据
TRAIN_DATA = [
    (name, {'entities': [(0, len(name), 'PERSON')]})
    for name in df['Name'].tolist()
]

# 验证结果
print(TRAIN_DATA[:5])

注意事项

  • 确认CSV的列名:如果你的CSV里姓名列不是Name,要把代码里的row['Name']或df['Name']替换成实际的列名(比如'Indian Female Names'之类的)。
  • 处理特殊情况:如果姓名包含中间空格(比如'Priya Mehta'),代码里的(0, len(name), 'PERSON')依然有效,因为Spacy会把整个字符串识别为一个PERSON实体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:35:19