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
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/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.