File size: 7,923 Bytes
c357e49
3de5eb5
317fb1f
9860e17
3de5eb5
317fb1f
 
3de5eb5
b4277da
317fb1f
 
 
 
 
 
 
 
 
 
 
b4277da
3de5eb5
400aec7
3de5eb5
 
 
 
 
 
 
 
400aec7
3de5eb5
400aec7
3de5eb5
400aec7
3de5eb5
 
 
400aec7
3de5eb5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
400aec7
3de5eb5
 
400aec7
3de5eb5
400aec7
3de5eb5
 
 
 
 
 
 
 
 
 
 
 
 
 
400aec7
3de5eb5
400aec7
3de5eb5
400aec7
3de5eb5
 
 
 
 
 
400aec7
3de5eb5
 
400aec7
3de5eb5
400aec7
3de5eb5
 
 
 
 
400aec7
3de5eb5
400aec7
317fb1f
3de5eb5
b4277da
 
3de5eb5
317fb1f
3de5eb5
2830ea2
3de5eb5
317fb1f
2830ea2
3de5eb5
317fb1f
400aec7
b4277da
317fb1f
 
 
 
 
 
 
 
 
400aec7
317fb1f
 
 
 
 
 
3de5eb5
 
 
400aec7
3de5eb5
 
 
 
400aec7
3de5eb5
 
 
400aec7
3de5eb5
 
 
 
 
 
 
 
 
 
400aec7
3de5eb5
 
 
 
400aec7
3de5eb5
 
 
400aec7
3de5eb5
 
 
 
 
400aec7
 
3de5eb5
 
 
400aec7
3de5eb5
400aec7
3de5eb5
400aec7
 
3de5eb5
 
 
400aec7
3de5eb5
 
 
 
 
400aec7
 
3de5eb5
 
 
400aec7
3de5eb5
 
 
 
400aec7
3de5eb5
 
 
 
400aec7
3de5eb5
 
 
 
 
 
 
 
 
400aec7
 
317fb1f
400aec7
3de5eb5
 
 
317fb1f
9860e17
b4277da
 
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
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()