Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uso de LLMs para web scrapping no CineBancários #91

Open
guites opened this issue Oct 9, 2024 · 0 comments
Open

Uso de LLMs para web scrapping no CineBancários #91

guites opened this issue Oct 9, 2024 · 0 comments
Labels
cinebancarios Relacionado a scrapping do site do CineBancarios data-science Issues sobre IA e tratamento de dados

Comments

@guites
Copy link
Collaborator

guites commented Oct 9, 2024

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 [email protected]
"""
)


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())
@guites guites added cinebancarios Relacionado a scrapping do site do CineBancarios data-science Issues sobre IA e tratamento de dados labels Oct 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cinebancarios Relacionado a scrapping do site do CineBancarios data-science Issues sobre IA e tratamento de dados
Projects
None yet
Development

No branches or pull requests

1 participant