Python na prática: Projeto Video Creator – #Parte 4: Limpeza e interpretação do texto

Bom dia, boa tarde, boa noite!

Essa é a quarta parte da série sobre o projeto Video Creator, onde mostrarei a limpeza e a interpretação do texto.

Se você entrou direto nesse post, te aconselho a começar por aqui, para entender exatamente do que se trata essa série.

Sobre essa parte

Para este projeto, optei por fazer uma limpeza simples, apenas removendo conteúdos dentro de parenteses, uma vez que o foco era gerar um texto que ficasse apresentável em um video.

Após a limpeza, utilizei a lib NLTK para quebrar o texto em sentenças e a API do IBM Watson para identificar as Keywords de cada sentença.

Requisitos:

Para essa etapa do projeto, precisei criar uma conta no IBM Cloud, é gratuito e possui diversos recursos com Free Tier. Vale a pena conferir!

Precisei também dos import de algumas libs:

import re # Regular Expression
from ibm_watson import NaturalLanguageUnderstandingV1
import ibm_watson.natural_language_understanding_v1 as nlu #import Features, EntitiesOptions, KeywordsOptions, 
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
import nltk # Natural language toolkit

Criando a conta na IBM Cloud e gerando a API Key

Esse passo é bem tranquilo… basta acessar o link abaixo e criar a sua conta:

https://cloud.ibm.com/registration

Após a conta criada, basta logar e você verá uma tela parecida com essa:

layout de 02/2022

Claro que isso pode mudar de acordo com o momento em que você está lendo este post.

De qualquer forma, basta digitar na caixa de busca no topo da página, ou procurar a página de recursos e procurar por: Natural Language Understanding:

Feito isso, agora só precisa acessar a página do recurso, e salvar as credenciais na pasta do seu projeto.

Eu criei uma pasta credentials e dentro dela criei um arquivo chamado credentials.yml

Feito isso, voltamos para o código:

A limpeza e a interpretação do texto, eu mantive dentro do robô de conteúdo, para que ao chamarmos, ele faça tudo o que precisa com a parte textual e deixe-o pronto para ser usado.

A higienização do texto defini da seguinte forma:

def clear_text(text):
    logging.info('Cleaning text...')
    print ("Limpando texto...", end="\n\n")
    return re.sub(r"\([^()]*\)", '', text)

NLTK e IBM Watson em ação!

Para a criação das sentenças e as keywords de cada sentença, encapsulei tudo dentro da função create_sentences_from_text().

A função ficou assim:


'''
Create sentences from text
'''
def create_sentences_from_text(cleaned_content):
    '''
    Get Keywords from a Sentece
    '''
    def get_keywords_from_sentence(sentence):
        # params from Watson API
        authenticator = IAMAuthenticator(credentials['nlu_watson_api_key'])
        service = NaturalLanguageUnderstandingV1(version='2021-09-26',authenticator=authenticator)
        service.set_service_url(credentials['nlu_watson_url'])
        response = service.analyze(
            text=sentence,
            features=nlu.Features(
                            keywords=nlu.KeywordsOptions())
        ).get_result()
        
        # returning just the list of keywords when relevance > 0.5
        return [d['text'] for d in response['keywords'] if d['relevance'] > 0.5]
    
    # creating sentences
    sentences = nltk.tokenize.sent_tokenize(cleaned_content)[:MAX_SENTENCES_TO_FETCH]
    list_sentences = []

    for s in sentences:
        try:
            # analyzing the content with watson
            keywords = get_keywords_from_sentence(s)
        except Exception as ex_analyze:
            print(ex_analyze)

        list_sentences.append({
            'text': s,
            'keywords': keywords,
            'images': []
        })

    return list_sentences

Notem que dentro dessa função existe uma outra chamada get_keywords_from_sentence(), ela é responsável por gerar as keywords das sentenças. Pra isso, fiz uso da Natural Language Understanding da lib IBM_WATSON.

Bom, nesse momento eu já tinha todos os pedaços necessários para gerar o conteúdo textual do video. Era hora de salvar tudo em algum lugar, e seguir para os próximos robôs.

No próximo post, te mostro como fiz isso!

Abraço!

Gerando videos para o Youtube com linguagem Python

Navegando pelo Youtube a mais ou menos 2 anos atrás, me deparei com uma playlist do canal Filipe Deschamps onde ele mostrava como havia programado 4 robôs para automatizar a criação de videos para o Youtube fornecendo apenas o assunto para o robô.

Para quem quiser conferir, esse é o link do primeiro video da série:

Programei 4 robôs que criam vídeos para mim no YouTube

Bom, na época havia começado minha jornada de aprendizado em Python, e resolvi que faria um projeto similar, utilizando Python, e ferramentas alternativas as utilizadas no projeto original.

Pelos meses seguinte, a idéia não saiu do papel, por diversas razões que não precisam ser citadas aqui.

Até que no final de 2021, resolvi que tiraria esse projeto do papel, apenas por diversão e para praticar um pouco de Python… foi bem divertido :D.

O projeto ficou pronto e pode ser conferido no repositório que postarei mais abaixo. Porém não foi fácil concluí-lo. Diversas coisas no projeto segui o exatamente o que ele fez, outras nem tanto. Também utilizei muito do conhecimento passado nos videos do Filipe Deschamps, porém ele usou Node.js e como resolvi fazer em Python, muitas coisas precisei pesquisar como poderia fazer, quais libs poderia usar, etc.

Então para registrar o conhecimento que adquiri com esse pequeno projeto, resolvi escrever uma série de posts, cada qual abordando um pedaço do projeto, assim como o Filipe fez em video.

O objetivo principal é para reforçar, por meio do repasse, o aprendizado adquirido. Espero que estes posts possam ajudar vocês de alguma forma, seja com o conteúdo técnico ou simplesmente motivando-os a iniciarem seus projetos pessoais. É a melhor forma de aprender, e como o Filipe falou nos videos, são nesses projetos, que podemos usar toda e qualquer tecnologia que temos vontade, sem nos preocupar se é viável ou não.

Repositório com o projeto concluído:
https://github.com/thmlima87/videocreator

O que foi usado no projeto?

Apesar de parecer simples, o projeto envolveu bastante coisa legal:

Bora começar!

Abaixo os links de todos os posts para facilitar a navegação.

Parte 1: Arquitetura da aplicação
Parte 2: Idéias de conteúdo!
Parte 3: Buscando o assunto escolhido na Wikipedia
Parte 4: Limpeza e interpretação do texto
Parte 5: Persistência do conteúdo
Parte 6: Bing Custom Search
Parte 7: Busca e download de imagens
Parte 8: Tratamento das imagens
Parte 9: Renderização do video
Parte 10: Upload para o Youtube