fix(music): 缩写点号还原与包含/演出后缀弱匹配修复失配

- metamusic: 连续单字母空格序列还原为点号缩写(S H E -> S.H.E),
  在场景点分之后执行避免点号再被压平
- metamusic: 规格段残留判定收紧,发布组短词仅在格式词无空格连字符
  形态(FLAC-HHWEB)放行,修复自然语言曲名(Ashielf Alpen)被误剥
- musicbrainz: 专辑候选新增包含关系弱匹配(原声带条目带额外前缀)
  与演出后缀弱匹配(S.H.E十七音乐会 -> 条目「十七」)
- 补充 metamusic 缩写还原与 musicbrainz 弱匹配测试案例
This commit is contained in:
jxxghp
2026-08-11 10:24:45 +08:00
parent 19937b210b
commit ae393456bd
4 changed files with 116 additions and 7 deletions
+29
View File
@@ -192,6 +192,15 @@ class MusicBrainzModule(_ModuleBase):
text = str(value or "").strip()
return cls._normalize_text(text.split(" ", 1)[0]) if text else ""
# 演唱会资源的标题常带演出后缀(S.H.E十七音乐会),条目仅保留演出名本体
_PERFORMANCE_SUFFIX_RE = re.compile(
r"\s*(?:音乐会|音樂會|演唱会|演唱會|巡回|巡演|Live|Tour)$", re.IGNORECASE)
@classmethod
def _performance_title(cls, value: Optional[str]) -> str:
"""剔除标题尾部的演出形态后缀,返回演出名本体。"""
return cls._normalize_text(cls._PERFORMANCE_SUFFIX_RE.sub("", str(value or "")))
@classmethod
def _strip_artist_prefix(cls, title: Optional[str], artists: Optional[list[str]]) -> str:
"""剥离曲名开头的艺术家署名前缀(「许茹芸的爱情电影主题曲」)。
@@ -635,6 +644,16 @@ class MusicBrainzModule(_ModuleBase):
len(cls._match_text(bare_title)) >= 3
and cls._same_text(bare_title, cls._lead_token(candidate.title))
)
# 条目带额外前缀/后缀完整包含资源主体名(好莱坞原声带类),长文本包含视为弱匹配
or (
len(cls._match_text(bare_title)) >= 6
and cls._match_text(bare_title) in cls._match_text(candidate.title)
)
# 资源标题带演出后缀(S.H.E十七音乐会),条目本体一致视为弱匹配
or (
cls._performance_title(bare_title)
and cls._same_text(cls._performance_title(bare_title), candidate.title)
)
)
):
score += 2
@@ -701,6 +720,16 @@ class MusicBrainzModule(_ModuleBase):
len(cls._match_text(bare_title)) >= 3
and cls._same_text(bare_title, cls._lead_token(album_title))
)
# 条目带额外前缀/后缀完整包含资源主体名(好莱坞原声带类),长文本包含视为弱匹配
or (
len(cls._match_text(bare_title)) >= 6
and cls._match_text(bare_title) in cls._match_text(album_title)
)
# 资源标题带演出后缀(S.H.E十七音乐会),条目本体一致视为弱匹配
or (
cls._performance_title(bare_title)
and cls._same_text(cls._performance_title(bare_title), album_title)
)
)
):
# 「我爱夜 (新歌+精选)」对位条目「我爱夜」这类注释差异