Получить все шаблоны Wikipedia Infobox и все страницы, используя их - PullRequest
9 голосов
/ 03 ноября 2011

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

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: список всех информационных блоков

Ответы [ 3 ]

8 голосов
/ 04 ноября 2011

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

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

SELECT * WHERE {? Page dbpedia2: wikiPageUsesTemplate .? страница dbpedia2: имя? имя.}

Ссылка на SNORQL


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

SELECT DISTINCT - шаблон WHERE {? Page dbpedia2: wikiPageUsesTemplate? Template.ФИЛЬТР (регулярное выражение (? Template, "Infobox")).} ORDER BY? Template

Ссылка на SNORQL

2 голосов
/ 13 августа 2015

Предыдущие ответы, похоже, перестали работать.Требуется лишь небольшое изменение, чтобы заставить их работать в новой конечной точке запроса 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 голос
/ 04 ноября 2011

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

...