Memórias Póstumas de Brás Cubas é um romance escrito por Machado de Assis, desenvolvido em princípio como folhetim, de março a dezembro de 1880, na Revista Brasileira, para, no ano seguinte, ser publicado como livro, pela então Tipografia Nacional.
A obra retrata a escravidão, as classes sociais, o cientificismo e o positivismo da época. Dada essas informações, será que conseguimos idenficar essas características pelas palavras mais utilizadas em sua obra?
Utilizando o dataset Machado-de-Assis-Memorias-Postumas.txt, elabore um pipeline utilizando Estimators e Transformers necessário do Spark para responder as perguntas abaixo. Não esqueça de utilizar stopwords.pt para remover as stop words!
In [52]:
# Bibliotecas
from pyspark.ml import Pipeline
from pyspark.ml.feature import Tokenizer, StopWordsRemover, CountVectorizer, NGram
In [53]:
livro = sc.textFile("Machado-de-Assis-Memorias-Postumas.txt")
text = ""
for line in livro.collect():
text += " " + line
data = spark.createDataFrame([(0, text)], ["id", "text"])
In [49]:
tokenizer = Tokenizer(inputCol="text", outputCol="words")
remover = StopWordsRemover(inputCol="words", outputCol="filtered")
count = CountVectorizer(inputCol="filtered", outputCol="features", vocabSize=10)
pipeline = Pipeline(stages=[tokenizer, remover, count])
In [50]:
model = pipeline.fit(data).transform(data)
model.select("features").show(truncate=False)
In [60]:
tokenizer = Tokenizer(inputCol="text", outputCol="words")
remover = StopWordsRemover(inputCol="words", outputCol="filtered")
ngram = NGram(inputCol="filtered", outputCol="ngrams", n=2)
count = CountVectorizer(inputCol="ngrams", outputCol="features", vocabSize=10)
pipeline = Pipeline(stages=[tokenizer, remover, ngram, count])
In [62]:
model = pipeline.fit(data).transform(data)
model.select("features").show(truncate=False)
In [63]:
ngram = NGram(inputCol="filtered", outputCol="ngrams", n=3)
pipeline = Pipeline(stages=[tokenizer, remover, ngram, count])
In [64]:
model = pipeline.fit(data).transform(data)
model.select("features").show(truncate=False)
In [ ]:
countVect = CountVectorizer(inputCol="rawFeatures", outputCol="features")
countVectModel = countVect.fit(featurizedData)
rescaledData = countVectModel.transform(featurizedData)