我有任何Freebase mid,例如:/m/0mgcr
,即后代。
使用MQL查找相关艺术家的最佳方式是什么?
或者,如果我有一首歌,例如:/m/0l_f7f
,即后代的 Original Prankster 。
使用MQL查找相关歌曲的最佳方式是什么?
答案 0 :(得分:2)
因此,修订后的问题是,如果是一位音乐艺术家,则会找到所有其他音乐艺术家,他们分享与第一位艺术家相同类型的全部。
MQL没有任何可以在查询树的各个部分工作的运算符,所以这不能在单个查询中完成,但考虑到您可能通过编程执行此操作语言,只需两步即可完成。
首先,我们将为我们的主题艺术家获取所有类型,按照他们使用this query包含的艺术家数量进行排序(尽管最后一部分并非严格必要):
[{
"id": "/m/0mgcr",
"name": null,
"/music/artist/genre": [{
"name": null,
"id": null,
"artists": {
"return": "count"
},
"sort": "artists.count"
}]
}]
然后,使用具有最少数量的艺术家的类型以获得最大的选择性,我们将添加其他类型以使其更具体。这里是一个version of the query,其中有三种最具体类型的艺术家(基础类型加上两个):
[{
"id": "/m/0mgcr",
"name": null,
"/music/artist/genre": [{
"name": null,
"id": null,
"artists": {
"return": "count"
},
"sort": "artists.count",
"limit": 1,
"a:artists": [{
"name": null,
"id": null,
"a:genre": {
"id": "/en/ska_punk"
},
"b:genre": {
"id": "/en/melodic_hardcore"
}
}]
}]
}]
这给了我们:Zero Zero,Millencolin,Michael John Burkett,NOFX,Bigwig,Huelga de Hambre,Freygolo,The Vandals
有关此查询的注意事项是,此片段:
"sort": "artists.count",
"limit": 1,
将我们最初的流派选择限制为具有最少艺术家(即Skate Punk)的单一流派,而前缀表示法:
"a:genre": {"id": "/en/ska_punk"},
"b:genre": {"id": "/en/melodic_hardcore"}
是为了解决没有多个具有相同名称的密钥的JSON限制。前缀被忽略,只需要是唯一的(这与查询中其他位置a:artists
的原因相同。
所以,在完成了整个小练习之后,我会说可能有更好的方法来做这件事。您可以使用评分函数获得更好的结果,而不是绝对匹配,该评分函数会查看最特定类型或其他指标的%重叠。普通乐队成员,合作,同期录音历史等等也可以作为你的得分因素。当然,这完全超出了原始MQL的功能,您可能希望将音乐域(或某些子集)的Freebase数据加载到图形数据库中以运行这些评分算法。
事实上,last.fm和Google都认为更好的列表会包括Sum 41,blink-182,Bad Religion,Green Day等乐队。