PySpark: uma breve anlise das palavras mais comuns em Drcula, por Bram Stoker
Considerado como um marco da literatura gtica, o icnico livro Drcula, escrito em 1897 por Bram Stoker, desperta at hoje o fascnio das pessoas por todo o mundo. Hoje, a fim de introduzir novos conceitos e funcionalidades do Apache Spark, vamos desenvolver uma breve anlise das palavras mais comuns encontradas neste clssico livro .
Para isso, vamos desenvolver um notebook no Google Colab, um servio de nuvem gratuito criado pelo Google para incentivar pesquisas na rea de machine learning e inteligncia artificial.
Caso no saiba como usar o Google Colab, confira este excelente artigo da Alura escrito pelo Thiago Santos que ensina, de forma muito didtica, como usar o Colab e criar seus primeiros cdigos!
O notebook deste artigo tambm est disponvel em meu GitHub .
A obra em questo foi obtida por meio do Projeto Gutenberg, um acervo digital que rene livros de todo o mundo que j se encontram em domnio pblico. A verso plaintext de Drcula pode ser baixada gratuitamente aqui.
Instalao
Antes de iniciarmos o desenvolvimento de nosso notebook, necessrio fazer a instalao de duas bibliotecas: PySpark e Requests.
A biblioteca PySpark a API oficial do Python para o Apache Spark. com ela que vamos realizar nossa anlise de dados .
J a biblioteca Requests uma biblioteca que nos permite fazer solicitaes HTTP a um determinado website. Mediante a ela que iremos fazer o download do livro Drcula do projeto Gutenberg .
Crie uma nova clula de cdigo no Colab e execute a seguinte linha:
!pip install pyspark!pip install requests
Passo um: inicializao do Apache Spark
Logo aps a instalao, precisamos inicializar o Apache Spark. Para isso, crie uma nova clula de cdigo no Colab e adicione o seguinte bloco:
from pyspark.sql import SparkSessionspark = (SparkSession.builder .appName("The top most common words in Dracula, by Bram Stoker") .getOrCreate() )
Passo dois: download e leitura de Drcula, por Bram Stoker
Agora sim podemos comear! Nesta etapa iremos fazer o download do livro Drcula do projeto Gutenberg e, logo em seguida, fazer a leitura do arquivo atravs do PySpark.
O download do livro consiste, basicamente, na solicitao HTTP da URL que direciona para o livro Drcula no projeto Gutenberg. Depois, salva-se o contedo da solicitao, isto , o prprio livro, no diretrio atual, com o nome de Dracula Bram Stoker.txt.
Crie uma nova clula no colab e adicione o seguinte bloco de cdigo:
import requestsurl = "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 atravs do PySpark. Crie uma nova clula no Colab e adicione o seguinte bloco de cdigo:
book = spark.read.text(filename)
Passo trs: Extrao individual das palavras em cada uma das linhas
Aps a leitura do livro, necessrio que transformemos cada uma das palavras em uma coluna no DataFrame.
Para isso, utiliza-se o mtodo split, o qual, para cada uma das linhas, ir separar cada uma das palavras atravs do espao em branco entre elas. O resultado ser uma lista de palavras.
from pyspark.sql.functions import splitlines = 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, necessrio que se faa a converso desta lista de palavras em colunas no DataFrame.
Para tal, usa-se o mtodo explode presente no Apache Spark.
from pyspark.sql.functions import explode, colwords = 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 minsculas
Esta uma etapa bem simples. Para que no haja distino da mesma palavra por conta de letras maisculas, vamos transformar todas as palavras no DataFrame para letras minsculas, fazendo o uso da funo lower.
from pyspark.sql.functions import lowerwords_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: eliminao de pontuao
Para que tambm no haja distino da mesma palavra por conta da pontuao presente no final delas, preciso remov-las.
Isso feito atravs do mtodo regexp_extract*, o qual extrai palavras de uma string por meio de uma expresso regular.
Calma, no precisa se assustar! A expresso bem simples. Ela consiste em um conjunto contendo todos os smbolos de A a Z, uma ou mais vezes. Viu, eu te disse que era bem simples .
from pyspark.sql.functions import regexp_extractwords_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: remoo de valores nulos
Como visto, mesmo aps a remoo das pontuaes ainda h colunas com valores nulos, ou seja, espaos em branco.
Para que esses espaos em branco no sejam considerados na anlise da frequncia de cada palavra presente no livro, necessrio 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: anlise das palavras mais comuns
E, finalmente, chegamos ao fim da limpesa de nossos dados. Agora sim podemos comear a anlise 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 funo de agregao, 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 atravs da varivel rank.
Sinta-se vontade para ajustar a varivel como preferir. Particularmente recomendo analisar o dataframe com 100 palavras, j que as primeiras palavras so compostas por preposies, pronomes pessoais, ETC.
rank = 20words_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
Consideraes finais
isso por hoje, pessoal. Chegamos no fim de nossa breve anlise.
Neste artigo, analisamos as palavras mais comuns do livro Drcula, por Bram Stoker. Para isso, foi necessrio fazer uma limpesa nos dados, como dividir as palavras pelos espaos entre elas; explodir a lista de palavras em colunas no dataframe; transformar todas as letras em minsculas; e, por fim, remover a pontuao de todo o texto atravs de uma expresso regular.
Espero que tenham gostado. Mantenham as estacas afiadas, cuidado com as sombras que andam pela noite, e at a prxima .
Referncias
RIOUX, Jonathan. Data Analysis with Python and PySpark.
STOKER, Bram. Dracula.
Original Link: https://dev.to/geazi_anc/pyspark-uma-breve-analise-das-palavras-mais-comuns-em-dracula-por-bram-stoker-4an3
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To