简短介绍:
Music Studio程序在mysql / mssql数据库上运行,并从歌曲表中随机选择歌曲。

问题:同一首歌曲存在于多个CD上,因此同一首歌曲可能被多次选择,这是不应该发生的。大问题:如何避免这种情况,因为名称并不总是完全相同。

(选择歌曲时应遵循的其他规则:


LastPlayedTime超过X分钟。
当前的队列播放列表中不应存在此声音(该歌曲已被选择在不久的将来播放)。
评分> 1(可以是0-10)



我无法更改数据库的结构,否则Music Studio会损坏。但是我可以使用辅助数据库,例如SOLR或MongoDB或...来抓取

一些歌曲ID放在队列播放列表中。

我在想:选择一首与历史记录(lastplayedtimestamp或history表)或队列列表(表)中的歌曲不匹配10%的歌曲。

例如,使用SOLR可能吗?

(我只需要Songid即可指示musicstudio将歌曲放入队列列表中)。

歌曲表结构:

例:

Id, Artist,                       Title,                         Filename (usually Artist - Title . Extension).
1,  Narcotic Thrust,              I Like It (ORIGINAL MIX) 2004, C:\library\Dance X 2004\Narcotic Thrust - I Like It (ORIGINAL MIX) 2004.mp3
2,  Narcotic Thrust,              I Like It,                     C:\library\Dance CD 2005 vol.1\410-narcotic_thrust-i_like_it.flac
6,  01 Inna featuring Bob Taylor, Deja Vu,                       C:\library\Cool Dance CD vol.3\201 Inna featuring Bob Taylor - Deja Vu.mp3
7,  Inna (feat.) Bob Taylor,      Deja Vu,                       C:\library\Best Dance CD vol.9\08.Inna feat bob taylor - Deja Vu.mp3
8,  Inna,                         Déjà Vu,                       c:\library\D-Dance vol.2\206-inna-deja_vu.mp3

最佳答案

这项任务非常艰巨,因为如果不对歌曲本身(而不是标题)进行统计分析,甚至不可能检测出重复的歌曲,但前提是在大多数情况下,有关歌曲的元数据会包含很多内容。通常,您可以通过对位置敏感的哈希来获得足够的结果,其中近重复项会收到类似的哈希值。相似度又以汉明距离来度量。

我建议的解决方案是对Artist,Title和Filename组合运行Simhash。您可以使用一些stemmer来准备字符串,然后测量所述汉明距离,如果超过阈值(需要定义阈值),则现在很可能是重复项。

本质上,您将要做的是搜索几乎重复的内容-另请参见下面的链接以获取更多详细说明
http://www.inf.ed.ac.uk/teaching/courses/tts/pdf/dup-2x2.pdf

关于问题中涉及solr的部分,下面的链接是我所能获得的最接近的链接。我从来没有使用过它,所以不能说太多。
http://lucene.apache.org/solr/4_10_2/solr-core/org/apache/solr/update/processor/TextProfileSignature.html

http://wiki.apache.org/solr/TextProfileSignature

关于mysql - 数据库自动歌曲计划器不应选择同一首歌曲,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27319809/

10-16 22:58