2011-05-23 11 views
8

Có gói nào cho R cho phép truy vấn Wikipedia (hầu hết có thể sử dụng API Mediawiki) để nhận danh sách các bài viết có liên quan đến truy vấn đó, cũng như nhập các bài viết được chọn để khai thác văn bản không?Làm cách nào để truy cập Wikipedia từ R?

+0

Bạn có thể thấy những điều sau hữu ích: http://www.ragtag.info/2011/feb/10/processing-every-wikipedia-article/ – James

Trả lời

5

Sử dụng gói RCurl để truy xuất lại thông tin và gói XML hoặc RJSONIO để phân tích cú pháp phản hồi.

Nếu bạn ở sau proxy, hãy đặt tùy chọn của bạn.

opts <- list(
    proxy = "136.233.91.120", 
    proxyusername = "mydomain\\myusername", 
    proxypassword = 'whatever', 
    proxyport = 8080 
) 

Sử dụng chức năng getForm để truy cập the API.

search_example <- getForm(
    "http://en.wikipedia.org/w/api.php", 
    action = "opensearch", 
    search = "Te", 
    format = "json", 
    .opts = opts 
) 

Phân tích kết quả.

fromJSON(rawToChar(search_example)) 
+0

Tôi đang gặp vấn đề với việc sử dụng điều này cho một số cụm từ tìm kiếm, nhưng tôi nghi ngờ điều đó là sự cố với mạng tôi đang truy cập. Tôi cần tình nguyện viên để kiểm tra mã mẫu với các chuỗi khác nhau trong tham số 'tìm kiếm'. –

9

WikipediR, 'Một wrapper MediaWiki API trong R'

library(devtools) 
install_github("Ironholds/WikipediR") 
library(WikipediR) 

Nó bao gồm các chức năng:

ls("package:WikipediR") 
[1] "wiki_catpages"  "wiki_con"   "wiki_diff"   "wiki_page"   
[5] "wiki_pagecats"  "wiki_recentchanges" "wiki_revision"  "wiki_timestamp"  
[9] "wiki_usercontribs" "wiki_userinfo" 

Ở đây nó đang được sử dụng, nhận được các chi tiết đóng góp và sử dụng chi tiết cho một nhóm người dùng:

library(RCurl) 
library(XML) 

# scrape page to get usernames of users with highest numbers of edits 
top_editors_page <- "http://en.wikipedia.org/wiki/Wikipedia:List_of_Wikipedians_by_number_of_edits" 
top_editors_table <- readHTMLTable(top_editors_page) 
very_top_editors <- as.character(top_editors_table[[3]][1:5,]$User) 

# setup connection to wikimedia project 
con <- wiki_con("en", project = c("wikipedia")) 

# connect to API and get last 50 edits per user 
user_data <- lapply(very_top_editors, function(i) wiki_usercontribs(con, i)) 
# and get information about the users (registration date, gender, editcount, etc) 
user_info <- lapply(very_top_editors, function(i) wiki_userinfo(con, i))