PySpark: uma breve análise das palavras mais comuns em Drácula, por Bram Stoker

Considerado como um marco da literatura gótica, o icônico livro Drácula, escrito em 1897 por Bram Stoker, desperta até hoje o fascínio das pessoas por todo o mundo. Hoje, a fim de introduzir novos conceitos e funcionalidades do Apache Spark, vamos dese…


This content originally appeared on DEV Community 👩‍💻👨‍💻 and was authored by Geazi Anc

Considerado como um marco da literatura gótica, o icônico livro Drácula, escrito em 1897 por Bram Stoker, desperta até hoje o fascínio das pessoas por todo o mundo. Hoje, a fim de introduzir novos conceitos e funcionalidades do Apache Spark, vamos desenvolver uma breve análise das palavras mais comuns encontradas neste clássico livro 🧛🏼‍♂️.

Para isso, vamos desenvolver um notebook no Google Colab, um serviço de nuvem gratuito criado pelo Google para incentivar pesquisas na área de machine learning e inteligência artificial.

Caso não saiba como usar o Google Colab, confira este excelente artigo da Alura escrito pelo Thiago Santos que ensina, de forma muito didática, como usar o Colab e criar seus primeiros códigos!

O notebook deste artigo também está disponível em meu GitHub 😉.

A obra em questão foi obtida por meio do Projeto Gutenberg, um acervo digital que reúne livros de todo o mundo que já se encontram em domínio público. A versão plaintext de Drácula pode ser baixada gratuitamente aqui.

Instalação

Antes de iniciarmos o desenvolvimento de nosso notebook, é necessário fazer a instalação de duas bibliotecas: PySpark e Requests.

A biblioteca PySpark é a API oficial do Python para o Apache Spark. É com ela que vamos realizar nossa análise de dados 🎲.

Já a biblioteca Requests é uma biblioteca que nos permite fazer solicitações HTTP a um determinado website. Mediante a ela que iremos fazer o download do livro Drácula do projeto Gutenberg 🦇.

Crie uma nova célula de código no Colab e execute a seguinte linha:

!pip install pyspark
!pip install requests

Passo um: inicialização do Apache Spark

Logo após a instalação, precisamos inicializar o Apache Spark. Para isso, crie uma nova célula de código no Colab e adicione o seguinte bloco:

from pyspark.sql import SparkSession


spark = (SparkSession.builder
         .appName("The top most common words in Dracula, by Bram Stoker")
         .getOrCreate()
         )

Passo dois: download e leitura de Drácula, por Bram Stoker

Agora sim podemos começar! Nesta etapa iremos fazer o download do livro Drácula do projeto Gutenberg e, logo em seguida, fazer a leitura do arquivo através do PySpark.

O download do livro consiste, basicamente, na solicitação HTTP da URL que direciona para o livro Drácula no projeto Gutenberg. Depois, salva-se o conteúdo da solicitação, isto é, o próprio livro, no diretório atual, com o nome de Dracula – Bram Stoker.txt.

Crie uma nova célula no colab e adicione o seguinte bloco de código:

import requests


url = "https://www.gutenberg.org/cache/epub/345/pg345.txt"
filename = "Dracula - Bram Stoker.txt"

r = requests.get(url)

with open(filename, "wb") as f:
    f.write(r.content)

Feito isso, podemos fazer a leitura do livro através do PySpark. Crie uma nova célula no Colab e adicione o seguinte bloco de código:

book = spark.read.text(filename)

Passo três: Extração individual das palavras em cada uma das linhas

Após a leitura do livro, é necessário que transformemos cada uma das palavras em uma coluna no DataFrame.

Para isso, utiliza-se o método split, o qual, para cada uma das linhas, irá separar cada uma das palavras através do espaço em branco entre elas. O resultado será uma lista de palavras.

from pyspark.sql.functions import split


lines = book.select(split(book.value, " ").alias("line"))
lines.show(5)

Resultado:

