<jupyter_start><jupyter_text>Text Pre Processor - ImplantaçãoEste é um componente que utiliza a biblioteca [nltk](https://www.nltk.org/) e [ftfy](https://pypi.org/project/ftfy/) e [regex](https://docs.python.org/3/library/re.html) para pré processar textos que entrrão em outros componentes.Este notebook apresenta:- como usar o [SDK](https://platiagro.github.io/sdk/) para carregar datasets, salvar modelos e outros artefatos.- como declarar parâmetros e usá-los para criar componentes reutilizáveis. **Em caso de dúvidas, consulte os [tutoriais da PlatIAgro](https://platiagro.github.io/tutorials/).**  Declaração de Classe para Predições em Tempo RealA tarefa de implantação cria um serviço REST para predições em tempo-real.Para isso você deve criar uma classe `Model` que implementa o método `predict`.<jupyter_code>%%writefile Model.py
import joblib
import pandas as pd
import numpy as np
from pre_processor import Preprocessor

class Model:
    
    def __init__(self):
        self.loaded = False
        
        
    def load(self):

        artifacts = joblib.load("/tmp/data/preprocessor.joblib")
        self.preprocessing_tasks = artifacts["preprocessing_tasks"]
        self.model_parameters = artifacts["model_parameters"]
        self.columns = artifacts["columns"]
        self.target = artifacts["target"]

        self.preprocessor = Preprocessor(self.preprocessing_tasks, self.model_parameters)

        self.loaded = True
            
    def class_names(self):
        return ['text']

    
    def predict(self, X, feature_names, meta=None):

        if not self.loaded:
            self.load()
        
        if feature_names:
            # Antes de utilizar o conjunto de dados X no modelo, reordena suas features de acordo com a ordem utilizada no treinamento
            df = pd.DataFrame(X, columns=self.columns)
        
        else:
            if isinstance(X, str):
                df = pd.DataFrame({self.target: [X]})
            else:
                df = pd.DataFrame({self.target: X})
            
        texts = self.preprocessor.preprocess(df[self.target].to_numpy())
        texts = np.array(texts)

        if len(texts.shape) == 1:
            texts = np.expand_dims(texts, axis=0) 
        
        return texts<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09742245522062036, 'fraction_numerical': 0.001310615989515072, 'mean_word_length': 2.7235772357723578, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 5, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '170136', 'license': 'MIT', 'n_tokens_mistral': 716, 'n_tokens_neox': 695, 'n_words': 188, 'path': 'tasks/nlp-text-pre-processor/Deployment.ipynb', 'repo_name': 'platiagro/tasks', 'size': '2289'}