Создайте набор данных по вашему выбору из Википедии: набор данных о знаменитостях

Должно быть, с большинством из нас случалось, что всякий раз, когда мы хотим узнать об истории какой-либо страны, памятниках, сериалах и фильмах, жизни и карьере знаменитостей, происшествиях из прошлого или текущих событиях, наш первый выбор - это Википедия. Умные люди используют его, чтобы получить самые разные знания и звучать еще умнее. Но приходило ли вам когда-нибудь в голову, насколько она обширна? Сколько у него документов / статей?

В настоящее время в Википедии около 5,98 миллиона статей, и их количество увеличивается с каждым днем. Есть широкий выбор статей из всех областей. Мы можем использовать эти данные для создания множества интересных приложений. Каким было бы ваше следующее интересное приложение, если бы у вас был доступ к этим данным? Как получить весь этот набор данных? Даже если вы его получите, сколько вычислений потребуется для его обработки?

На все эти вопросы будут даны ответы.

В этой статье я хочу создать набор данных о знаменитостях. Все популярные люди прошлого или настоящего, у которых есть страницы в Википедии, такие как Вират Коли, Сачин Тендулкар, Рики Понтинг из Cricket, Брэд Питт, Леонардо Ди Каприо, Амитабх Баччан из фильмов, физики, такие как Альберт Эйнштейн, Исаак Ньютон и т. Д. используйте Apache Spark (PySpark) для обработки этого огромного набора данных.

1. Получение дампа Википедии

Для начала работы с задачей нам понадобится дамп Википедии. Дамп Википедии можно скачать в формате XML здесь. Он постоянно обновляется и содержит самые свежие данные из Википедии.

Скрипт для синтаксического анализа XML Википедии

Затем этот загруженный XML можно очень легко проанализировать с помощью свободно доступного пакета Python. Более подробную информацию о том, как пользоваться пакетом, можно найти здесь.

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

Каждый каталог состоит из нескольких текстовых файлов. Снимок содержимого файла

Каждый файл содержит несколько статей из Википедии. Каждая статья начинается с тега ‹doc› и заканчивается ‹/doc›. Следующий шаг - просмотреть все эти файлы и отфильтровать статьи, соответствующие знаменитостям. Если мы используем для этого одну машину, это может занять даже дни, поскольку это задача, требующая значительных вычислительных ресурсов. Мы будем использовать платформу распределенных систем, Apache Spark (PySpark) для выполнения задачи, которая займет всего несколько 10-15 минут с разумным количеством исполнителей.

2. Обработка проанализированных данных Википедии с помощью Apache Spark (PySpark)

Apache Spark

Apache Spark - это молниеносная технология кластерных вычислений, предназначенная для быстрых вычислений. Он основан на Hadoop MapReduce и расширяет модель MapReduce, чтобы эффективно использовать ее для большего количества типов вычислений, включая интерактивные запросы и потоковую обработку. Главная особенность Spark - это кластерные вычисления в памяти, которые увеличивают скорость обработки приложения.

Некоторые терминологии и функции преобразования Apache Spark (необязательно)

Этот раздел не является обязательным. Этот раздел предназначен для начинающих пользователей Spark или для тех, кто хочет быстро освежить некоторые функции преобразования Spark, прежде чем продолжить. Чтобы узнать больше об этих функциях, перейдите по этой ссылке.

  • RDD: RDD (устойчивый распределенный набор данных) - это фундаментальная структура данных Apache Spark, которая представляет собой неизменяемую коллекцию объектов, которые вычисляются на разных узлах кластера. RDD - это распределенный набор элементов данных, распределенных по множеству машин в кластере.
  • DataFrame: DataFrame - это распределенный набор данных, организованных в именованные столбцы. Концептуально он аналогичен таблице в реляционной базе данных.
  • map (): функция карты выполняет итерацию по каждой строке в RDD и разбивается на новые RDD. Используя преобразование map (), мы берем любую функцию, и эта функция применяется к каждому элементу RDD.
  • flatMap (): с помощью функции flatMap () для каждого входного элемента у нас есть много элементов в выходном RDD. Самый простой способ использования flatMap () - разбить каждую входную строку на слова.
  • filter (): функция Spark RDD filter () возвращает новый RDD, содержащий только элементы, соответствующие предикату.
  • WholeTextFiles (): completeTextFiles возвращает PairRDD, ключ которого является путем к файлу, а значение - его содержимым.

