Códigos do

O YouTube oferece acesso gratuito às melhores palestras de eventos internacionais renomados. Assim, as principais limitações que enfrento para aproveitar tanto conteúdo de qualidade são minha capacidade e o tempo disponível, que está cada vez mais escasso.

Felizmente, utilizando criatividade, conhecimentos em Python e o Jupyter Notebook, consigo otimizar o tempo para capturar a essência do conteúdo de cada palestra.

Obtendo os metadados de um vídeo do YouTube

Assumindo que você tem Python instalado e Jupyter funcionando, começo um novo notebook instalando os pacotes requests e bs4.

Python
! pip install --upgrade --quiet  requests bs4

O código que segue consegue extrair, a partir de um link, o título do vídeo, seu código e o nome do canal onde está publicado. Ele faz isso dividindo a URL para obter o código do vídeo, enviando uma solicitação para a URL, e, se bem-sucedido, analisa o HTML para encontrar os metadados do vídeo e do canal.

Python
import requests
from bs4 import BeautifulSoup

# URL do vídeo no YouTube
video_url = 'https://www.youtube.com/watch?v=GYJ77F_8kq0'

# Extrai o código do vídeo da URL
video_code = video_url.split('=')[-1]

# Faz a solicitação para a página do vídeo
response = requests.get(video_url)

# Se a solicitação foi bem-sucedida
if response.status_code == 200:
    # Analisa o HTML da página
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # Extrai o nome do vídeo
    # O título geralmente está dentro de uma tag <meta> com o atributo name="title"
    video_title = soup.find('meta', {'name': 'title'})['content']
    
    # Extrai o nome do canal
    # O nome do canal geralmente está dentro de uma tag <meta> com o atributo itemprop="channelId"
    channel_name = soup.find('link', {'itemprop': 'name'})['content']
    
    print(f'Nome do vídeo: {video_title}')
    print(f'Código do vídeo: {video_code}')
    print(f'Canal: {channel_name}')
else:
    print('Falha ao fazer a solicitação para a página do vídeo.')

Executando o código, obtenho, os dados que desejo.

Plaintext

Nome do vídeo: "Picasso, Geometry, Jupyter" by Ryan Herr
Código do vídeo: GYJ77F_8kq0
Canal: Strange Loop Conference

Obtendo a transcrição de um vídeo do YouTube

Já tenho os metadados de um vídeo, agora, desejo obter a transcrição. Para isso, vamos utilizar o pacote youtube-transcript-api.

Python
! pip install --upgrade --quiet youtube-transcript-api

O código para obter a transcrição é bem simples.

Python
from youtube_transcript_api import YouTubeTranscriptApi

transcript = YouTubeTranscriptApi.get_transcript(video_code)
full_text = ' '.join([entry['text'] for entry in transcript])
print(full_text)

O resultado é a transcrição do vídeo que o YouTube disponibiliza para gerar legendas. É importante observar, no entanto, que nem todos os vídeos possuem transcrição.

Plaintext
hi I'm Ryan her and this talk is about Picasso and programming in 1945 Picasso 
created a series of bulls where he started with a fairly realistic bull like you see 
on the left and through a gradual progressive process he deconstructed the bull abstracting
it to its essence to a simplified geometric form so in 1945 Picasso did that in 2010 an 
anonymous illustrator posted a meme on tumblr and reddit how to draw an owl again we see a 
transition between two states step one draw some circles step two draw the rest of the owl
so the interesting thing when we compare these two sets of images well they're moving in
opposite directions right the the owl is moving from simple to detailed but the bull Picasso's Bulls actually moved in the opposite direction it went from more complex more detailed to 
...

Preparando a interação com a transcrição e com os metados usando IA

Agora que temos a transcrição do vídeo, podemos utilizar a API da OpenAI para “conversar” com a transcrição obtendo as informações que desejamos. Para isso, irei utilizar LangChain para facilitar a interação. Vamos instalar os pacotes langchain, langchain-openai, langchain-core e langchain-community.

Python
! pip install --upgrade --quiet langchain langchain-openai langchain-core langchain-community

