如何通用化处理带标注的字典数据集,实现文本与标签对应输出?
批量处理带标注区间的文本数据集
需求说明
你有一个由字典构成的数据集,每个字典包含id、带转义字符的text,以及标注区间列表label(每个元素为[起始索引, 结束索引, 标签名])。需要将每条文本按标注区间分割,在对应文本片段后添加标签,输出指定格式的结果。
解决方案
下面是通用的批量处理代码,包含单条数据处理函数和数据集批量处理函数,同时处理文本中的HTML转义字符(比如"):
import html def process_single_item(item): # 解码HTML转义字符,还原正常文本 raw_text = html.unescape(item['text']) processed_lines = [] for start_idx, end_idx, label in item['label']: # 截取标注区间内的文本并去除首尾空格 text_segment = raw_text[start_idx:end_idx].strip() # 按示例格式调整标点:将原片段末尾的句号替换为逗号,添加标签后再加句号 if text_segment.endswith('.'): formatted_line = f"{text_segment[:-1]} , {label}." else: formatted_line = f"{text_segment}, {label}" processed_lines.append(formatted_line) return processed_lines def batch_process_dataset(dataset): all_outputs = [] for entry in dataset: # 处理单条数据并收集结果 entry_outputs = process_single_item(entry) all_outputs.extend(entry_outputs) # 每条数据的结果之间加空行分隔(可选,不需要可删除) all_outputs.append("") # 移除最后多余的空行 return [line for line in all_outputs if line] # 测试示例 if __name__ == "__main__": # 模拟你的数据集 sample_dataset = [ { 'id': 2, 'text': '"The hotel has many restaurants to enjoy a meal. My husband and I went to the Japanese restaurant and we only found sushi. Considering that it is an international hotel, they should have a larger variety of options.', 'label': [[0, 46, 'general services'], [47, 214, 'japanese food']] }, { 'id': 3, 'text': '"The gym is open 24 hours. The equipment is brand new and well-maintained.', 'label': [[0, 22, 'fitness services'], [23, 65, 'fitness equipment']] } ] # 执行批量处理并打印结果 final_results = batch_process_dataset(sample_dataset) for line in final_results: print(line)
关键说明
- 转义字符处理:使用
html.unescape将文本中的"等HTML转义字符还原为正常字符,避免输出异常。如果你的文本没有转义字符,可以直接删除这一行。 - 格式调整:针对示例中“原文本句号→逗号+标签+句号”的格式要求,做了针对性的标点处理,确保输出和示例一致。
- 批量处理:
batch_process_dataset函数遍历整个数据集,自动处理所有条目,无需手动指定索引。
内容的提问来源于stack exchange,提问作者bavarianbear
相关产品推荐
相关产品推荐