+--------------------+
|                line|
+--------------------+
|[The, Project, Gu...|
|                  []|
|[This, eBook, is,...|
|[most, other, par...|
|[whatsoever., You...|
+--------------------+
only showing top 5 rows

Passo quatro: explodindo a lista de palavras em colunas no DataFrame

Depois das palavras terem sido separadas, é necessário que se faça a conversão desta lista de palavras em colunas no DataFrame.

Para tal, usa-se o método explode presente no Apache Spark.

from pyspark.sql.functions import explode, col


words = lines.select(explode(col("line")).alias("word"))
words.show(15)

Resultado:

+---------+
|     word|
+---------+
|      The|
|  Project|
|Gutenberg|
|    eBook|
|       of|
| Dracula,|
|       by|
|     Bram|
|   Stoker|
|         |
|     This|
|    eBook|
|       is|
|      for|
|      the|
+---------+
only showing top 15 rows

Passo cinco: transformando todas as palavras em minúsculas

Esta é uma etapa bem simples. Para que não haja distinção da mesma palavra por conta de letras maiúsculas, vamos transformar todas as palavras no DataFrame para letras minúsculas, fazendo o uso da função lower.

from pyspark.sql.functions import lower


words_lower = words.select(lower(col("word")).alias("word_lower"))
words_lower.show()

Resultado:

+----------+
|word_lower|
+----------+
|       the|
|   project|
| gutenberg|
|     ebook|
|        of|
|  dracula,|
|        by|
|      bram|
|    stoker|
|          |
|      this|
|     ebook|
|        is|
|       for|
|       the|
|       use|
|        of|
|    anyone|
|  anywhere|
|        in|
+----------+
only showing top 20 rows

Passo seis: eliminação de pontuação

Para que também não haja distinção da mesma palavra por conta da pontuação presente no final delas, é preciso removê-las.

Isso é feito através do método regexp_extract*, o qual extrai palavras de uma string por meio de uma expressão regular.

Calma, não precisa se assustar! A expressão é bem simples. Ela consiste em um conjunto contendo todos os símbolos de A a Z, uma ou mais vezes. Viu, eu te disse que era bem simples 👏🏼.

from pyspark.sql.functions import regexp_extract


words_clean = words_lower.select(
    regexp_extract(col("word_lower"), "[a-z]+", 0).alias("word")
)

words_clean.show()

Resultado:

+---------+
|     word|
+---------+
|      the|
|  project|
|gutenberg|
|    ebook|
|       of|
|  dracula|
|       by|
|     bram|
|   stoker|
|         |
|     this|
|    ebook|
|       is|
|      for|
|      the|
|      use|
|       of|
|   anyone|
| anywhere|
|       in|
+---------+
only showing top 20 rows

Passo sete: remoção de valores nulos

Como visto, mesmo após a remoção das pontuações ainda há colunas com valores nulos, ou seja, espaços em branco.

Para que esses espaços em branco não sejam considerados na análise da frequência de cada palavra presente no livro, é necessário removê-los.

words_nonull = words_clean.filter(col("word") != "")
words_nonull.show()

Resultado:

+---------+
|     word|
+---------+
|      the|
|  project|
|gutenberg|
|    ebook|
|       of|
|  dracula|
|       by|
|     bram|
|   stoker|
|     this|
|    ebook|
|       is|
|      for|
|      the|
|      use|
|       of|
|   anyone|
| anywhere|
|       in|
|      the|
+---------+
only showing top 20 rows

Passo oito: análise das palavras mais comuns

E, finalmente, chegamos ao fim da limpesa de nossos dados. Agora sim podemos começar a análise das palavras mais comuns presentes no livro.

Primeiro, é realizado a contagem das palavras mais frequentes no dataframe. Para isso, vamos agrupar cada uma das palavras e depois vamos usar uma função de agregação, count, para determinar quantas vezes elas aparecem.

words_count = (words_nonull.groupby(col("word"))
               .count()
               .orderBy(col("count"), ascending=False)
               )

Depois, vamos exibir as 20 palavras mais comuns. O ranque pode ser ajustado através da variável rank.

Sinta-se à vontade para ajustar a variável como preferir. Particularmente recomendo analisar o dataframe com 100 palavras, já que as primeiras palavras são compostas por preposições, pronomes pessoais, ETC.

rank = 20
words_count.show(rank)

Resultado:

+----+-----+
|word|count|
+----+-----+
| the| 8046|
| and| 5897|
|   i| 4760|
|  to| 4733|
|  of| 3743|
|   a| 2990|
|  in| 2561|
|  he| 2558|
|that| 2475|
|  it| 2172|
| was| 1878|
|  as| 1582|
|  we| 1545|
| for| 1534|
|  is| 1523|
| you| 1479|
| his| 1469|
|  me| 1454|
| not| 1420|
|with| 1321|
+----+-----+
only showing top 20 rows

Considerações finais

É isso por hoje, pessoal. Chegamos no fim de nossa breve análise.

Neste artigo, analisamos as palavras mais comuns do livro Drácula, por Bram Stoker. Para isso, foi necessário fazer uma limpesa nos dados, como dividir as palavras pelos espaços entre elas; explodir a lista de palavras em colunas no dataframe; transformar todas as letras em minúsculas; e, por fim, remover a pontuação de todo o texto através de uma expressão regular.

Espero que tenham gostado. Mantenham as estacas afiadas, cuidado com as sombras que andam pela noite, e até a próxima 🧛🏼‍♂️🍷.

Referências

RIOUX, Jonathan. Data Analysis with Python and PySpark.

STOKER, Bram. Dracula.


This content originally appeared on DEV Community 👩‍💻👨‍💻 and was authored by Geazi Anc


Print Share Comment Cite Upload Translate Updates
APA

Geazi Anc | Sciencx (2022-09-24T16:24:46+00:00) PySpark: uma breve análise das palavras mais comuns em Drácula, por Bram Stoker. Retrieved from https://www.scien.cx/2022/09/24/pyspark-uma-breve-analise-das-palavras-mais-comuns-em-dracula-por-bram-stoker/

MLA
" » PySpark: uma breve análise das palavras mais comuns em Drácula, por Bram Stoker." Geazi Anc | Sciencx - Saturday September 24, 2022, https://www.scien.cx/2022/09/24/pyspark-uma-breve-analise-das-palavras-mais-comuns-em-dracula-por-bram-stoker/
HARVARD
Geazi Anc | Sciencx Saturday September 24, 2022 » PySpark: uma breve análise das palavras mais comuns em Drácula, por Bram Stoker., viewed ,<https://www.scien.cx/2022/09/24/pyspark-uma-breve-analise-das-palavras-mais-comuns-em-dracula-por-bram-stoker/>
VANCOUVER
Geazi Anc | Sciencx - » PySpark: uma breve análise das palavras mais comuns em Drácula, por Bram Stoker. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/09/24/pyspark-uma-breve-analise-das-palavras-mais-comuns-em-dracula-por-bram-stoker/
CHICAGO
" » PySpark: uma breve análise das palavras mais comuns em Drácula, por Bram Stoker." Geazi Anc | Sciencx - Accessed . https://www.scien.cx/2022/09/24/pyspark-uma-breve-analise-das-palavras-mais-comuns-em-dracula-por-bram-stoker/
IEEE
" » PySpark: uma breve análise das palavras mais comuns em Drácula, por Bram Stoker." Geazi Anc | Sciencx [Online]. Available: https://www.scien.cx/2022/09/24/pyspark-uma-breve-analise-das-palavras-mais-comuns-em-dracula-por-bram-stoker/. [Accessed: ]
rf:citation
» PySpark: uma breve análise das palavras mais comuns em Drácula, por Bram Stoker | Geazi Anc | Sciencx | https://www.scien.cx/2022/09/24/pyspark-uma-breve-analise-das-palavras-mais-comuns-em-dracula-por-bram-stoker/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.