межстраничные ссылки википедии по идентификатору страницы

Что?
Я пытаюсь получить постраничную карту ссылок (матрицу) страниц википедии от page_id в следующем формате:

from1 to1 to2 to3 ...
from2 to1 to2 to3 ...
...

Почему?
Я ищу набор данных (страницы из Википедии), чтобы попробовать PageRank.

Проблема:
На dumps.wikimedia.org можно загрузить pages-articles.xml, который представляет собой XML в следующем формате:

<page>
  <title>...</title>
  <id>...</id>          // pageid
  <text>...</text>
</page>

который я буду использовать для извлечения статей (text), а также базовые постраничные данные (page.sql), которые содержат некоторые сведения о страницах, созданных page_id, и последнее, что мне кажется важным, это pagelinks.sql, который содержит записи ссылок между страницами. Проблема в том, что таблица pagelinks имеет следующие поля: pl_from, pl_namespace и pl_title.

Идея: создать временную базу данных, импортировать таблицы page и pagelinks и создать эту матрицу, используя таблицу pagelinks и извлекая page_ids в соответствии с pl_titles. Возможное решение:

SELECT pl_from, GROUP_CONCAT(page_id SEPARATOR ' ') FROM pagelinks
    JOIN page ON 
        pl_title = page_title AND pl_namespace = page_namespace
GROUP BY pl_from

или для получения карты "обратных ссылок" (to1 from1 from2 from3 ..., а не from1 to1 to2 to3 ...):

SELECT page_id, GROUP_CONCAT(pl_from SEPARATOR ' ') FROM pagelinks
    JOIN page ON 
        pl_title = page_title AND pl_namespace = page_namespace
GROUP BY page_id

Вопрос:
Можно ли где-нибудь взять такую ​​матрицу межстраничных ссылок от page_id, чтобы мне не нужно было создавать ее самостоятельно? Или, если нет, есть ли более быстрый способ получить такую ​​​​матрицу, чем решение, которое я указал?


person LihO    schedule 01.10.2012    source источник


Ответы (2)


Я думаю, что импорт обеих таблиц в базу данных и использование этого, вероятно, самый простой способ сделать это (и для этого вам не нужен pages-articles.xml).

Другой вариант - вручную проанализировать два файла sql, не импортируя их в базу данных. На самом деле я создал библиотеку, которая делает именно это в .Net.

person svick    schedule 01.10.2012
comment
Тогда, может быть, вам нужны какие-то индексы? Я не уверен, создают ли их файлы sql. - person svick; 01.10.2012
comment
Индексы уже есть, я думаю, что это ограничено скоростью моего диска... жаль, что page_id уже не является частью таблицы pagelinks... неважно, все равно спасибо за помощь :) - person LihO; 01.10.2012

Что ж, для анализа файлов XML, я думаю, вы можете попробовать эту ссылку:

http://haselgrove.id.au/wikipedia.htm

Есть подход, а также пара готовых файлов .m(MATLAB,OCTAVE), которые могут очистить ваш дамп. Кроме того, в файле .txt есть дамп предварительной обработки. Хотя он довольно старый. 2009 или около того.

person Ankit Vadehra    schedule 25.10.2014