我对这个前提提出了质疑,但让我们在回答完您的问题后再讨论。
这是(接近)正确的查询。当我通过添加"return" : "count" 来询问计数时,我得到 17,972,这听起来很正确。也许您的查询框架以某种方式添加了"limit" : 400?
既然您想要最常见的,我们为什么不修改查询对它们进行排序。由于排序中的一个怪癖,空值排在最后(或在我们的反向排序中排在第一位),所以我们还将添加一个限定符来过滤掉它们。我们可以使用>0,但由于您可能对低频类型不感兴趣,我们还是使用>1000。
最终查询如下所示:
[{
"id": null,
"name": null,
"type": "/freebase/type_profile",
"instance_count>": 1000,
"instance_count": null,
"sort": "-instance_count"
}]
这将返回按实例数降序排列的 849 种类型的有序列表。
您可能需要对结果列表进行一些手工整理,以消除 /common/topic、/common/document、/book/isbn、/book/pagination 等内容。中介类型不会也有 /common/topic ,因此您可以先对其进行过滤(但根据您的语料库中事物的类型,它们可能都是开始的主题(即实体)。
现在回到最频繁== 最佳这个前提。根据您的应用程序,您实际上可能需要更具体(通常意味着较低频率)的类型,而不是更广泛的高频类型。例如,死者而不是人,或者政治家、作者或运动员,而不是人。您可能需要考虑使用 least 频繁类型(至少使用一些阈值时间)。您可能想要做的另一件事是将未经过精心策划的非公用类型(即植根于 /base/... 或 /user/... 的类型)列入黑名单。
编辑 - 警告词:
这些计数最后一次更新是在 2012 年。对于像这样的练习,你只需要粗略的排序,但如果你需要当前的统计数据,你需要计算 Freebase 数据转储中出现的次数或数字取出单独的 Stats API,我不确定它是否公开/记录在 http://freebase-site.googlecode.com/svn/trunk/www/lib/queries/stats.sjs