# Bibliotecas
from pyspark.ml import Pipeline
from pyspark.ml.feature import Tokenizer, StopWordsRemover, CountVectorizer, NGram

livro = sc.textFile("Machado-de-Assis-Memorias-Postumas.txt")
text = ""
for line in livro.collect():
    text += " " + line

data = spark.createDataFrame([(0, text)], ["id", "text"])

"""
Explanation: Hands-on!
Nessa prática, sugerimos alguns pequenos exemplos para você implementar sobre o Spark.
Apriorando o Word Count Memória Postumas de Brás Cubas
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!

Quais as 10 palavras mais frequentes?
Quais as 2-grams e 3-grams mais frequentes?
End of explanation
"""


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])

model = pipeline.fit(data).transform(data)
model.select("features").show(truncate=False)

"""
Explanation: 10 Palavras Mais Frequentes
End of explanation
"""


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])

model = pipeline.fit(data).transform(data)
model.select("features").show(truncate=False)

ngram = NGram(inputCol="filtered", outputCol="ngrams", n=3)

pipeline = Pipeline(stages=[tokenizer, remover, ngram, count])

model = pipeline.fit(data).transform(data)
model.select("features").show(truncate=False)

"""
Explanation: n-Grams
End of explanation
"""


countVect = CountVectorizer(inputCol="rawFeatures", outputCol="features")
countVectModel = countVect.fit(featurizedData)
rescaledData = countVectModel.transform(featurizedData)

"""
Explanation: TF-IDF com CountVectorizer
No exemplo TFIDF, atualize a cell 15 para utilizar o Transformer CountVectorizer.
End of explanation
"""


