2011-11-07 32 views
2

我希望得到与条件匹配的维基百科页面数。 例如计数维基百科的结果

  • “家” - > 1200页
  • “人” - > 13000页
  • “大学学院” - > 360页

在许多其他的方式,我可以通过使用Lucene索引维基百科来做到这一点,但这非常耗时。

有没有办法在Media Wiki API上执行这种类型的查询?

Wikipedia API的查询限制是什么?

干杯, Mulone

+0

我不认为维基百科会让你对每一篇文章*做一个完整的内容搜索。就资源和时间而言,这将会非常昂贵。但是,您可以搜索标题:http://en.wikipedia.org/w/api.php?action=opensearch&search=man&limit=100&format=jsonfm – Blender

+0

至少有99,000篇文章,或许有488,000个单词(或可能是部分单词) [房子](http://en.wikipedia.org/w/index.php?title=Special:Search&limit=50&offset=99000&redirs=1&profile=default&search=house) – Henry

回答

0

尝试list=search查询。例如:

(既然你说你是唯一匹配的网页数量感兴趣,我查询中包含的srlimit=1srprop=减少返回额外的信息,显然没有办法让API至少返回第一个匹配的标题,但是; srlimit=0只是给出了错误信息。)

至于查询限制,有limits on the number of results per query,但我不认为MediaWiki会在您查询API的费率上强制执行任何硬性限制。 MediaWiki确实限制了编辑率,但我认为目前没有任何这样的限制适用于搜索。

我相信这个建议是,你连续运行你的查询—,也就是说,在发送下一个请求之前等待上一个查询完成。这提供了一种自动速率限制,因为如果服务器很忙,您的查询将花费更长的时间才能完成。如果你想玩的很好,你也可以在你的查询中加入maxlag parameter(如果失败,最好用exponential backoff); maxlag机制的设计更多的是自动搜索编辑而不是搜索,但它确实至少可以确保您的代码在特别重载时不会受到维基媒体服务器的影响。

另外,如果你想要做一个很多这些类型的查询的,你可能要考虑下载Wikipedia database dump,要么索引它自己(因为你在你的问题中提到),或者只是读它在一个单一的通行证并在您遇到它们时统计匹配页面。