超长单词移除
更新时间:2026-09-14
简介
超长单词移除算子,按词长过滤:删除长度不落在 [min_len, max_len] 区间内的词,切分、判定、合并三步走。
功能描述
- 按 `
→ → 空格 三级切分文本,逐词判定,再按空格 → →
` 顺序合并回文本
- 判定规则:原始长度落在
[min_len, max_len]直接保留;只有超过max_len的词才去掉首尾特殊字符后复判,短于min_len的词直接丢弃、不做复判 - 特殊字符集取
daft.aihc.common.utils.special_characters.SPECIAL_CHARACTERS:ASCII 标点 + 数字 + 空白 + 一批全角/异体符号 +emoji包收录的全部 emoji - 构造阶段校验
0 <= min_len <= max_len,不满足抛ValueError - 输入 None 的行返回 None;单行异常记日志并返回 None,不中断整批
算子参数
输入
| 输入 | 含义 |
|---|---|
| texts | 文本字符串数组 |
输出
| 输出 | 含义 |
|---|---|
| result | 按词长过滤后的文本(string),输入 None 返回 None |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| min_len | int | 1 | 词长下限,短于该值的词被删除 |
| max_len | int | sys.maxsize(64 位平台为 9223372036854775807) | 词长上限,超过该值且去掉首尾特殊字符后仍超过的词被删除;默认等于不限制 |
注意事项
- 合并阶段会顺带做空白归一:连续空格压成一个、行首尾空格去掉、空行(含只有空白的行)整行丢掉。即使用默认参数(不删除任何词)文本也可能变化,例如 `'a b
c'→'a b
c'。 与
` 本身的层级结构会保留。
- 词长按 Python
len()(Unicode 码点数)计算,中文按字数计。一段没有空格的中文长句会被当成一个超长词整体删掉,中文语料上设max_len要谨慎。 - 切分只按空白,标点不单独切开:
word,是长度 5 的词;只有被判为超长时才会去掉首尾标点再复判。
调用示例
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_long_words import RemoveLongWords
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 "short words stay but supercalifragilisticexpialidocious goes away",
21 "line one col two
22line three",
23 None,
24 ]
25 }
26 ds = daft.from_pydict(samples)
27 ds = ds.with_column(
28 "result",
29 aihc_udf(
30 RemoveLongWords,
31 construct_args={"min_len": 1, "max_len": 10},
32 num_cpus=1,
33 concurrency=1,
34 batch_size=4,
35 )(col("texts")),
36 )
37 ds.show()
评价此篇文章
