如何循环合并同文本标注实体,生成SpaCy NER模型训练所需数据
问题分析
你现有代码的核心问题如下:
- 外层循环遍历逻辑错误,没有正确遍历所有唯一文本
- 实体列表没有按单条文本重置,会把所有文本的实体累计堆叠
list.append()方法返回值为None,直接将其赋值给entities会导致字段值错误- 内层循环每次都往训练集里追加条目,导致同一段文本重复出现多次,而非合并所有实体后仅添加一次
正确实现
推荐直接用pandas的groupby方法按文本分组,逻辑更简洁且不会出现索引错位问题:
import pandas as pd TRAIN = [] # 按Text字段分组,同一段文本的所有标注会聚合到同一个分组 for text, group in df.groupby("Text"): entities = [] # 遍历当前文本的所有标注行,整理为spaCy要求的实体格式 for _, row in group.iterrows(): entities.append([row["start"], row["end"], row["ent"]]) # 合并后加入训练集 TRAIN.append([text, {"entities": entities}]) print(TRAIN)
运行后输出的结果和你要求的格式完全一致。
内容的提问来源于stack exchange,提问作者user10256905
相关产品推荐
相关产品推荐

