1
resposta

[Dúvida] Pipeline NLP

Olá!

Gostaria de saber se é possível incluir uma etapa de limpeza dos dados (eliminação de pontuação, espeaços em branco) no pipeline a seguir:

from pyspark.ml import Pipeline

tokenizer = Tokenizer(inputCol="texto_limpo", outputCol="tokens")
stopwords = StopWordsRemover(inputCol="tokens", outputCol="texto_final")
hashingTF = HashingTF(inputCol=stopwords.getOutputCol(), outputCol="HTF", numFeatures=1000)
tfidf = IDF(inputCol="HTF", outputCol="features")

pipeline = Pipeline(stages = [tokenizer,stopwords, hashingTF, tfidf])
Se sim, como?
1 resposta

Olá Vinícius, tudo bem?

As etapas de eliminação de pontuação, espaços em branco são realizadas com a .withColumn que faz uma transformação direta em um objeto específico, no nosso caso a base de dados dados, isso dificulta a padronização dos processos dentro de um pipeline.

Existe uma limitação também em relação as classes utilizadas nos estágios do pipeline, na documentação do spark o pipeline é executado somente com classes que tenham fit e transform como métodos, as quais não são encontrados com em .withColumn, regexp_replace e trim utilizadas aqui.

Por essas razões não é possível inserir essas etapas diretamente no pipeline, o ideal é realizar as transformação que utilizam pyspark.sql.functions antes do pipeline. Pesquisando aqui, encontrei uma solução alternativa de uma implementação mais complexa, nesse artigo do medium o autor mostra que é possível criar uma classe que herdará o método de pipelines do spark e adiciona funções nessa nova classe para que seja incorporado como uma etapa do pipeline, mas eu confesso que essa última etapa eu não testei e deixei aqui como referência para seus estudos.

Espero ter ajudado. bons estudos ;)