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

如何在DataFrame中对带Tag的实体执行省音分词并保留关联标签

法语省音场景下带标注DataFrame分词实现思路

核心规则梳理

首先明确两个核心规则:

  • 分词规则:匹配所有以d'/l'/j'/m'/n'/s'/t'开头的省音结构,拆分为「省音前缀+剩余内容」两个独立token
  • 标签继承规则:完全匹配你给出的输出示例设计
    • 原标签为O:拆分后的两个token均继承O
    • 原标签为I-XXX(实体非首词标注):拆分后的两个token均继承原I-XXX标签
    • 原标签为B-XXX(实体首词标注):拆分后的省音前缀标O,剩余内容保留原B-XXX标签

实现步骤

  1. 编写正则匹配省音结构,用r'^([djlmnst]\')(.+)$'即可覆盖所有法语常见省音场景,忽略大小写适配全大写场景(比如L'开头的内容)
  2. 逐行遍历原DataFrame,对每个Mention做匹配判断:
    • 未匹配到省音结构:直接保留原行
    • 匹配到省音结构:按上述标签规则拆分为两行数据
  3. 将所有拆分后的行拼接为新的DataFrame,保留原有Sentence编号和行顺序即可得到目标结果。

参考代码(Python + Pandas)

import pandas as pd
import re

# 省音匹配正则
ELISION_REG = re.compile(r'^([djlmnst]\')(.+)$', re.IGNORECASE)

def split_elision_token(row):
    mention = str(row["Mention"]).strip()
    match_res = ELISION_REG.match(mention)
    # 无需拆分直接返回
    if not match_res:
        return [row.to_dict()]
    prefix, suffix = match_res.groups()
    origin_tag = row["Tag"]
    # 生成拆分后的两行数据
    if origin_tag.startswith("B-"):
        prefix_tag = "O"
        suffix_tag = origin_tag
    else:
        prefix_tag = origin_tag
        suffix_tag = origin_tag
    return [
        {"Sentence": row["Sentence"], "Mention": prefix, "Tag": prefix_tag},
        {"Sentence": row["Sentence"], "Mention": suffix, "Tag": suffix_tag}
    ]

# 批量处理
processed_list = []
for _, raw_row in original_df.iterrows():
    processed_list.extend(split_elision_token(raw_row))
result_df = pd.DataFrame(processed_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:36:05