2011-11-07 49 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,要麼索引它自己(因爲你在你的問題中提到),或者只是讀它在一個單一的通行證並在您遇到它們時統計匹配頁面。