README.md 1.7 KB

title-norm

archive-bridge 链路B internal/subject/normalize.gotitle -> (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 的规则(词表、正则、处理顺序)有变更, 需同步更新本包,保持两侧行为一致。