title-norm
archive-bridge 链路B internal/subject/normalize.go 中
title -> (title_norm, version_type) 算法的 Python 移植包,供跨语言/离线批处理场景复用。
移植范围(与 Go 源保持处理顺序与规则一致):
-
normalize_name:姓名/文本归一化(全角转半角、繁转简、空白折叠、转小写) -
normalize_title:歌名 ->(title_norm, version)主算法- 书名号剥离 → 破折号后缀版本感知剥离 → 多重括号循环剥离 → 无括号版本后缀词剥离
→
normalize_name→ 版本枚举归一
- 书名号剥离 → 破折号后缀版本感知剥离 → 多重括号循环剥离 → 无括号版本后缀词剥离
→
-
strip_clip_markers:削去片段标题(如抖音切片)的版本/切片标记后缀 -
is_version_marker:判定内容是否为版本标记(版本别名/固定词表/速度模式/黑名单) - 其余辅助:
split_names/normalize_name_set/normalize_set/singer_identity_key/author_identity_key/org_identity_key/platform_from_singer_table
安装
pip install -e .
繁简转换依赖 opencc-python-reimplemented(纯查表,非 AI)。若安装失败或加载出错,
normalize_name 会跳过繁简转换,不影响其余归一逻辑(与 Go 源行为一致)。
用法
from title_norm import normalize_title
title_norm, version = normalize_title("七里香(现场版)")
# title_norm == "七里香", version == "live"
测试
pip install pytest
pytest
测试用例(tests/test_title_norm.py)与 Go 源 normalize_test.go 中的用例逐一对齐。
维护
Go 源是权威实现;若 internal/subject/normalize.go 的规则(词表、正则、处理顺序)有变更,
需同步更新本包,保持两侧行为一致。