Получить все шаблоны Wikipedia Infobox и все страницы, используя их

учитывая страницу Википедии, как Википедия: Переполнение Стека часто встречаются Инфобоксы (в основном справа вверху страницы). Пример скриншота:

Stackoverflow Infobox at Wikipedia

  1. DBPedia перечисляет все эти атрибуты как тройки RDF. Вы можете увидеть пример DBPedia: Переполнение Стека. Там вы видите свойство dbpprop:wikiPageUsesTemplate со значением dbpedia:Template:Infobox_website что интересно. Я хочу знать, какие страницы Википедии используют этот шаблон. Как я могу это сделать и перечислить все страницы, которые используют шаблон Infobox_website? Предпочтительно с запросом SPARQL, но я открыт для других простых решений.

  2. далее Список всех шаблонов Infobox. Википедия: Категория Шаблоны Infobox показывает иерархию желаемых категорий Википедии-это похоже на то, что я ищу. Но я хочу, чтобы все это в машиночитаемом формате, на одной странице. Может быть, DBPedia здесь тоже правильно? На DBPedia: Категория Шаблоны Infox и DBPedia: INFOBOX Я нашел очень мало информации. Но они выглядят очень многообещающе. Как я могу использовать SPARQL для поиска всех типов Infobox, чтобы я мог сделать Шаг 1 несколько раз для каждого из них?

вы можете использовать это для тестирования запросов SPARQL:http://dbpedia.org/snorql/

обновление 1

Кажется, я решил проблему номер 1:SPARQL: список всех страницы с Infobox_website

обновление 2

кроме того, это, кажется, запрос для проблемы номер 2:SPARQL: список всех Infoboxes

3 ответов


предыдущие ответы, похоже, перестали работать. Только небольшое изменение требуется, чтобы заставить их работать на новой конечной точке запроса dbpedia в http://live.dbpedia.org/sparql хотя.

чтобы получить список всех страниц и шаблонов, которые они используют, этот запрос работает:

SELECT * WHERE {  ?page  dbpprop:wikiPageUsesTemplate ?template . }

см. результаты (ограничено 100)

если вы ищете конкретный шаблон:

SELECT * WHERE {  
   ?page  
   dbpprop:wikiPageUsesTemplate 
   <http://dbpedia.org/resource/Template:Infobox_website> . 
}

посмотреть результаты

и для моего случая использования меня интересует URL Википедии, а не страница DBPedia, поэтому я использую этот запрос:

SELECT ?wikipedia_url WHERE {  
   ?page  
   dbpprop:wikiPageUsesTemplate 
   <http://dbpedia.org/resource/Template:Infobox_website> . 
   ?page foaf:isPrimaryTopicOf ?wikipedia_url .
}

посмотреть результаты

Я также использую curl чтобы вытащить результаты в скрипт:

$ curl -s "http://live.dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=SELECT+%3Fwikipedia_url+WHERE+%7B+%0D%0A%09+%3Fpage+%0D%0A%09+dbpprop%3AwikiPageUsesTemplate+%0D%0A%09+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FTemplate%3AInfobox_website%3E+.+%0D%0A+%3Fpage+foaf%3AisPrimaryTopicOf+%3Fwikipedia_url+.%0D%0A%0D%0A%09%7D&format=text%2Ftab-separated-values" \
| tr -d \" | grep -v "^wikipedia_url$" | head
http://en.wikipedia.org/wiki/U.S._News_&_World_Report
http://en.wikipedia.org/wiki/FriendFinder
http://en.wikipedia.org/wiki/Debkafile
http://en.wikipedia.org/wiki/GTPlanet
http://en.wikipedia.org/wiki/Lithuanian_Wikipedia
http://en.wikipedia.org/wiki/Connexions
http://en.wikipedia.org/wiki/Hypno5ive
http://en.wikipedia.org/wiki/Scoop_(website)
http://en.wikipedia.org/wiki/Bhoomi_(software)
http://en.wikipedia.org/wiki/Brainwashed_(website)

Я не уверен, что это дает полный набор результатов, хотя, потому что он возвращает 1698 результатов, тогда как wmflabs.org кажется, что должно быть 4439.


для вторая часть вашего вопроса, только небольшое изменение требуется от предыдущего запроса, чтобы получить список всех шаблонов:

SELECT DISTINCT ?template WHERE { 
    ?page  
    dbpprop:wikiPageUsesTemplate  
    ?template . 
    FILTER (regex(?template, "Infobox")) . 
} ORDER BY ?template

посмотреть результаты


хорошо, так как я, кажется, нашел решение (скорее всего, не лучшее), я хочу поделиться ими.

1) этот запрос SPARQL можно использовать для поиска всех страниц, которые включают определенный тип Infobox:

ВЫБРАТЬ * ГДЕ { ?страница dbpedia2: wikiPageUsesTemplate . ?страница dbpedia2: имя ?имя. }

ссылка на SNORQL


2) этот запрос SPARQL может быть используется для поиска всех типов Инфобокс:

ВЫБРАТЬ DISTINCT ?шаблон где { ?страница dbpedia2: wikiPageUsesTemplate ?шаблон. Фильтр (регулярное выражение (?шаблон, "Infobox")). } ЗАКАЗ ?шаблон

ссылка на SNORQL


вы также можете использовать API MediaWiki embeddedin запрос для возврата списка всех страниц, включающих данный шаблон. Вы хотите использовать библиотеку для доступа к API хотя, какой язык вы предпочитаете? Для Руби, я бы предложил MediaWiki:: Gateway.