Spaces:
Sleeping
Sleeping
File size: 4,072 Bytes
c5a97b3 2598bbd 3992853 c5a97b3 2598bbd 7a6bd46 2598bbd 7a6bd46 3992853 2598bbd c5a97b3 f308877 d161ba9 f308877 78ac961 7a6bd46 2598bbd c5a97b3 f308877 78ac961 330ebef f308877 2660ea0 330ebef c5a97b3 3bd1e98 f308877 c4f8c41 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 = max((4 * ec_pontuacao + 6 * PVU - 3 * PUB) / 100, (VR/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:
mean_price = df_similares['Price'].mean()
fator_avaliacao = calcular_fator_avaliacao(EC, VU, PU, VR)
valor_avaliacao = max(mean_price * fator_avaliacao, ((VR/100)* mean_price))
return f"Valor Médio do Bem: R$ {mean_price:.2f}, Fator de Avaliação: {fator_avaliacao*100:.2f}%, Valor de Avaliação: R$ {valor_avaliacao:.2f}", 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", value=10),
gr.Number(label="Período em que o bem foi utilizado", value=1),
gr.Number(label="Valor Residual", value=20)],
outputs=[gr.Textbox(label="Cálculo"), 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()
|