Çalma listesi önerisinde aynı parçanın iki kez gelmesini engellemek

这篇内容暂时只有 Türkçe 版本,以下是原文。

Geçen ay kendi arşivimden (yaklaşık 4200 parça, çoğu 2000–2020 arası rip) bir “sakin akşam” listesi çıkarıyordum. Öneri motoru olarak basit bir etiket + son çalma zamanı filtresi kullanıyorum, vektör yok. Sorun şuydu: aynı parçanın albüm versiyonu ile single versiyonu art arda geliyordu. Dinlerken fark ediyorsun ama listeyi üretirken gözden kaçıyor.

Önce parça kimliğini normalize ettim. Etiketlerdeki başlık farkları (feat., remaster, parantez içi) yüzünden aynı şarkı iki ayrı kayıt gibi görünüyordu. Basit bir anahtar üretiyorum:

import re, unicodedata

def norm(s):
    s = unicodedata.normalize("NFKD", s.lower())
    s = re.sub(r"\b(feat|ft|remaster(ed)?|version|edit)\b.*", "", s)
    s = re.sub(r"[^\w\s]", "", s)
    return " ".join(s.split())

def key(track):
    return (norm(track["artist"]), norm(track["title"]))

Sonra listede bu anahtar zaten varsa parçayı atlıyorum, ama sadece son 40 parça içinde değil, tüm liste boyunca. Filtreyi üretim döngüsünün sonuna koymak işe yaramadı; çünkü sıralama zaten bozuluyordu. Anahtarı seçim anında kontrol ediyorum.

Bunun bedeli var: aynı şarkının farklı canlı kayıtlarını da eliyor. Benim için sorun değil, çünkü bu liste “tekrar duymak istemediğim” bir liste. Ama bir cover ya da düet versiyonunu bilerek eklemek istersen anahtar çakışır ve parça sessizce düşer. Bunu fark ettiğimde birkaç iyi kayıt kaybetmiştim.

İkinci sınır: normalize etmek her zaman doğru değil. “Part 1” ve “Part 2” aynı anahtara düşebiliyor; parantez içindeki ayırt edici bilgi siliniyor. Bu yüzden anahtarı sadece tekrar kontrolü için kullanıyorum, parçayı tanımlamak için değil.

Sizin arşivinizde aynı parçanın versiyonlarını ayırt etmek için ne kullanıyorsunuz — ISRC mi, yoksa etiketlerdeki süre farkı mı?

0
赞同度 100% · 0 条评论 · 1 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。