Получить все шаблоны информационных блоков Википедии и все страницы, использующие их

#mediawiki #wikipedia #sparql #dbpedia

#mediawiki #википедия #sparql #dbpedia

Вопрос:

На странице Википедии, подобной Wikipedia: Stack Overflow, часто есть информационные ящики (в основном справа вверху страницы). Пример скриншота:

Информационный блок Stackoverflow в Википедии

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

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

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

Обновление 1

Кажется, я решил проблему № 1: <a rel="noreferrer noopener nofollow" href="https:///dbpedia.org/snorql/?query=SELECT * WHERE { ?page dbpedia2:wikiPageUsesTemplate . ?page dbpedia2:name ?name .}» rel=»noreferrer»>SPARQL: перечислите все страницы с помощью Infobox_website

Обновление 2

Кроме того, это, похоже, запрос для проблемы № 2: SPARQL: перечислите все информационные ящики

Комментарии:

1. Ваш запрос «Обновить 1» теперь не возвращает результатов. У вас все еще есть рабочее решение?

2. извините, я тоже застрял. пожалуйста, дайте мне знать, если вы найдете решение

3. Да, нашел решение, добавлю в качестве ответа

Ответ №1:

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

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

ВЫБЕРИТЕ * ГДЕ { ?страница dbpedia2:wikiPageUsesTemplate <http://dbpedia.org/resource/Template:Infobox_website > . ?страница dbpedia2:имя ?имя . }

<a rel="noreferrer noopener nofollow" href="https:///dbpedia.org/snorql/?query=SELECT * WHERE { ?page dbpedia2:wikiPageUsesTemplate . ?page dbpedia2:name ?name .}»>Ссылка на SNORQL


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

ВЫБЕРИТЕ DISTINCT ?шаблон, ГДЕ { ?страница dbpedia2:wikiPageUsesTemplate ?шаблон . ФИЛЬТР (регулярное выражение (?шаблон, «Инфобокс»)) . } ПОРЯДОК ПО ?шаблону

Ссылка на SNORQL

Ответ №2:

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

<a rel="noreferrer noopener nofollow" href="https:///live.dbpedia.org/sparql?query=SELECT * WHERE { ?page dbpprop:wikiPageUsesTemplate . }» rel=»nofollow»>Посмотреть результаты

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

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

<a rel="noreferrer noopener nofollow" href="https:///live.dbpedia.org/sparql?query=SELECT ?wikipedia_url WHERE { ?page dbpprop:wikiPageUsesTemplate . ?page foaf:isPrimaryTopicOf ?wikipedia_url . }» rel=»nofollow»>Посмотреть результаты

Я также использую curl для извлечения результатов в скрипт:

 $ curl -s "http://live.dbpedia.org/sparql?default-graph-uri=http://dbpedia.orgamp;query=SELECT ?wikipedia_url WHERE { 
	 ?page 
	 dbpprop:wikiPageUsesTemplate 
	  . 
 ?page foaf:isPrimaryTopicOf ?wikipedia_url .

	}amp;format=text/tab-separated-values" 
| tr -d " | grep -v "^wikipedia_url$" | head
http://en.wikipedia.org/wiki/U.S._News_amp;_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 на новую конечную точку с решением обеих проблем в вопросе, я отмечу это как принятый ответ.

2. Новая конечная точка не позволяет вам напрямую ссылаться на браузер запросов. Однако я добавлю ссылки на результаты.

3. О, позвольте мне также ответить на вторую часть

4. dbpprop префикс генерирует Undefined namespace prefix ошибку, замена его на dbp , кажется, делает свое дело

Ответ №3:

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

Комментарии:

1. они выглядят очень ограниченными. как отобразить все типы информационных ящиков одновременно?