最终成果:遮盖文本中的指定敏感词,保留命中次数和可解释的替换规则。
这是一门可离线完成的Python实践课,使用标准库,不需要模型密钥。例子均为教学虚构,不是现实业务数据或真实效果证据。
1. 先看成果
输入示例:
{
"text": "联系人小林",
"secrets": [
"小林"
]
}
预期输出:
{
"text": "联系人[已隐藏]",
"hits": 1
}
2. 准备与首次运行
准备Python 3.10或更高版本。完整解压项目包,在包含verify.py的文件夹打开终端。Windows可用py -3代替python,macOS/Linux可用python3。
python --version
python verify.py
起始代码尚未实现,首次看到7项FAIL和NotImplementedError属于正常起点;语法或导入错误会给中文说明且不生成报告。先提交这份失败报告也可以。
3. 输入输出契约
输入text为最多10000字符的字符串,secrets为最多50个非空字符串,每词最多100字符。先去重,按长度降序、同长按字符串升序排序。对原文从左至右扫描,每位置选择第一个匹配词,大小写敏感、不重叠;命中替换为[已隐藏],不扫描替换文本。输出text和hits。空敏感词等结构错误抛ValueError。这里只处理显式词表,不能保证发现所有个人信息。
solve(payload)接收一个JSON对象并返回上述JSON结果。任何契约规定的结构或类型错误都应抛ValueError,不返回貌似成功的部分结果。
4. 三段实现与分层提示
1. 找出匹配位置
先实现单词、重复出现和无命中。
关注用例:one、many、none
-
第1层:替换文本是否也应该继续搜索?
-
第2层:扫描的是原文,替换标记只进入输出。
-
第3层:用位置游标遍历原文,命中时前进词的长度。
2. 解决重叠
实现最长优先和词表去重。
关注用例:overlap、duplicate
-
第1层:张三与张三丰同时匹配时选谁?
-
第2层:先去重,再按长度降序排序。
-
第3层:每个位置只选第一个匹配项,命中后跳过整段。
3. 保持边界
处理大小写和空词表。
关注用例:case、empty
-
第1层:显式词表能识别所有敏感信息吗?
-
第2层:本契约区分大小写,无词表就原样返回。
-
第3层:保留未匹配字符,不能把未检查区域说成已安全。
先写下自己的预期,再展开一层提示并修改。verify.py默认展示字段差异,仍卡住可加--explain查看诊断。
5. 用本地网页检查自己的输入
python run.py
打开终端显示的本地地址(默认http://127.0.0.1:8870),修改输入并运行,保存输出。端口已占用可运行python run.py --port 8871;不需要停止其他程序。
参考演示可运行python run.py --reference,参考输出不表示你自己的实现通过。
6. 组合挑战与评分
python verify.py --suite challenge --report challenge-report.json
4项挑战各25分,输入、错误类型及所有输出字段符合约定才得该项分数。完整用例与评分依据在project.json的learning.cases中。只表示这组输出符合约定,不证明独立能力。
-
多个重叠位置:先命中aaa再命中aa,不重叠计数。
-
替换标记也是原文:只扫描原文,不能再次替换新标记。
-
混合中英文:按字符与最长词一致处理。
-
拒绝空敏感词:空词可能导致游标不前进,须抛ValueError。
7. 自主扩展与提交
设计一种新的敏感信息识别规则,用虚构资料保留漏检和误遮盖各一个例子,说明分享前还要人工核对什么。
至少自建一个测试,先写预期,再运行并保存实际结果。在项目页上传报告,填写两道解释题,展开自主扩展记录,填写需求、JSON输入/预期/实际及修订说明。扩展内容不自动算分,申请人工评价后由人核对。
-
解释题:解释最长优先怎样改变重叠敏感词的结果。
-
解释题:自己构造一个漏检场景,说明显式词表的限制以及你的改进。
报告默认私有;申请后管理员才可看该次报告、项目链接、复盘与扩展证据,可撤回共享。服务器复核报告输出,不执行上传代码、不访问作品链接。修订时保留失败与新报告,不覆盖旧记录。
8. 局限与后续
本项目训练上述确定性规则,不调用模型,不代表完整业务系统。如需以后接入模型,先保留基线,单独明确成本与调用授权、构造错误输出并人工核对,不把本站参考结果当作模型效果。