Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema na execução do código no VSC

Olá.

Estou rodando o trecho do código abaixo no Visual Studio Code, e ele me retorno o erro abaixo.

O que significa tal erro, e como eu posso resolvê-lo?

Obrigado.

import pandas as pd
import spacy

dados = pd.read_csv('treino.csv')

nlp = spacy.load('pt_core_news_sm')

textos_para_tratamento = (titulos.lower() for titulos in dados['title'])

def trata_textos(doc):
  tokens_validos = []
  for token in doc:
    e_valido = not token.is_stop and token.is_alpha
    if e_valido:
      tokens_validos.append(token.text)
    if len(tokens_validos) > 2:
      return ' '.join(tokens_validos)

textos_tratados = [trata_textos(doc) for doc in nlp.pipe(textos_para_tratamento,
                                                        batch_size= 1000,
                                                        n_process = -1)]

Erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Oii Marco, como você está?

Peço desculpas pela demora em obter um retorno.

Para correção desse erro devemos encapsular o código dentro do trecho if __name__ == "__main__", que é responsável por testar se o arquivo está sendo executado como arquivo principal.

Essa expressão serve para impedir que partes do código sejam executadas quando o arquivo é importado em outros.

Na prática, o código que estará dentro da expressão if __name__ == "__main__" só será executado se rodarmos o comando:

python curso.py

Mas, caso haja alguma importação de curso.py em outro arquivo (import curso), o que está dentro da expressão if __name__ == "__main__" não será executado.

A correção ficará da seguinte forma:

import pandas as pd
import spacy


def trata_textos(doc):
    tokens_validos = []
    for token in doc:
        e_valido = not token.is_stop and token.is_alpha
        if e_valido:
            tokens_validos.append(token.text)
        if len(tokens_validos) > 2:
            return ' '.join(tokens_validos)

if __name__ == "__main__":

    dados = pd.read_csv('treino.csv')

    nlp = spacy.load('pt_core_news_sm')

    textos_para_tratamento = (titulos.lower() for titulos in dados['title'])

    textos_tratados = [trata_textos(doc) for doc in nlp.pipe(textos_para_tratamento,batch_size=1000,n_process=-1)]

É uma boa prática de programação proteger o código com a expressão if __name__ == "__main__". A título de curiosidade, caso queira ler mais sobre esse assunto, recomendo o artigo Python: O que significa if name == 'main'? do blog da Alura.

Qualquer dúvida fico à disposição.

Abraços e bons estudos!

Excelente Nádia. Obrigado!!!