如何从DataFrame的text字段提取Item 5.02后的指定文本?
优化后的解决方案
以下是满足需求的代码实现,能完整提取Item 5.02之后到第一个终止术语之前的所有段落内容:
def extractPassage(text): # 按段落分割文本(保留原代码的段落分隔逻辑) paragraphs = text.split("\n\n") # 定义触发提取终止的术语集合 stop_terms = {"Item 8.01", "Item 9.01", "SIGNATURES"} start_idx = None # 定位"Item 5.02"所在的段落 for idx, para in enumerate(paragraphs): if para.startswith("Item 5.02"): start_idx = idx break # 处理未找到起始标记的情况 if start_idx is None: return "" # 若需严格校验起始标记存在性,可取消下一行注释 # raise Exception("No paragraph found starting with 'Item 5.02'") # 收集中间段落直到遇到第一个终止术语 extracted_paragraphs = [] for para in paragraphs[start_idx + 1 :]: # 检查当前段落是否以任一终止词开头 if any(para.startswith(term) for term in stop_terms): break extracted_paragraphs.append(para) # 将收集的段落重新拼接为完整文本 return "\n\n".join(extracted_paragraphs) pd_00['important_text'] = pd_00['text'].apply(extractPassage)
核心优化说明
- 全段落覆盖:不再仅提取
Item 5.02后的第一段,而是持续收集段落直到遇到第一个终止术语,满足多段内容的提取需求 - 多终止词支持:通过集合存储所有终止术语,用
any()高效判断终止条件,覆盖所有指定的触发词 - 边界场景处理:增加了未找到
Item 5.02时的返回逻辑,可根据业务需求选择返回空字符串或抛出异常 - 兼容性:保留原代码的
\n\n段落分割逻辑,确保与原有文本格式匹配
内容的提问来源于stack exchange,提问作者user19745533
相关产品推荐
相关产品推荐

