文档头部移除
更新时间:2026-09-14
简介
文档头部移除算子,删除 LaTeX 正文之前的 header(documentclass、宏包、itle 等 preamble),从第一个章节命令开始保留。
功能描述
- pattern 形如
^(.*?)(<章节命令>),替换成第 2 个捕获组,即把第一个章节命令之前的内容全部删掉、命令本身保留 - 识别的章节命令:
chapter、part、section、subsection、subsubsection,均支持*变体与可选的[短标题]参数 ^未开re.MULTILINE,只在字符串起点匹配,因此一篇文档只裁剪一次,后面的章节命令不受影响- 整篇找不到章节命令时:
drop_no_head=True返回空串""(不是 None),drop_no_head=False原样返回 - 输入 None 的行返回 None;单行异常记日志并返回 None,不中断整批
算子参数
输入
| 输入 | 含义 |
|---|---|
| texts | 文本字符串数组 |
输出
| 输出 | 含义 |
|---|---|
| result | 删除 header 后的文本(string);无 header 且 drop_no_head=True 时为空串,输入 None 返回 None |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| drop_no_head | bool | True | 整篇没有章节命令时是否把文本清空,默认 True |
注意事项
- pattern 在
paragraph与subparagraph两个分支之间没有|分隔,这一支实际要求paragraph{...}subparagraph{...}紧邻才命中,单独出现的paragraph不会被当作 header 边界。 drop_no_head默认 True,非 LaTeX 的普通文本会被整条清成空串。混排语料务必显式传False,否则会静默丢数据。- 章节命令必须带
{}参数才命中,裸写的section不算 header 边界。
调用示例
Python
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.text.remove_header import RemoveHeader
10
11if __name__ == "__main__":
12 if os.getenv("DAFT_RUNNER", "native") == "ray":
13 import ray
14 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
15 daft.set_runner_ray()
16 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
17
18samples = {
19 "texts": [
20 "\documentclass{article}
21\title{X}
22\section{Intro}
23body text",
24 "no latex header at all",
25 None,
26 ]
27 }
28 ds = daft.from_pydict(samples)
29 ds = ds.with_column(
30 "result",
31 aihc_udf(
32 RemoveHeader,
33 construct_args={"drop_no_head": True},
34 num_cpus=1,
35 concurrency=1,
36 batch_size=4,
37 )(col("texts")),
38 )
39 ds.show()
评价此篇文章
