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:

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!