# Importa bibliotecas padrão do Python
import json # Para trabalhar com arquivos JSON
import os # Para manipular caminhos de arquivos
# Importa módulos do Flask para criar a aplicação web
from flask import Flask, render_template, request, jsonify
# Importa funções do RapidFuzz para cálculo de similaridade textual
from rapidfuzz import fuzz, process
# Cria a instância principal da aplicação Flask
app = Flask(__name__)
# Define o caminho absoluto para o diretório onde o script está localizado
BASE_DIR = [Link]([Link](__file__))
# Monta o caminho completo para o arquivo '[Link]' dentro da pasta 'static'
CAMINHO_FAQ = [Link](BASE_DIR, 'static', '[Link]')
# Abre o arquivo JSON contendo a base de conhecimento (FAQ) e carrega os dados
with open(CAMINHO_FAQ, 'r', encoding='utf-8') as f:
base_conhecimento = [Link](f)
# Função para encontrar a resposta mais apropriada baseada na pergunta do usuário
def encontrar_resposta(pergunta_usuario, dados):
todas_perguntas = [] # Lista que irá conter todas as perguntas do FAQ
mapa_respostas = {} # Dicionário que mapeia cada pergunta à sua resposta
# Itera por todas as categorias e itens do JSON
for categoria in dados:
for item in dados[categoria]:
pergunta = item["pergunta"]
resposta = item["resposta"]
todas_perguntas.append(pergunta) # Adiciona a pergunta à lista
mapa_respostas[pergunta] = resposta # Mapeia pergunta → resposta
# Usa RapidFuzz para encontrar a pergunta mais parecida com a do usuário
melhor_correspondencia = [Link](
pergunta_usuario, # Pergunta do usuário
todas_perguntas, # Lista de perguntas conhecidas
scorer=[Link] # Algoritmo de comparação baseado em pesos
)
# Verifica se encontrou uma correspondência suficientemente boa
if melhor_correspondencia and melhor_correspondencia[1] > 80:
return mapa_respostas[melhor_correspondencia[0]] # Retorna a resposta
else:
# Se a similaridade for baixa, retorna uma mensagem padrão
return "Desculpe, não entendi sua dúvida. Pode reformular?"
# Rota principal: renderiza o arquivo HTML principal do site
@[Link]('/')
def index():
return render_template('[Link]')
# Rota que recebe a pergunta via POST e responde com base no JSON
@[Link]('/responder', methods=['POST'])
def responder():
data = request.get_json() # Lê o conteúdo JSON enviado pelo front-end
msg = [Link]('mensagem', '') # Extrai a chave 'mensagem'
resposta = encontrar_resposta(msg, base_conhecimento) # Busca a resposta
return jsonify({"resposta": resposta}) # Retorna a resposta no formato JSON
# Faz o servidor Flask rodar se o script for executado diretamente
if __name__ == '__main__':
[Link](host='[Link]', port=5000) # Executa na porta 5000 e aceita conexões externas