В таблице iwlinks Википедии хранятся только некоторые ссылки на страницы Викитанных. Где остальные? - PullRequest
1 голос
/ 13 апреля 2020

Я использую извлечения из Википедии для обработки Википедии вместо API Википедии, потому что я хотел бы быстро выполнять множество запросов.

Я хотел бы соединить страницы Википедии с соответствующими страницами Википедии. Насколько я понимаю, таблица iwlinks содержит эту информацию. Однако, хотя я смог проверить это на некоторых страницах Википедии, я также смог убедиться, что это не относится к другим.

Например, если мы посмотрим на Википедию Metallica page в таблице iwlinks, мы получаем:

iwl_from, iwl_prefix, iwl_title
'18787', 'c', 'Special:Search/Metallica'
'18787', 'd', 'Q15920'
'18787', 'q', 'Special:Search/Metallica'

Где строка, содержащая 'd' в столбце iwl_namespace, содержит информацию о том, где найти страницу Metallica Wikidata (т.е. Q15920).

Однако, если мы ищем таблицу iwlinks для страницы Википедии Тома Селлека , используя:

SELECT * FROM iwlinks ГДЕ iwl_from = 277451;

мы получаем:

iwl_from, iwl_prefix, iwl_title
'277451', 'commons', 'Tom_Selleck'
'277451', 'q', 'Special:Search/Tom_Selleck'

Ни одна из этих строк не содержит информации о его его странице Викиданных . Однако его страница в Википедии содержит ссылку «Элемент Wikidata» на его страницу Wikidata, поэтому, предположительно, она должна где-то храниться, но я не могу ее найти.

Буду очень признателен за любые предложения, которые вы можете придумать .

PS Бонусные баллы, если вы можете указать мне правильное направление, чтобы выяснить, где хранится информация о лицензии для каждого изображения в Википедии.

Ответы [ 2 ]

3 голосов
/ 13 апреля 2020

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

  • Если у вас есть страница в Википедии
  • Вы хотите получить соответствующий элемент викиданных
  • Вы, вероятно, хотите получить другие связанные страницы к этому предмету?

Если это правильно, я думаю, что вашей лучшей ставкой была бы таблица Викиданных wb_items_per_site. Почему Wikidata, а не Wikipedia? Текущая архитектура Wikibase (которая является программным обеспечением Wikidata) требует доступа к клиентской (он же Wikipedia) и базе данных репо (он же Wikidata), так как информация о странице сохраняется в клиентской базе данных, тогда как информация о подключенном элементе (включая информацию о том, что страница связана с элементом) сохраняется в базе данных репо. Эта информация сохраняется в таблице wb_items_per_site (по крайней мере, я бы ее использовал, я не разработчик из Wikibase, так что это может быть и не лучшим решением).

Например, если если вы хотите получить элемент Wikidata для статьи в Википедии, я бы выполнил следующий запрос:

select * from wb_items_per_site where ips_site_id = "enwiki" and ips_site_page = "Tom Selleck" limit 1;

(обратите внимание, что вам нужно заменить подчеркивание (_) пробелами. Это logi c что будет сделано классом Title в MediaWiki. Вывод будет выглядеть так:

ips_row_id     ips_item_id     ips_site_id     ips_site_page
540761088      213706          enwiki          Tom Selleck

(ссылка https://quarry.wmflabs.org/query/43884)

Чтобы получить другое связанные страницы из этого элемента Wikidata, вы можете выполнить второй запрос:

select * from wb_items_per_site where ips_item_id = 213706;

(см. вывод здесь , он слишком большой для вставки здесь: P)

Для вашего «бонусного вопроса»:

Информация о лицензии сохраняется в викитексте, к сожалению, это означает, что для изображений, сохраненных на en.wikipedia.org, вам нужно проанализировать Викитекст, чтобы получить соответствующую информацию о лицензии .

Один хороший момент здесь: большинство изображений не размещен на en.wikipedia.org, а скорее в проекте Wikimedia Commons. Там есть проект, называемый данными структурированного изображения или около того, цель которого состоит в том, чтобы сделать такую ​​информацию (лицензию, название, авторов и прочее) доступной структурированным, машиночитаемым способом. К сожалению, даже не все сохраненные там изображения и носители имеют структурированную информацию. Таким образом, запасной вариант всегда будет разбирать викитекст.

В Википедии установлено расширение, которое частично берет на себя эту часть анализа для вас. Эта информация, например, используется в функции MediaViewer. Информация доступна через API: https://en.wikipedia.org/w/api.php?action=query&titles=File: Альберт% 20Einstein% 20Head.jpg & prop = imageinfo & iiprop = extmetadata

Там вы получите License:

"License": {
    "value": "pd",
    "source": "commons-templates",
    "hidden": ""
}

и краткое название лицензии:

"LicenseShortName": {
    "value": "Public domain",
    "source": "commons-desc-page",
    "hidden": ""
}

К сожалению для вас, так как я предполагаю, что вы хотели бы получить эту информацию из дампов, эта информация там недоступна. Информация анализируется «на лету» по запросу API от Викитекста.

2 голосов
/ 14 апреля 2020

Вы можете найти элемент викиданных в таблице page_props. iwlinks содержит ссылки, которые появляются в тексте (посмотрите на нижнюю часть статьи Metallica, вы увидите маленькую сестринскую коробку проекта, которая является просто шаблоном викистекста; именно это сгенерировало эти iwlinks записи). Раньше ссылки на боковой панели исходили из langlinks, но Викиданные в значительной степени заменили систему межъязыковых ссылок, поэтому теперь эти ассоциации хранятся в Викиданных.

...