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

如何在pandas DataFrame中实现基于词位置的自定义NER实体标注

自定义NER标注实现方案

实现思路

  • 首先确认位置索引规则:题目给出的in、tar列存储的是1-based的单词位置,即第一个单词对应位置1,处理时需要转换为Python列表兼容的0-based索引(位置值减1)
  • 逐行处理文本:先按空格拆分文本为单词列表,再根据标注位置给对应单词包裹标签,最后重新拼接为标注后的文本
  • 避免位置冲突:默认同一单词不会同时属于in和tar实体,若存在冲突可自行调整优先级规则

完整实现代码

import pandas as pd

# 构造样例DataFrame,可替换为你自己的数据集
df = pd.DataFrame({
    'text': [
        'This is an example text that I use in order to demonstrate',
        'Discussion: We are examining the possibility of the project'
    ],
    'in': [[2], [3]],
    'tar': [[6], [6,7]]
})

# 定义标注处理函数
def annotate_text(row):
    # 拆分文本为单词列表,自动合并连续空白符,保留原单词附带的标点
    words = row['text'].split()
    # 处理IN类实体标注
    for pos in row['in']:
        idx = pos - 1
        words[idx] = f'<IN>{words[idx]}</IN>'
    # 处理TAR类实体标注
    for pos in row['tar']:
        idx = pos - 1
        words[idx] = f'<TAR>{words[idx]}</TAR>'
    # 拼接回完整字符串
    return ' '.join(words)

# 应用函数生成标注结果列
df['annotated_text'] = df.apply(annotate_text, axis=1)

# 查看输出结果
print(df['annotated_text'].tolist())

结果验证

运行代码后,第二行文本的标注结果和题目要求完全一致:

Discussion: We <IN>are</IN> examining the <TAR>possibility</TAR> <TAR>of</TAR> the project

注意事项

  • 如果需要把连续位置的同类型实体包裹在同一个标签内,可修改标注逻辑,对连续的位置值做合并处理
  • 若存在实体位置重叠的场景,可根据业务需求调整标签优先级,比如优先保留in标签或者tar标签
  • 如果文本中存在换行、制表符等特殊空白符,可先使用正则替换为普通空格后再拆分处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:06:05