Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
September 24, 2022 04:24 pm GMT

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

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To