-
Notifications
You must be signed in to change notification settings - Fork 18
Open
Labels
cinebancariosRelacionado a scrapping do site do CineBancariosRelacionado a scrapping do site do CineBancariosdata-scienceIssues sobre IA e tratamento de dadosIssues sobre IA e tratamento de dados
Description
Ontem fiz um esboço de como seria usar um LLM (nesse caso, o Gemini do google) pra receber o texto dos posts do CineBancários e extrair os filmes e horários.
Funcionou muito bem! Utilizei o LLamaIndex pra abstrair as chamadas de API (e no futuro poder mudar pra outro provedor, caso o Gemini comece a cobrar ou pare de funcionar :P).
Vou colocar aqui o código que eu usei, caso alguém queria brincar ou puxar essa frente.
Acho que o desafio maior vai ser integrar essa prova de conceito na infra estrutura do código atual!
# -*- coding: utf-8 -*-
# Exemplo de uso de LLMs (através da lib llama index <https://docs.llamaindex.ai>)
# pra exportação de programação nas postagens do <https://cinebancarios.blogspot.com>.
#
# Adaptado de <https://docs.llamaindex.ai/en/stable/use_cases/extraction/>
# e <https://docs.llamaindex.ai/en/stable/examples/llm/gemini/>.
#
# O LLamaIndex permite o uso da maioria dos provedores de LLMs (OpenAI, Anthropic, etc)
# optei pelo Gemini pois o plano free tem uma quantidade de acessos pela API que supre
# o necessário pro projeto.
#
# A postagem do cinebancários utilizada foi <https://cinebancarios.blogspot.com/2024/10/animacao-infantil-placa-mae-e-longa-de.html>.
#
# Instalar bibliotecas necessárias com `pip3 install llama-index google-generativeai`.
#
# Criar uma chave para uso do Google Gemini em <https://ai.google.dev/>.
import os
from llama_index.llms.gemini import Gemini
from llama_index.core import Settings
from llama_index.core.llms import ChatMessage
from datetime import date
from typing import List, Optional
from pydantic import BaseModel, Field
GOOGLE_API_KEY = "" # colocar chave da API do Gemini aqui
os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY
llm = Gemini()
Settings.llm = llm
"""## 1. Extração de dados com estrutura
Definimos as classes que a LLM deve utilizar para adaptar os dados na sua resposta.
Essas classes são criadas com a biblioteca Pydantic (https://docs.pydantic.dev/latest/concepts/models/#validation)
e servem pra validar o formato dos dados.
Usei aqui `Movie` pra pegar o título do filme e `ScreeningDate` pra salvar cada exibição (data e hora) do filme.
"""
class ScreeningDate(BaseModel):
"""Data model for a screening date."""
date: date
time: str
class Movie(BaseModel):
"""Data model for a movie."""
title: str
image_url: Optional[str]
screening_dates: List[ScreeningDate]
class WeeklyProgram(BaseModel):
movies: List[Movie]
""""## 2. Passar estrutura definida para o LLM escolhido
A função as_structured_llm vai restringir a saída do modelo ao formato passado. Caso ele não consiga encaixar os dados, vai dar um erro de validação.
"""
sllm = llm.as_structured_llm(output_cls=WeeklyProgram)
"""## 3. Alimentar LLM com o nosso texto
Nesse caso eu acessei a página da postagem e peguei só o texto, removendo todas as tags html.
Isso pode ser automatizado via código (acessar a URL e extrair o texto)."""
input_msg = ChatMessage.from_str("""
O CineBancários apresenta, no dia 3 de outubro, a estreia dos filmes PLACA-MÃE, às 15h, e ATÉ QUE A MÚSICA PARE, às 19h, além de O DIA QUE TE CONHECI, que segue em cartaz na sessão das 17h.
ATÉ QUE A MÚSICA PARE, da premiada cineasta gaúcha Cristiane Oliveira, coloca ao centro da trama o casal Alfredo e Chiara, interpretados por Cibele Tedesco e Hugo Lorensatti, do renomado grupo teatral Miseri Coloni, de Caxias do Sul (RS). Depois que o último filho sai de casa, Chiara decide acompanhar o marido nas viagens dele como vendedor pelos botecos da serra. Uma tartaruga e baralhos de carta colocarão à prova mais de 50 anos de vida a dois.
Este é o terceiro longa da diretora, que tem no currículo “Mulher do Pai” (prêmios de Direção, Fotografia e Atriz Coadjuvante no Festival do Rio) e “A primeira morte de Joana” (prêmio do Júri da Crítica em Gramado). A obra, que fez sua estreia no Festival do Rio (2023) na Mostra Competitiva da Première Brasil, é produzida pela Okna Produções em coprodução com a italiana Solaria Films.
Grande parte do filme é falado em Talian, língua brasileira surgida da mistura do Português com as línguas dos imigrantes que vieram do Norte da Itália para o Brasil no século dezenove. Filmado em quatro cidades da Serra Gaúcha: Antônio Prado, Veranópolis, Nova Roma do Sul e Nova Bassano, o longa aborda temas caros ao cinema de Cristiane, como relações familiares e luto, mas apresentados em outra perspectiva. “A escalada recente dos discursos de ódio rachou muitas famílias no Brasil. Esse filme surge um pouco dessa dor e ao longo da construção do longa a gente se perguntava muito sobre quais são as palavras que fazem com que você desista de alguém que você ama. Qual é o limite da sua tolerância?”, explica a diretora.
A animação brasileira PLACA-MÃE, dirigida por Igor Bastos, conta a história de Nadi, uma androide que recebe o direito de adotar duas crianças e as reviravoltas enfrentadas pela família a partir daí. Com distribuição da O2 Play, Placa-Mãe é uma ficção científica que se passa em Minas Gerais.
No filme, Nadi é uma androide com cidadania brasileira com o direito de adotar duas crianças, David e Lina. No entanto, Asafe, um digital influencer sensacionalista, cria diversas polêmicas sobre o caso com o intuito de ganhar popularidade. Em meio a tudo, um mal-entendido leva David a fugir e viver aventuras. Enquanto o garoto lida com os perigos da cidade, Nadi tenta encontrá-lo.
“Eu defino Placa-Mãe carinhosamente como sci-fi da roça. Queria pensar em uma Minas Gerais do futuro, algo que a gente não tem imageticamente definido. Isso foi um desafio porque a ideia de futuro está sempre ligada a algo meio apocalíptico ou oriental. Então queríamos trazer outra visão: um Brasil que parece andar por soluços”, afirma o diretor Igor Bastos.
ESTREIA
ATÉ QUE A MÚSICA PARE
Brasil-Itália/ Drama/ 2023/97min
Direção: Cristiana Oliveira
Sinopse: Depois que o último filho sai de casa, Chiara, matriarca de uma família descendente de italianos, decide acompanhar o marido em suas viagens como vendedor pelos botecos da Serra Gaúcha. Uma tartaruga e baralhos de carta colocarão à prova mais de 50 anos de vida a dois.
Elenco: Cibele Tedesco, Hugo Lorensatti, Nicolas Vaporidis, Elisa Volpatto, Teti Tedesco
PLACA MÃE
Brasil/Animação/ 105min/ LIVRE
Direção: Igor Bastos
Sinopse: Nadi, uma andróide com cidadania, ganha o direito de adotar duas crianças, David e Lina. Quando um mal entendido acontece, o menino David, com medo de se separar de sua irmã, foge. Enquanto o garoto lida com os perigos da cidade, Nadi tenta encontrá-lo.
Elenco: Ana Paula Schneider, Ana Júlia Silva Guimarães, Vitor Gabriel Pereira, Aurea Baptista, Marcio Simões, Margarida Peixoto, Marcello Crawshaw.
EM CARTAZ
O DIA QUE TE CONHECI
Brasil/Drama/ 2023/ 71min
Direção: André Novais Oliveira
Sinopse: Todos os dias, Zeca tenta levantar cedinho para pegar o ônibus e chegar, uma hora e meia depois, na escola da cidade vizinha, onde trabalha como bibliotecário. Acordar cedo anda cada vez mais difícil, mas agora, sua rotina está prestes a ser interrompida quando ele descobre através de Luisa que será demitido. A partir daí, ele acaba desenvolvendo um vínculo inesperado com a colega de trabalho, que após dar a triste notícia, se oferece gentilmente para levá-lo para casa.
Elenco: Renato Novaes, Grace Passô
HORÁRIOS DE 3 A 9 DE OUTUBRO
(não há sessões nas segundas)
15h: PLACA-MÃE
17h: O DIA QUE TE CONHECI
19h: ATÉ QUE A MÚSICA PARE
Ingressos
Os ingressos podem ser adquiridos a R$ 12 na bilheteria do CineBancários. Idosos (as), estudantes, bancários (as), jornalistas sindicalizados (as), portadores de ID Jovem e pessoas com deficiência pagam R$ 6. São aceitos cartões nas bandeiras Banricompras, Visa, MasterCard e Elo.
Na quinta-feira, a meia-entrada é para todos e todas.
CineBancários
Rua General Câmara, 424 – Centro – Porto Alegre
Mais informações pelo telefone (51) 3030.9405 ou pelo e-mail cinebancarios@sindbancarios.org.br
"""
)
output = sllm.chat([ChatMessage(role="system", content="You are a cinema programming auditor. You need to collect screening information from the following text. If the text includes a time interval, include one ScreeningDate for each day in the interval. Assume the year is 2024."), input_msg])
output_obj = output.raw
print(output_obj.model_dump_json())
CarduCaldeira
Metadata
Metadata
Assignees
Labels
cinebancariosRelacionado a scrapping do site do CineBancariosRelacionado a scrapping do site do CineBancariosdata-scienceIssues sobre IA e tratamento de dadosIssues sobre IA e tratamento de dados