IA-Toolbox-Hub / app.py
DHEIVER's picture
Update app.py
3de5eb5 verified
import gradio as gr
from transformers import pipeline
import numpy as np
class LightAIServices:
def __init__(self):
self.sentiment_analyzer = None
self.text_classifier = None
def analyze_sentiment(self, text):
if self.sentiment_analyzer is None:
self.sentiment_analyzer = pipeline(
'sentiment-analysis',
model='nlptown/bert-base-multilingual-uncased-sentiment'
)
try:
result = self.sentiment_analyzer(text)[0]
return f"Sentimento: {result['label']}, Confiança: {result['score']:.2f}"
except Exception as e:
return f"Erro na análise: {str(e)}"
def classify_text(self, text):
try:
if self.text_classifier is None:
self.text_classifier = pipeline(
"text-classification",
model="bert-base-uncased"
)
result = self.text_classifier(text)[0]
return f"Classificação: {result['label']}\nConfiança: {result['score']:.2f}"
except Exception as e:
return f"Erro na classificação: {str(e)}"
def analyze_text_length(self, text):
try:
words = text.split()
characters = len(text)
sentences = text.count('.') + text.count('!') + text.count('?')
return f"""📊 Análise do Texto:
• Palavras: {len(words)}
• Caracteres: {characters}
• Sentenças: {sentences}
• Média de palavras por sentença: {len(words)/max(1,sentences):.1f}"""
except Exception as e:
return f"Erro na análise: {str(e)}"
def analyze_text_stats(self, text):
try:
# Contagem básica
total_chars = len(text)
total_words = len(text.split())
# Contagem de tipos de caracteres
uppercase = sum(1 for c in text if c.isupper())
lowercase = sum(1 for c in text if c.islower())
digits = sum(1 for c in text if c.isdigit())
spaces = sum(1 for c in text if c.isspace())
# Palavras únicas
unique_words = len(set(text.lower().split()))
return f"""📊 Estatísticas Detalhadas:
Contagens Básicas:
• Total de caracteres: {total_chars}
• Total de palavras: {total_words}
• Palavras únicas: {unique_words}
Tipos de Caracteres:
• Maiúsculas: {uppercase}
• Minúsculas: {lowercase}
• Dígitos: {digits}
• Espaços: {spaces}
Proporções:
• Diversidade de vocabulário: {unique_words/total_words:.2%}
• Densidade de caracteres: {total_chars/total_words:.1f} caracteres/palavra"""
except Exception as e:
return f"Erro na análise: {str(e)}"
def text_similarity(self, text1, text2):
try:
# Análise básica de similaridade
words1 = set(text1.lower().split())
words2 = set(text2.lower().split())
# Intersecção de palavras
common_words = words1.intersection(words2)
# Métricas de similaridade
similarity = len(common_words) / max(len(words1), len(words2))
return f"""🔄 Análise de Similaridade:
• Palavras em comum: {len(common_words)}
• Similaridade: {similarity:.1%}
• Palavras texto 1: {len(words1)}
• Palavras texto 2: {len(words2)}
• Palavras em comum: {', '.join(list(common_words)[:10])}"""
except Exception as e:
return f"Erro na análise de similaridade: {str(e)}"
# Instância global dos serviços
services = LightAIServices()
# Interface Gradio
with gr.Blocks(title="Análise de Texto") as demo:
gr.Markdown("""
# 📝 Hub de Análise de Texto
Serviços de processamento e análise de texto usando IA.
""")
# 1. Análise de Sentimentos
with gr.Tab("Análise de Sentimentos"):
gr.Markdown("### 😊 Análise de Sentimentos")
with gr.Row():
sent_input = gr.Textbox(
label="Texto para análise",
placeholder="Digite o texto para analisar o sentimento...",
lines=3
)
sent_output = gr.Textbox(
label="Resultado da análise",
lines=2
)
sent_button = gr.Button("💭 Analisar Sentimento")
sent_button.click(
services.analyze_sentiment,
inputs=sent_input,
outputs=sent_output
)
# 2. Classificação
with gr.Tab("Classificação"):
gr.Markdown("### 📋 Classificação de Texto")
with gr.Row():
class_input = gr.Textbox(
label="Texto para classificar",
placeholder="Digite o texto para classificar...",
lines=5
)
class_output = gr.Textbox(
label="Classificação",
lines=2
)
class_button = gr.Button("🏷️ Classificar Texto")
class_button.click(
services.classify_text,
inputs=class_input,
outputs=class_output
)
# 3. Análise de Comprimento
with gr.Tab("Análise de Comprimento"):
gr.Markdown("### 📏 Análise de Comprimento do Texto")
with gr.Row():
len_input = gr.Textbox(
label="Texto para análise",
placeholder="Digite ou cole o texto para analisar...",
lines=5
)
len_output = gr.Textbox(
label="Estatísticas",
lines=5
)
len_button = gr.Button("📏 Analisar Comprimento")
len_button.click(
services.analyze_text_length,
inputs=len_input,
outputs=len_output
)
# 4. Estatísticas Detalhadas
with gr.Tab("Estatísticas"):
gr.Markdown("### 📊 Estatísticas Detalhadas do Texto")
with gr.Row():
stats_input = gr.Textbox(
label="Texto para análise",
placeholder="Digite ou cole o texto para análise detalhada...",
lines=5
)
stats_output = gr.Textbox(
label="Estatísticas Detalhadas",
lines=10
)
stats_button = gr.Button("📊 Analisar Estatísticas")
stats_button.click(
services.analyze_text_stats,
inputs=stats_input,
outputs=stats_output
)
# 5. Comparação de Textos
with gr.Tab("Comparação"):
gr.Markdown("### 🔄 Comparação de Textos")
with gr.Row():
comp_input1 = gr.Textbox(
label="Primeiro texto",
placeholder="Digite o primeiro texto...",
lines=3
)
comp_input2 = gr.Textbox(
label="Segundo texto",
placeholder="Digite o segundo texto...",
lines=3
)
comp_output = gr.Textbox(
label="Resultado da comparação",
lines=6
)
comp_button = gr.Button("🔄 Comparar Textos")
comp_button.click(
services.text_similarity,
inputs=[comp_input1, comp_input2],
outputs=comp_output
)
gr.Markdown("""
### 📝 Notas:
- Todos os serviços funcionam localmente
- Análises rápidas e eficientes
- Suporte para textos em português e inglês
""")
if __name__ == "__main__":
demo.launch()