Data-Juicer 中 remove_words_with_incorrect_substrings_mapper 详解:按子串清洗文本中的脏词

📅 发布时间:2026/10/6 22:32:09
Data-Juicer 中 remove_words_with_incorrect_substrings_mapper 详解:按子串清洗文本中的脏词
人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载remove_words_with_incorrect_substrings_mapper是 Data-Juicer 提供的文本清洗 mapper 算子用于从文本中移除包含指定错误子字符串默认如http、www、.com、href、//的单词适合在数据预处理流水线中剔除残留的链接、URL 片段和噪声 token。阅读本文后你将掌握该算子的参数语义、分词与非分词两种工作模式的区别、底层实现原理以及如何在 Data-Juicer 的 recipe 配置中正确接入并复现其效果演示。算子定位与适用场景该算子注册名为remove_words_with_incorrect_substrings_mapper算子类型为mapper标签为cpu、text即它是一类仅依赖 CPU 的纯文本编辑算子对应 源码注册与类定义。与 filter 类算子整条样本保留或丢弃不同mapper 会在原样本基础上就地改写文本字段且不计算任何关键指标key metric——它的全部职责就是按子串命中情况删词。从源码结构看该算子主要用于两类清理目标清理爬虫/网页转写文本中残留的 URL 与协议标识http、https、www、.com、href、//等默认子串覆盖了绝大多数 URL 片段的特征清理特定语料如中英混杂文本中的自定义噪声词通过substrings参数传入任意子串凡是包含其中任一子串的单词都会被整体删除。两种工作模式分词与非分词算子通过tokenization布尔参数切换两种处理路径核心差异在于如何界定一个单词。非分词模式tokenizationFalse默认文本先按换行、制表符、空白逐级切分得到多级句子/子句结构再对每个单词做子串命中检查最后按原有层级合并回单一字符串。该模式不需要加载任何模型纯规则处理速度快、零额外依赖。分词模式tokenizationTrue构造算子时会通过prepare_model(model_typesentencepiece, langlang)准备对应语言的分词模型源码位置底层实现见 model_utils.py处理时用 sentencepiece 的encode_as_pieces将文本切成子词piece并去掉 sentencepiece 特有的▁前缀标记后再做子串检查过滤结果直接拼接回文本。该模式更适合中文等无空格分词的语言——因为此时按空白切词无法正确切出词边界。无论哪种模式过滤后的文本都会被合并回单一字符串并在批内逐条更新text字段批量处理样本并在原地更新文本见 process_batched。参数配置详解算子核心参数如下表取自 参数文档 及 config_all.yaml 中的默认配置参数名类型默认值说明langstren样本语言用于在tokenizationTrue时选择对应语言的 sentencepiece 模型如en、zhtokenizationboolFalse是否使用模型对文档进行分词后再过滤False时按空白/换行/制表符切词substringsOptional[List[str]]None需要移除的错误子字符串列表传None时使用默认值[http, www, .com, href, //]args—额外参数透传给基类kwargs—额外参数透传给基类如text_key指定待处理文本字段默认text关于默认值有一个关键实现细节substringsNone时在构造函数内部被替换为[http, www, .com, href, //]源码位置因此即使不显式传入算子也会默认清理 URL 特征词。若希望只按自定义子串清理需显式传参覆盖默认值。在 Data-Juicer 的全局配置config_all.yaml中该算子对应的 recipe 片段为- remove_words_with_incorrect_substrings_mapper: # remove words with incorrect substrings from text. lang: en # sample in which language tokenization: false # whether to use model to tokenize documents substrings: [http, www, .com, href, //] # incorrect substrings to remove实际使用时只需把这段配置放进自己的 recipe 配置文件的process列表即可如demos/process_simple/process.yaml中配置 mapper 列表的方式一致。效果演示英文场景使用配置与单元测试 test_remove_words_with_incorrect_substrings_mapper.py 中的test_en_case完全一致RemoveWordsWithIncorrectSubstringsMapper(substrings[http, www, .com, href, //])输入数据Sample 1This paper proposed a novel https://whiugc.com method on LLMSample 2plusieurs èrdashhqbchd.ckd daccéder à ces wwwasdasd fonc输出数据Sample 1This paper proposed a novel method on LLMSample 2plusieurs èrdashhqbchd.ckd daccéder à ces fonc解释第一个样本中https://whiugc.com同时命中http与.com两个子串被整体删除第二个样本中wwwasdasd命中www被删除。注意èrdashhqbchd.ckd这类邮箱/账号串因不含任何目标子串而原样保留说明该算子只做包含关系的精准删词不会误伤无关 token。效果演示中文场景启用分词使用配置与 test_zh_case 一致RemoveWordsWithIncorrectSubstringsMapper(langzh, tokenizationTrue, substrings[com, 算子])输入数据Sample 1你好请问你是谁Sample 2欢迎来到阿里巴巴Sample 3根据算子使用情况增量安装方案确定Sample 4请用百度www.baidu.com进行搜索输出数据Sample 1你好请问你是谁Sample 2欢迎来到阿里巴巴Sample 3根据使用情况增量安装方案确定Sample 4请用百度www.baidu.进行搜索解释启用tokenizationTrue后文本先经中文 sentencepiece 分词再逐词过滤。Sample 3 中算子作为一个独立子词命中算子子串被删除Sample 4 中www.baidu.com因包含com而被移除该部分最终残留www.baidu.。Sample 1、2 因不含目标子串而原样保留说明该场景下算子不会破坏正常的纯中文文本。源码级实现剖析1. 单词级判定逻辑判定一个单词是否保留的核心方法是should_keep_word_with_incorrect_substrings源码位置def should_keep_word_with_incorrect_substrings(self, word, substrings): word strip(word, SPECIAL_CHARACTERS) should_keep all([(i_substr not in word) for i_substr in substrings]) return should_keep它在检查前先用strip(word, SPECIAL_CHARACTERS)剥离单词首尾的特殊字符。SPECIAL_CHARACTERS定义于 special_characters.py由 ASCII 标点、数字、空白、一组长尾 Unicode 特殊字符以及全部 emoji 构成strip的实现是逐字符从两端收缩的高性能版本helper_func.py。这意味着像(http://xxx)这类首尾带括号的 URL 词括号会被剥掉中间主体仍命中子串而被删除。2. 非分词模式的切分与合并非分词路径调用的切分函数是split_on_newline_tab_whitespacehelper_func.py先按\n切行再按\t切子句最后按空白切词得到一个三层嵌套的句子结构过滤时对最内层每个单词应用保留判定再调用merge_on_whitespace_tab_newlinehelper_func.py按空格→制表符→换行的逆序合并回完整文本并自动剔除空层。这一对称设计保证了换行/缩进等排版信息在删词后依然保留。3. 分词模式的 token 过滤分词路径通过get_words_from_document(text, token_functokenizer.encode_as_pieces)获取子词列表helper_func.py随后对每个子词先replace(▁, )去掉 sentencepiece 的单词边界标记再交给同一套保留判定过滤结果直接.join(words)拼接。因此中文场景的输出中不会残留多余空格。4. 批量处理与原地更新该算子声明了_batched_op True源码位置属于批量算子process_batched接收的是一个字段名→列表的批次字典逐条读取samples[self.text_key]处理并写回源码位置。在基类 Mapper 中process会被自动包装为对process_batched的批量映射调用并以batch_size控制每批样本数。单元测试也正是通过dataset.map(op.process, batch_size2)来验证测试用例。使用建议与注意事项自定义清洗词时务必显式覆盖substrings不传该参数会沿用默认的 URL 特征子串可能并非你的预期行为。中文文本建议开启tokenizationTrue中文按空白切词无法切出语义词边界若不开启分词包含目标子串的中文短语无法被正确移除开启后需注意 sentencepiece 模型会按lang下载对应模型文件。把握子串包含的副作用算子删除的是包含子串的整个单词而不是仅删除子串本身。例如命中.com的www.baidu.com会被整体删掉导致残留www.baidu.如上述中文演示这种部分删除效果是子串包含匹配的必然结果配置子串时应尽量选能完整覆盖目标词的字符串。纯 CPU 文本算子可放心用于大规模流水线无 GPU 依赖适合与clean_html_mapper、remove_table_text_mapper等文本清洗算子串联作为 URL/噪声词清理的最后一道关卡。相关链接算子源代码单元测试文本工具函数切分/合并/strip特殊字符定义全局配置中的默认 recipe 片段Data-Juicer 算子总览赞分享人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载相关推荐data-juicer remove_long_words_mapper 算子详解按字符长度清洗文本中的过长词与过短词data juicer remove_long_words_mapper 算子详解按字符长度清洗文本中的过长词与过短词 本文围绕 data juicer 官方人工智能大模型数据工程数据清洗数据增强数据质检Data-Juicer 词数过滤算子 words_num_filter按总词数清洗文本数据的完整指南Data Juicer 词数过滤算子 words_num_filter按总词数清洗文本数据的完整指南 导读 words_num_filter 是 Data J人工智能大模型数据工程数据清洗数据增强数据质检data-juicer clean_html_mapper 算子详解基于 Selectolax 将 HTML 文本批量清洗为纯文本data juicer clean_html_mapper 算子详解基于 Selectolax 将 HTML 文本批量清洗为纯文本 clean_html_ma人工智能大模型数据工程数据清洗数据增强数据质检上一篇IronClaw 谷歌文档校验指南使用 verify_document 对 Google Docs 做文本与表格断言下一篇EmDash 插件开发完全指南从沙箱插件到原生扩展的实战手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考