Python实现多文档NLP任务下句子索引连续计数不重置
多文档跨边界连续句子索引实现方案
核心实现逻辑
不需要改动你已经跑通的多文档整合流程,只需要在单文档处理环节加入累计偏移量计算,即可实现跨文档句子编号连续:
- 维护全局累计偏移变量
global_sentence_offset,初始值为0,记录所有已处理文档累计的句子总数量 - 逐文档读取时,先提取当前文档所有行的原始句子编号
- 对当前文档的所有索引,给句子部分统一加上全局偏移值,词部分保持原样
- 当前文档处理完成后,把当前文档的总句子数累加到全局偏移变量中,再处理下一个文档
可直接落地的代码
import pandas as pd import re # 全局状态初始化 global_sentence_offset = 0 # 跨文档累计的句子偏移量 all_docs_combined = [] # 存储所有处理完成的文档内容 # 替换为你实际的多文档路径列表 doc_file_list = ["doc1.tsv", "doc2.tsv", "doc3.tsv"] for doc_path in doc_file_list: # 读取单个制表符分隔文档 df = pd.read_csv(doc_path, sep="\t", encoding="utf-8") # 提取每行的原始索引组成:句编号、词编号(基于你已有的正则逻辑优化) index_pair_list = [] for raw_index in df["Sectionindex"]: match_res = re.search(r"(\d+)-(\d+)", raw_index) orig_sent_id = int(match_res.group(1)) orig_word_id = int(match_res.group(2)) index_pair_list.append((orig_sent_id, orig_word_id)) # 计算当前文档内的总句子数(取原始句编号最大值即可,文档内本身是连续计数的) doc_total_sent_count = max([pair[0] for pair in index_pair_list]) # 逐行生成调整后的连续索引 adjusted_indexes = [] for orig_sent, orig_word in index_pair_list: continuous_sent_id = global_sentence_offset + orig_sent adjusted_index = f"{continuous_sent_id}-{orig_word}" adjusted_indexes.append(adjusted_index) # 替换DataFrame里的原索引列 df["Sectionindex"] = adjusted_indexes # 更新全局偏移,准备处理下一个文档 global_sentence_offset += doc_total_sent_count # 把处理好的文档加入整合队列 all_docs_combined.append(df) # 最终生成全局整合的总DataFrame final_corpus_df = pd.concat(all_docs_combined, ignore_index=True)
效果校验
完全匹配需求场景:
- 若前一个文档处理完成后累计偏移为61(即前序最后一个句子编号为61),新文档内的原始索引为
1-1、1-2,调整后会生成62-1、62-2,和预期的跨文档连续序列完全一致 - 词编号完全保留原有值,不做强制连续调整,符合需求规则
- 对原有的正则匹配逻辑做了兼容性优化,避免匹配时抓到非数字字符的问题
特殊场景适配
如果遇到个别文档的原始句编号不是从1开始计数,只需要把偏移计算的逻辑稍作调整:用当前文档原始句编号的最小值做偏移基准即可,不需要改动整体流程。
内容的提问来源于stack exchange,提问作者Tim Säll
相关产品推荐
相关产品推荐

