Spaces:
Sleeping
Sleeping
File size: 4,014 Bytes
c5a97b3 2598bbd 3992853 c5a97b3 2598bbd 7a6bd46 2598bbd 7a6bd46 3992853 2598bbd c5a97b3 f308877 78ac961 7a6bd46 2598bbd c5a97b3 f308877 78ac961 f308877 c5a97b3 3bd1e98 f308877 8b5cf55 3bd1e98 205d4a0 3bd1e98 78ac961 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
import gradio as gr
import requests
import pandas as pd
from difflib import get_close_matches
import re # Importa o módulo de expressões regulares
def fetch_data_to_dataframe(query, limit=50, source="mercadolibre"):
if source == "mercadolibre":
BASE_URL = "https://api.mercadolibre.com/sites/MLB/search"
params = {'q': query, 'limit': limit}
response = requests.get(BASE_URL, params=params)
if response.status_code == 200:
data = response.json()
if 'results' in data:
items = data['results']
df = pd.DataFrame(items)
df = df[['title', 'price', 'currency_id', 'condition', 'permalink']]
df.columns = ['Title', 'Price', 'Currency', 'Condition', 'Link']
return df
return pd.DataFrame()
def refinar_resultados(df):
# Filtra itens que não contêm "kit" no título e não indicam múltiplas unidades
df_refinado = df[~df['Title'].str.contains("kit", case=False)]
# Expressão regular para identificar números seguidos por palavras relacionadas a quantidade
padrao_unidades = r'\b(\d+)\s*(unidade|unidades|pacote|pacotes|caixa|caixas)\b'
df_refinado = df_refinado[~df_refinado['Title'].str.contains(padrao_unidades, case=False, regex=True)]
return df_refinado
def filtrar_itens_similares(df, termo_pesquisa, limite=5):
titulos = df['Title'].tolist()
titulos_similares = get_close_matches(termo_pesquisa, titulos, n=limite, cutoff=0.1)
df_filtrado = df[df['Title'].isin(titulos_similares)]
return df_filtrado
def calcular_fator_avaliacao(EC, VU, PU, VR):
pontuacoes = {'Excelente': 10, 'Bom': 8, 'Regular': 5, 'Péssimo': 2}
ec_pontuacao = pontuacoes[EC]
PVU = 10 - ((PU - 1) * (10 / VU))
PVU = min(PVU, 10)
PUB = 10 - (((VU - PU) - 1) * (10 / VU))
PUB = min(PUB, 10)
fator_avaliacao = (4 * ec_pontuacao + 6 * PVU - 3 * PUB) / 100
return fator_avaliacao
def integrated_app(query, EC, VU, PU, VR):
VU = float(VU)
PU = float(PU)
VR = float(VR)
df = fetch_data_to_dataframe(query, 50, "mercadolibre")
if df.empty:
return "Nenhum dado encontrado. Tente uma consulta diferente.", pd.DataFrame()
df = refinar_resultados(df)
df_similares = filtrar_itens_similares(df, query)
if df_similares.empty:
return "Nenhum item similar encontrado.", pd.DataFrame()
else:
median_price = df_similares['Price'].median()
fator_avaliacao = calcular_fator_avaliacao(EC, VU, PU, VR)
valor_avaliacao = max(median_price * fator_avaliacao, VR)
return f"Fator de Avaliação: {fator_avaliacao*100:.2f}%, Valor de Avaliação: {valor_avaliacao}", df_similares
iface = gr.Interface(fn=integrated_app,
inputs=[gr.Textbox(label="Digite sua consulta"),
gr.Radio(label="Estado de Conservação do Bem", choices=['Excelente', 'Bom', 'Regular', 'Péssimo']),
gr.Number(label="Vida Útil do Bem (VU)", value=9),
gr.Number(label="Período em que o bem foi utilizado (PU)", value=1),
gr.Number(label="Valor Residual (VR)", value=20)],
outputs=[gr.Textbox(label="Preço Mediano"), gr.Dataframe(label="Resultados da Pesquisa")],
theme=gr.themes.Monochrome(),
title = "<span style='color: gray; font-size: 48px;'>aval</span><span style='color: gray; font-size: 48px;'>ia</span><span style='color: gray; font-size: 48px;'>.BEN</span>",
description=f"""
<p style="text-align: left;"><b><span style='color: gray; font-size: 40px;'>aval</span><span style='color: gray; font-size: 40px;'>ia</span><span style='color: gray; font-size: 40px;'>.se</b></p>
<p style="text-align: left;"></span>Aplicativo para avaliação de bens móveis</p>
""")
iface.launch()
|