IP 地址清理
更新时间:2026-09-14
简介
IP 地址清理算子,删除文本中的 IPv4 / IPv6 地址,用于语料脱敏与净化。默认正则同时覆盖 IPv4 与 IPv6 全写形式,默认替换串为空串(即直接删除)。
功能描述
- 默认 pattern 由两段组成:前半段匹配 IPv4 点分十进制(每段按
0-255限定),后半段匹配 IPv6 的 8 组全写形式([da-fA-F]{1,4}:){7}[da-fA-F]{1,4},命中即替换成repl - 支持自定义
pattern;正则在算子构造阶段编译,非法正则直接抛ValueError,不会拖到运行时才失败 - 兼容配置里常见的
r'...'/r"..."包裹写法,构造时自动剥掉外层的r前缀与引号 - 正则以
re.DOTALL预编译复用;逐行先search,命中才sub,未命中的行原样返回 - 输入为 None 的行返回 None;单行处理抛异常时记日志并返回 None,不中断整批,结束时打印处理行数与失败行数
算子参数
输入
| 输入 | 含义 |
|---|---|
| texts | 文本字符串数组 |
输出
| 输出 | 含义 |
|---|---|
| result | 删除 IP 地址后的文本(string),输入 None 返回 None |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| pattern | str | "" | 自定义正则;空串表示使用内置的 IPv4+IPv6 默认 pattern。支持 r'...' 包裹写法 |
| repl | str | "" | 替换串,默认空串(即删除) |
注意事项
- 默认 IPv6 分支只认 8 组全写形式,
2001:db8::1这类::压缩写法不会被匹配;fe80:0:0:0:0:0:0:1才会命中。 - 正则不做词边界锚定,四段数字串与 IPv4 无法区分:
ver 1.2.3.4 ok会被清成ver ok;300.1.1.1的后缀0.1.1.1命中,结果剩30。版本号密集的语料建议自定义 pattern。 repl按re.sub的替换模板语义处理,串里的1、g<1>会被当成反向引用(默认 IPv6 分支带一个捕获组),需要输出字面反斜杠时要自行转义。
调用示例
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.clean_ip import CleanIp
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 "server at 192.168.1.1 is down",
21 "ipv6 2001:0db8:85a3:0000:0000:8a2e:0370:7334 unreachable",
22 "no ip here",
23 None,
24 ]
25 }
26 ds = daft.from_pydict(samples)
27 ds = ds.with_column(
28 "result",
29 aihc_udf(CleanIp, construct_args={}, num_cpus=1, concurrency=1, batch_size=4)(col("texts")),
30 )
31 ds.show()
评价此篇文章
