非中文字符移除
更新时间:2026-09-14
简介
非中文字符移除算子,默认只保留中文汉字(一-龥),可通过开关额外保留英文字母、数字以及一组固定的标点白名单,其余字符全部删除。
功能描述
- 构造时按三个开关拼出否定字符类:基底
[^一-龥,keep_alphabet追加A-Za-z,keep_number追加0-9,keep_punc追加写死的标点白名单., ,-。%《*》/•、&&(—)(+):?!!“”· - 三个开关默认全 True;
keep_punc=False时 pattern 收成[^一-龥A-Za-z0-9],空格也一并删除 - 拼好的 pattern 保存在
self.pattern,以re.DOTALL预编译;逐行先search,命中才sub,未命中的行原样返回 - 输入 None 的行返回 None;单行异常记日志并返回 None,不中断整批
算子参数
输入
| 输入 | 含义 |
|---|---|
| texts | 文本字符串数组 |
输出
| 输出 | 含义 |
|---|---|
| result | 只保留中文(以及按开关保留的字母/数字/标点)后的文本(string),输入 None 返回 None |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| keep_alphabet | bool | True | 是否保留英文字母 A-Za-z |
| keep_number | bool | True | 是否保留数字 0-9 |
| keep_punc | bool | True | 是否保留白名单里那组中英文标点(含半角空格) |
注意事项
- 换行与 Tab 都不在白名单里,任何开关组合下都会被删除,多行文本会被压成一行:`'第一行
第二行'→'第一行第二行'`。
- 汉字范围只有基本区
一-龥,扩展区生僻字、日文假名、韩文等都会被删。 - 标点白名单是写死的一组,
;、【】、「」、[]都不在其中:'分号;括号【】'→'分号括号'。 keep_punc=True时白名单包含半角空格,英文分词能保住;关掉它会把英文词粘成一串。
调用示例
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_non_chinese_character import RemoveNonChineseCharacter
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 = {"texts": ["百舸 AIHC 算子 v0.5.3 ⚡ ok", "纯中文文本", None]}
19 ds = daft.from_pydict(samples)
20 ds = ds.with_column(
21 "keep_all",
22 aihc_udf(
23 RemoveNonChineseCharacter,
24 construct_args={},
25 num_cpus=1,
26 concurrency=1,
27 batch_size=4,
28 )(col("texts")),
29 )
30 ds = ds.with_column(
31 "chinese_only",
32 aihc_udf(
33 RemoveNonChineseCharacter,
34 construct_args={"keep_alphabet": False, "keep_number": False, "keep_punc": False},
35 num_cpus=1,
36 concurrency=1,
37 batch_size=4,
38 )(col("texts")),
39 )
40 ds.show()
评价此篇文章
