我有很多字典,其中包含我音乐库中每个艺术家的加权标签,我想找到更相似的艺术家(也许也有相似度评级?),给定一个加权标签字典。
例如:
tags = {
'grails': {
'post-rock': 100,
'instrumental': 53,
'experimental': 38,
'ambient': 30,
'post rock': 14,
'psychedelic': 11,
'Psychedelic Rock': 6,
'Progressive rock': 6,
'rock': 4,
'instrumental rock': 3,
'atmospheric': 3,
'american': 3,
'space rock': 1
},
'camel': {
'Progressive rock': 100,
'classic rock': 28,
'art rock': 24,
'Progressive': 18,
'rock': 17,
'symphonic prog': 7,
'british': 6,
'Symphonic Rock': 4,
'Canterbury Scene': 3,
'prog rock': 3,
'prog': 3,
'Psychedelic Rock': 2,
'space rock': 1
},
'mozart': {
'Classical': 100,
'mozart': 30,
'instrumental': 21,
'composers': 16,
'opera': 13,
'piano': 11,
'Wolfgang Amadeus Mozart': 9,
'symphonic': 9,
'orchestral': 8,
'austrian': 5
}
# etc.
}
best_matches({
'Progressive rock': 100,
'experimental': 33,
'classic rock': 26,
'Progressive': 23,
'rock': 23,
'art rock': 12,
'psychedelic': 5,
'prog rock': 5,
'british': 5,
'prog': 4,
'Experimental Rock': 3,
'Avant-Garde': 3,
'Psychedelic Rock': 3,
'Jazz Rock': 2
}, tags)
# should output camel, then grails, then mozart
我听说过一些推荐算法,例如 Slope One,但我想知道是否有更简单的方法可以用 Python 进行这种计算,以及“比较”所有这些字典的最快算法是什么。