Есть ли решение для анализа файла дампа Википедии XML в Java? - PullRequest
3 голосов
/ 20 мая 2010

Я пытаюсь разобрать этот огромный XML-файл 25GB Plus wikipedia.Любое решение, которое поможет, будет оценено.Желательно решение на Java.

Ответы [ 8 ]

7 голосов
/ 20 мая 2010

API Java для анализа дампов Wikipedia XML: WikiXMLJ (Последнее обновление было в ноябре 2010 г.).
Также есть живое зеркало , которое совместимо с maven с некоторыми исправлениями ошибок.

4 голосов
/ 20 мая 2010

Конечно, можно анализировать огромные XML-файлы с помощью Java, но вы должны использовать правильный тип XML-анализатора - например, SAX-анализатор, который обрабатывает элемент данных по элементам, а не DOM-анализатор, который пытается загрузить весь документ в память.

Невозможно дать вам полное решение, потому что ваш вопрос очень общий и поверхностный - что именно вы хотите сделать с данными?

3 голосов
/ 15 ноября 2010

Вот активный java-проект, который можно использовать для анализа файлов дампа википедии xml:
http://code.google.com/p/gwtwiki/. Существует множество примеров Java-программ для преобразования содержимого википедии xml в html, pdf, text, ...: http://code.google.com/p/gwtwiki/wiki/MediaWikiDumpSupport

Масси

2 голосов
/ 20 мая 2010

Да, верно. Не используйте DOM. Если вы хотите прочитать только небольшое количество данных и хотите сохранить их в собственном POJO, вы также можете использовать XSLT-преобразование.

Преобразование данных в формат XML, который затем преобразуется в некоторый POJO с использованием Castor / JAXB (XML для библиотек объектов).

Пожалуйста, поделитесь, как вы решаете проблему, чтобы другие могли лучше подходить.

спасибо.

--- EDIt ---

Проверьте ссылки ниже для лучшего сравнения между различными парсерами. Кажется, что STAX лучше, потому что он контролирует анализатор и извлекает данные из анализатора, когда это необходимо.

http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP2.html

http://tutorials.jenkov.com/java-xml/sax-vs-stax.html

1 голос
/ 20 мая 2010

Я бы пошел с StAX, поскольку он обеспечивает большую гибкость, чем SAX (также хороший вариант).

1 голос
/ 20 мая 2010

Если вы не собираетесь писать или изменять что-либо в этом xml, рассмотрите возможность использования SAX . Он сохраняет в памяти один узел за раз (вместо DOM, который пытается построить все дерево в памяти).

0 голосов
/ 19 февраля 2015

У меня была эта проблема несколько дней назад, я обнаружил, что вики-парсер, предоставленный https://github.com/Stratio/wikipedia-parser, работает. Они передают файл xml и читают его кусками, которые затем можно записать в обратных вызовах.

Это фрагмент того, как я использовал его в Scala:

val parser = new XMLDumpParser(new BZip2CompressorInputStream(new BufferedInputStream(new FileInputStream(pathToWikipediaDump)), true))

  parser.getContentHandler.setRevisionCallback(new RevisionCallback {
  override def callback(revision: Revision): Unit = {
  val page = revision.getPage
  val title = page.getTitle
  val articleText =  revision.getText()
  println(articleText)
}

Он передает википедию, анализирует ее и каждый раз, когда находит ревизию (статью), получает название, текст и печатает текст статьи. :)

--- Редактировать ---

В настоящее время я работаю над https://github.com/idio/wiki2vec, который, я думаю, выполняет ту часть конвейера, которая может вам понадобиться. Не стесняйтесь взглянуть на код

0 голосов
/ 04 февраля 2015

Существует отдельное приложение, которое анализирует дампы Википедии в XML и обычный текст, называемое Wiki Parser .

В принципе, вы можете анализировать дамп Википедии, а затем использовать Java для выполнения всего, что вам нужно, с XML или простым текстом.

Преимущество такого подхода заключается в том, что WikiParser очень быстр и занимает всего 2-3 часа для анализа всех текущих статей на английском в Википедии.

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