Очистка и анализ страницы Википедии

Мне интересно, существуют ли какие-либо библиотеки в 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 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам