两段看起来相同的文本,底层字符不一定相同。AI 文本清洗可以先采用明确的 Unicode 规范化规则,保留原文与转换值,再决定是否需要进一步清理。
为AI文本分析准备输入材料的读者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

核对Unicode规范化后的文本前,先定规则
示例café分别用预组合é与e加组合重音表示,原字节不同,NFC后相同。
NFC不应顺便删除重音、大小写或标点,那会改变信息。对全角字符需要考虑NFKC,但它可能改变兼容字符,不能无条件用于所有文本。
清洗结果保存raw/normalized,后续引用需知道偏移基于哪份文本,避免定位错位。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
只对文本做NFC,保留raw和normalized,证明café两种Unicode表示统一;不得strip重音或做NFKC。加入全角A确认仍保留,不把不同字形规则混在一起。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
import unicodedata
raw=['caf\u00e9','cafe\u0301','A']
rows=[{'raw':s,'normalized':unicodedata.normalize('NFC',s)} for s in raw]
assert raw[0]!=raw[1]
assert rows[0]['normalized']==rows[1]['normalized']=='café'
assert rows[2]['normalized']=='A'
assert all(unicodedata.normalize('NFC',r['normalized'])==r['normalized'] for r in rows)
print('raw_lengths',[len(r['raw']) for r in rows])
print('normalized_lengths',[len(r['normalized']) for r in rows])
print('fullwidth_preserved',True)
怎样判断结果符合要求
两种café原长度分别4和5,规范化后均为4;全角A保持不变。幂等检查确认再次NFC不会继续改变本例输出。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
raw_lengths [4, 5, 1]
normalized_lengths [4, 4, 1]
fullwidth_preserved True
字符长度改变会影响start/end索引,先抽取偏移再清洗可能令证据指向错误。
“看起来一样”不等于可互换,规范化方式要依据任务。
哪些失败必须停下来处理
Unicode版本、语言习惯与组合字符范围需结合真实材料核对;本例只验证三份输入。
删除不可见字符可能改变代码、网址或语义,先记录再评估,不让AI一律删除。
接入自己的任务前再核对一次
把清洗规则分步骤记录,分别保存变更次数与可回查映射。
让AI建议新规则时提供正反例,确认不会破坏姓名、编码和引用片段。
资料与适用范围
unicodedata.normalize支持Unicode规范化;NFC与NFKC的兼容性变化范围不同。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 智能体知识库数据怎么清洗?从重复文档、乱码到切分前质检。本文的重点是核对Unicode规范化后的文本,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33406.html