Очистка и анализ страницы Википедии - PullRequest
5 голосов
/ 27 октября 2009

Мне интересно, существуют ли какие-либо библиотеки в Objective-C или доступные из них, которые позволили бы мне очищать страницы, отформатированные как эта . В частности, все даты и весь текст рядом с каждой датой. Если нет, то каков будет лучший способ сделать это? Регулярные выражения? Я слышал, что NSString может уже иметь встроенные методы для этого. Это правда?

Я оглядывался по сторонам, чтобы посмотреть, есть ли какая-либо альтернатива очистке, такая как файл XML или API. Я нашел API, но единственные клиенты, которых я вижу, доступны на других языках, и они, похоже, просто могут публиковать контент на страницах, а не извлекать его.

РЕДАКТИРОВАТЬ : Итак, я нашел больше информации об API по этим ссылкам:

И я смог придумать этот запрос , который возвращает некоторый текст в кодировке HTML (Ну, формат XML, но он включает текст страницы, такой как »a href= и т. Д. Я буду продолжать искать через документы, чтобы посмотреть, смогу ли я сделать это немного лучше, если нет, есть ли какие-нибудь рекомендации по его анализу?

РЕДАКТИРОВАТЬ 2 : Хорошо, благодаря этой странице документа , самый простой и понятный способ получения данных с использованием этой созданной ссылки который возвращает необработанные данные ( в вики-разметке ) соответствующего раздела. Тем не менее, я думаю, что тогда мне нужно будет разобрать это, хотя, если это действительно так, это должно быть намного проще, чем вся статья.

Есть ли у кого-нибудь рекомендации по разбору вики-разметки, такие как приведенные ниже в Objective-C?

==Events==
* [[710]] – [[Saracen]] invasion of [[Sardinia]].
*[[1275]] – Traditional founding of the city of [[Amsterdam]].
*[[1682]] – [[Philadelphia]], [[Pennsylvania]] is founded.

В конечном итоге я хочу получить NSDictionary или подобную коллекцию, в которой будет храниться дата с сопровождающим фрагментом информации. Спасибо!

Ответы [ 7 ]

4 голосов
/ 27 октября 2009

Добавьте &format=fmt в конец вашего запроса, как описано в API: Data_formats . Ваш запрос становится: JSON-запрос , например. Вы можете указать XML, JSON или многие другие форматы.

Вы можете легко проанализировать общие разделы, а затем просто отобразить вывод в формате HTML в веб-просмотр.

3 голосов
/ 28 октября 2009

Я почистил много данных из WP различными способами. Формат зависит от многих вещей, включая тип субдомена, в котором находится информация, и когда она была введена. Основной текст в свободном формате, и не существует простого способа его очистить. Инфобоксы представлены в специальном формате WP, который менялся с годами. Это не было предназначено, чтобы быть очищенным.

Существует резервная копия базы данных, которая несколько более структурирована.

Безусловно, ваша лучшая стратегия - связаться с Википедистами в домене, который вы хотите очистить - они будут знать о формате базы данных и вполне могут помочь - они, безусловно, захотят помочь, так как они захочет увидеть WP в семантической форме (например, DBPedia - http://dbpedia.org/About).

3 голосов
/ 27 октября 2009

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

2 голосов
/ 28 октября 2009

Считается ли Python? ;) Это доступно из Objective-C . И есть отличные модули для очистки: красивое мыло и / или механизация, вы также можете рассмотреть lxml.

1 голос
/ 27 октября 2009

Я собираюсь предложить регулярное выражение для целевого извлечения данных в смешанном потоке данных HTML.

На телефоне уже есть библиотеки RegEx, они вроде как скрыты - вы можете открыть их с помощью нескольких простых вызовов, используя RegexKitLite (обязательно прокрутите вниз и получите облегченную версию). В конечном итоге он становится классом с несколькими расширениями в NSString, который позволяет вам выполнять регулярные выражения, а затем вы определяете регулярное выражение с двумя захваченными совпадениями - одно для числа и одно для содержимого, а также число не записанных совпадений для ограждающие и промежуточные метки. Несмотря на то, что это «облегченная» версия стандартного RegEX, он поддерживает практически все возможности, которые вам понадобятся.

Подход API является многообещающим, но как только вы получите исходную разметку, вам, вероятно, придется использовать аналогичный подход регулярных выражений для анализа данных. Тем не менее, это может иметь смысл, если он уменьшает сложность регулярных выражений и время передачи данных, но нет причин, по которым вы не можете объединить оба подхода.

0 голосов
/ 28 октября 2009

У меня есть приложение для iPhone, которое выполняет очистку экрана, используя следующее:

Используя YQL, вы можете получать всю необходимую информацию из Интернета, используя XPATH-запросы к DOM.

Лично я считаю, что это намного лучше, чем использовать Regex. Опять же, я знаю только очень простые регулярные выражения.

0 голосов
/ 27 октября 2009

это определенно не способ сделать это, на любом языке.

если какой-либо сайт в Интернете представит свои данные в хорошем виде, это будет Википедия.

Посмотрите на получение статьи в формате XML, RDF или, может быть, даже в формате JSON.

...