#mediawiki #wikipedia #sparql #dbpedia
#mediawiki #википедия #sparql #dbpedia
Вопрос:
На странице Википедии, подобной Wikipedia: Stack Overflow, часто есть информационные ящики (в основном справа вверху страницы). Пример скриншота:
-
DBpedia перечисляет все эти атрибуты в виде троек RDF. Вы можете увидеть пример в DBpedia: Stack Overflow . Там вы видите свойство
dbpprop:wikiPageUsesTemplate
со значениемdbpedia:Template:Infobox_website
, которое интересно. Я хочу знать, какие страницы Википедии используют этот шаблон. Как я могу это сделать и перечислить все страницы, которые используют шаблон Infobox_website? Желательно с помощью запроса SPARQL, но я открыт для других простых решений. -
Далее следует список всех шаблонов инфобоксов. Википедия: Шаблоны информационных блоков категорий показывают иерархию желаемых категорий Википедии — это похоже на то, что я ищу. Но я хочу, чтобы все это было в машиночитаемом формате, на одной странице. Может быть, 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 ?шаблон . ФИЛЬТР (регулярное выражение (?шаблон, «Инфобокс»)) . } ПОРЯДОК ПО ?шаблону
Ответ №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. они выглядят очень ограниченными. как отобразить все типы информационных ящиков одновременно?