如何在DataFrame中对带Tag的实体执行省音分词并保留关联标签
法语省音场景下带标注DataFrame分词实现思路
核心规则梳理
首先明确两个核心规则:
- 分词规则:匹配所有以
d'/l'/j'/m'/n'/s'/t'开头的省音结构,拆分为「省音前缀+剩余内容」两个独立token - 标签继承规则:完全匹配你给出的输出示例设计
- 原标签为
O:拆分后的两个token均继承O - 原标签为
I-XXX(实体非首词标注):拆分后的两个token均继承原I-XXX标签 - 原标签为
B-XXX(实体首词标注):拆分后的省音前缀标O,剩余内容保留原B-XXX标签
- 原标签为
实现步骤
- 编写正则匹配省音结构,用
r'^([djlmnst]\')(.+)$'即可覆盖所有法语常见省音场景,忽略大小写适配全大写场景(比如L'开头的内容) - 逐行遍历原DataFrame,对每个Mention做匹配判断:
- 未匹配到省音结构:直接保留原行
- 匹配到省音结构:按上述标签规则拆分为两行数据
- 将所有拆分后的行拼接为新的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
相关产品推荐
相关产品推荐