Начало работы с задачей

Прежде всего, мы получим все данные, переданные в HDFS, и прочитаем их с помощью WholeTextFiles.

data = sc.wholeTextFiles(“hdfs:///Data_w/*/*”)

Выходные данные будут иметь RDD, связанный с парой ключ-значение, где ключ - это путь к файлу, а содержимое - значение. Мы можем избавиться от пути к файлу и просто заняться содержимым. Каждый файл содержит несколько статей из Википедии, разделенных тегом ‹doc›. Нам нужно выпустить все эти статьи отдельной записью. Для этого мы воспользуемся функцией flatMap ().

pages = data.flatMap(lambda x :(x[1].split('</doc>')))

Когда у нас есть все статьи, нам нужно найти, о чем они. Каждая статья состоит из заголовка первой строки и содержания. Мы можем использовать эту информацию для преобразования каждой статьи в пару «ключ-значение», где ключ - это заголовок, а значение - это контент.

pages = data.flatMap(lambda x :(x[1].split(‘</doc>’))).map(lambda x : (get_title(x),get_content(x)))

Далее необходимо отфильтровать только статьи, относящиеся к людям (знаменитостям). Прежде чем писать логику для этого, давайте посмотрим, как выглядят некоторые страницы знаменитостей.

Давайте также взглянем на страницу некоторых не знаменитостей.

Чем отличается страница знаменитостей от страницы не знаменитостей? Что общего у всех страниц о знаменитостях?

Большинство страниц знаменитости в первом предложении содержат дату рождения. Эта дата рождения находится в любом из этих двух форматов в данных Википедии:

  1. Месяц Дата, Год: Как 12 августа 1993 г.
  2. Дата Месяц Год: Как 12 августа 1993 г.

Мы можем использовать этот факт, чтобы быстро отфильтровать все страницы со знаменитостями. Я буду использовать Regex, чтобы найти этот формат.

Наконец, мы можем сохранить результат в виде таблицы. Полный код выглядит так:

3. Проверка созданного набора данных о знаменитостях.

Всего в Википедии около 5,98 миллиона статей. В нашем наборе данных о знаменитостях 1,38 миллиона статей. Список всех знаменитостей и датасеты, полученные вместе с кодом, можно найти здесь.

Набор данных содержит статьи о Майкле Джексоне, Амитабхе Баччане, Брэде Питте, Сачине Тендулкаре, М.С. Дхони и всех других знаменитостях, о которых мы могли подумать и проверить.

4. Вывод

Википедия - одно из лучших мест для получения всей возможной информации в Интернете. Мы можем использовать его для создания множества интересных приложений, вашего следующего большого и интересного проекта НЛП. С использованием Apache Spark обработка этих массивных данных становится простой задачей. С помощью всего лишь 20–25 строк кода мы можем создать из него большинство интересных наборов данных.

Чтобы написать хороший пост, понятный и понятный для аудитории, нужно приложить немало усилий. Я буду продолжать пытаться оправдать свою работу. Подпишитесь на меня в Medium и посмотрите мои предыдущие сообщения. Приветствую отзывы и конструктивную критику. Список всех знаменитостей и датасеты, полученные вместе с кодом, можно найти здесь.

Мой канал Youtube для получения дополнительной информации:



5. Ссылки

  1. Https://www.tutorialspoint.com/apache_spark/apache_spark_introduction.htm
  2. Https://spark.apache.org/
  3. Https://en.wikipedia.org/wiki/Apache_Spark
  4. Https://en.wikipedia.org/wiki/MapReduce
  5. Https://data-flair.training/blogs/spark-rdd-operations-transformations-actions/
  6. Https://data-flair.training/blogs/spark-rdd-tutorial/
    https://data-flair.training/blogs/apache-spark-rdd-vs-dataframe-vs-dataset /
  7. Https://www.analyticsvidhya.com/blog/2019/10/pyspark-for-beginners-first-steps-big-data-analysis/
  8. Https://blog.softhints.com/python-regex-match-date/