O código monta um modelo de prompt com os metadados e com a transcrição que obtemos anteriormente e a solicitação do usuário. Utilizo um modelo da OpenAI com uma janela de 128K que permite tratamento da transcrição completa, sem perdas. Também crio uma função helper para o modelo.

Python
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

gpt4 = ChatOpenAI(model_name="gpt-4-0125-preview",temperature=0)

chat_with_document = ChatPromptTemplate.from_template(f"""
O texto que segue é uma transcrição do vídeo 
intitulado {video_title} disponível no canal {channel_name}

Leia o texto atentamente e realize da forma mais completa 
possível a tarefa também indicada abaixo.
Use, na resposta, apenas informações contidas no texto, 
sem adicionar, em hipótese alguma, qualquer informação adicional.

Você responde em português, usando linguagem simples, com 
vocabulário simples. Estrutura seu texto em
frases curtas, em parágrafos com não mais do que 300 caracteres.

TEXTO:
{{text}}

TAREFA:
{{task}}

SUA RESPOSTA:
""")

output_parser = StrOutputParser()

chat_with_document_chain = chat_with_document | gpt4 | output_parser

def do(task):
    result = chat_with_document_chain.invoke({"text": full_text, "task": task})
    print(result)
    return result

Obtendo um resumo e outras informações relevantes

Tudo pronto! Agora, vamos estudar. Comecemos, com um bom resumo.

Python
summary = do("Forneça-me um resumo detalhado do que é discutido no vídeo.")

O resultado é um resumo, em português, do conteúdo que está na transcrição, que está em inglês.

Plaintext
O vídeo apresentado por Ryan Herr aborda a relação entre a arte de Picasso, a 
programação e a busca pela simplificação e abstração tanto na arte quanto no 
software. Em 1945, Picasso criou uma série de imagens de touros, começando 
com uma representação realista e, progressivamente, simplificando-a até chegar 
a uma forma geométrica simplificada. Esse processo de abstração de Picasso é 
comparado a um meme de 2010 sobre desenhar uma coruja, mostrando a dificuldade 
de simplificar ou detalhar imagens.

Ryan Herr explora como o processo de Picasso pode ser aplicado ao 
desenvolvimento de software e matemática, onde a busca por abstrações concisas 
e elegantes é constante. Ele menciona que Picasso, antes de criar sua série de 
touros, enfrentou um bloqueio criativo enquanto trabalhava em outra pintura, 
"Charnel-House". Picasso expressou o desejo de poder trabalhar em estados 
progressivos sem finalizar a tela, algo que ele conseguiu explorar com a 
série de touros usando a litografia, uma técnica que permite fazer alterações.

Herr utiliza papel vegetal para entender o processo de Picasso, traçando as 
mudanças entre os estados dos touros. Ele então usa programação para analisar 
computacionalmente essas mudanças, criando representações coloridas que mostram 
o que foi adicionado, removido ou mantido entre cada estado. Esse processo 
revela que inicialmente Picasso adicionou detalhes ao touro, mas progressivamente 
simplificou a imagem, removendo elementos até chegar a uma forma quase linear.

Explorando ainda mais, Herr utiliza o algoritmo de simplificação de linhas 
Douglas-Peucker para tentar recriar a abstração de Picasso computacionalmente, 
resultando em uma forma que, embora diferente, oferece insights sobre o processo 
de simplificação. Ele discute a dificuldade de capturar a abstração única de Picasso, 
que combina elementos de abstração pictórica e icônica.

Por fim, Herr reflete sobre como a exploração computacional do processo de Picasso 
não apenas oferece uma nova compreensão da arte de Picasso, mas também pode inspirar 
desenvolvedores de software e matemáticos a enfrentar bloqueios criativos, sugerindo 
que começar com uma versão mais complexa e simplificá-la progressivamente pode ser 
uma estratégia eficaz para superar desafios criativos.

E esse foi só o começo…

Para interagir com outra palestra, basta-me substituir o link do vídeo que quero estudar e executar novamente o código.

A produção de resumos qualificados assim facilita a produção de anotações e me permite saber rapidamente quando interesse tenho em assistir uma palestra ou não.

25/02/2024