Как получить только разобранный информационный блок из статьи в Википедии? - PullRequest
9 голосов
/ 13 июня 2009

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

Еще раз спасибо.


EDIT

Ну, у меня есть таблица БД с названиями стран. И у меня есть сценарий, который берет страну и показывает ее детали. Я хотел бы взять информационный блок - синюю коробку со всеми изображениями страны и т. Д., Как она есть в Википедии, и показать ее на моей странице. Я хотел бы знать действительно простой и легкий способ сделать это - или иметь скрипт, который просто загружает информацию инфобокса в локальную удаленную систему, к которой я мог получить доступ позже. Я имею в виду, что я открыт для идей здесь - за исключением того, что конечный результат, который я хочу, это увидеть информационный блок на моей странице - конечно, с небольшой ссылкой Content by Wikipedia внизу:)


EDIT

Я думаю, что нашел то, что искал на http://infochimps.org - они получили множество наборов данных, я думаю, на языке YAML. Я могу использовать эту информацию как есть, но мне нужен был бы способ постоянно обновлять эту информацию из Википедии время от времени, хотя я считаю, что информационные блоки редко меняются, особенно в странах, если только какая-либо страна не решит изменить свою столицу или около того.

Ответы [ 8 ]

14 голосов
/ 30 ноября 2010

Я бы использовал API Википедии (Викимедиа). Вы можете получить данные обратно в формате JSON, XML, php и других. Затем вам все равно нужно будет проанализировать возвращенную информацию, чтобы извлечь и отформатировать нужную информацию, но информация о запуске, остановке и типах информации ясна.

Запустите ваш запрос только для rvsection = 0, так как в этом первом разделе вы найдете материал перед первым разрывом раздела, включая информационный блок. Затем вам нужно будет проанализировать содержимое инфобокса, что не должно быть слишком сложным. См. En.wikipedia.org/w/api.php для официальной документации API википедии и www.mediawiki.org/wiki/API для руководства.

Запустите, например, запрос: http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=fortran&rvsection=0

10 голосов
/ 13 июня 2009

Я предлагаю вам использовать DBPedia , который уже сделал работу по превращению данных в Википедии в удобные для использования, доступные для связи, открытые формы.

2 голосов
/ 21 апреля 2015

Чтобы загрузить проанализированный первый раздел, просто добавьте этот параметр в конец URL-адреса API

rvparse

Вот так: http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=fortran&rvsection=0&rvparse

Затем проанализируйте html, чтобы получить таблицу infobox (используя Regex)

    $url = "http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Niger&rvsection=0&rvparse";
    $data = json_decode(file_get_contents($url), true);
    $data = current($data['query']['pages']);
    $regex = '#<\s*?table\b[^>]*>(.*)</table\b[^>]*>#s';
    $code = preg_match($regex, $data["revisions"][0]['*'], $matches);
    echo($matches[0]);
2 голосов
/ 17 ноября 2010

Существует ряд поставщиков семантических данных, из которых вы можете извлекать структурированные данные вместо того, чтобы пытаться анализировать их вручную:

  • DbPedia - как уже упоминалось, предоставляет конечную точку SPARQL, которую можно использовать для запросов данных. Существует несколько библиотек, доступных для нескольких платформ, включая PHP.

  • Freebase - еще один провайдер данных Creative Commons. Исходный набор данных основан на проанализированных данных Википедии, но есть некоторая информация, взятая из других источников. Набор данных может быть отредактирован любым, и, в отличие от Википедии, вы можете добавлять свои собственные данные в свое собственное пространство имен, используя настраиваемую схему. Использует собственный язык запросов под названием MQL, основанный на JSON. Данные имеют ссылки WebID обратно на соответствующие статьи Википедии. Бесплатная база также предоставляет количество загружаемых дампов данных. Freebase имеет ряд клиентских библиотек, включая PHP.

  • Geonames - база данных географических местоположений. Имеет API, который предоставляет информацию о стране и регионе для заданных координат, ближайших местоположений (например, город, железнодорожный вокзал и т. Д.)

  • Opensteetmap - созданная сообществом карта мира. Имеет API, позволяющий запрашивать объекты по местоположению и типу.

  • Wikimapia API - еще один сервис определения местоположения

2 голосов
/ 13 июня 2009

Зависит от того, по какому маршруту вы хотите идти. Вот некоторые возможности:

  1. Установите MediaWiki с соответствующими модификаций. Это ведь PHP-приложение, разработанное специально для анализа ... * вики-текст 1004 *
  2. Загрузите статическую HTML-версию и проанализируйте нужные части.
  3. Используйте API Википедии с соответствующим кэшированием.

НЕ просто нажмите на последнюю версию живой страницы и повторяйте анализ каждый раз, когда ваше приложение хочет коробку. Это огромная трата ресурсов для вас и Викимедиа.

1 голос
/ 13 июня 2009

если вы хотите разобрать один раз все статьи, в википедии есть все статьи в формате xml,

http://en.wikipedia.org/wiki/Wikipedia_database

В противном случае вы можете просмотреть отдельные статьи, например,

0 голосов
/ 01 августа 2018

Чтобы обновить это немного: большая часть данных в информационных блоках Википедии теперь взята из Wikidata , которая является бесплатной базой структурированной информации. См., Например, страницу данных для Германии и https://www.wikidata.org/wiki/Wikidata:Data_access для получения информации о программном доступе к данным.

0 голосов
/ 13 июня 2009

Я предлагаю выполнить WebRequest против википедии. Оттуда у вас будет страница, и вы можете просто проанализировать или запросить данные, которые вам нужны, используя регулярное выражение, сканирование символов или какую-либо другую форму, с которой вы знакомы. По сути скребок экрана!

РЕДАКТИРОВАТЬ - я бы добавил к этому ответу, что вы можете использовать HtmlAgilityPack для тех, кто в C # land. Для PHP это выглядит как SimpleHtmlDom. Сказав, что, похоже, Википедия имеет более чем адекватный API. Этот вопрос, вероятно, лучше всего отвечает вашим потребностям:

Есть ли API Википедии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...