from flask import Flask, request, jsonify, render_template
from fuzzywuzzy import process
import os
app = Flask(__name__)
@app.after_request
def apply_cors_and_security_headers(response):
# Permite iframe DOAR pe domeniul specific
response.headers['Content-Security-Policy'] = "frame-ancestors 'self' http://chat-widget.liveblog365.com"
# Alte măsuri de securitate (opționale)
response.headers['X-Content-Type-Options'] = 'nosniff'
response.headers['X-Frame-Options'] = 'ALLOWALL' # Permite toate iframe-urile
return response
priority_keywords = [
"synlab", "ioana tudora", "marin predescu", "programari", "marinescu",
"tocilescu", "serbanica", "andrei", "bacanu", "ionescu",
"nicolau", "tarciatu", "mihail tocilescu", "alexandru", "adresa",
"laptop", "frigider", "spania", "spaniei", "franta", "frantei", "oftalmolog",
"germania", "germaniei""grecia", "greciei", "italia", "italiei",
"slapi", "Televizor", "Usa interior", "chirurg", "dermatolog", "neurolog"
]
exclude_keywords = {"e","la", "in", "cu", "de", "si", "etaj", "ce", "am","sunt",
"ma", "populatia", "capitala", "luni", "marti","cumpara",
"miercuri", "joi", "vineri", "suprafata", "sa", "tel", "mea",
"lei", "km2", "suprafata", "limba", "dr.", "dr", "doctor" }
# Ruta pentru pagina principală
@app.route('/')
def home():
return render_template('index.html')
# Endpoint pentru chatbot
@app.route('/ask_chatbot', methods=['POST'])
def ask_chatbot():
user_question = request.json.get('question', '').lower()
# Calea absolută către fișierul `data.txt`
file_path_txt = os.path.join(os.path.dirname(__file__), 'data.txt')
try:
# Citim și procesăm conținutul fișierului text
with open(file_path_txt, 'r', encoding='utf-8') as file:
site_content = file.read().lower()
# Creăm o listă de linii din fișier
site_lines = site_content.split('\n')
# Împărțim întrebarea în cuvinte și căutăm keyword-uri prioritare
question_words = user_question.split()
matched_keywords = [word for word in question_words if word in priority_keywords]
matched_keywords = [word for word in question_words if not word in exclude_keywords]
# Verificăm dacă întrebarea conține cuvinte din `data.txt`
if not any(word in site_content for word in question_words):
response = "Îmi pare rău, nu am găsit un răspuns potrivit."
else:
# Dacă există keyword-uri prioritare, prioritizăm liniile care le conțin
if matched_keywords:
filtered_lines = [line for line in site_lines if any(keyword in line for keyword in matched_keywords)]
else:
# Filtrăm și liniile care conțin cuvintele din exclude_keywords
filtered_lines = site_lines
# Găsim cea mai bună potrivire din liniile filtrate
best_match = process.extractOne(user_question, filtered_lines)
# Verificăm dacă similaritatea este acceptabilă
if best_match and best_match[1] > 56: # Prag ajustat la 55
response = f"{best_match[0]}"
else:
response = "Îmi pare rău, nu am găsit un răspuns potrivit."
except FileNotFoundError:
response = "Fișierul data.txt nu a fost găsit. Verificați dacă există în directorul aplicației."
return jsonify({"answer": response})
if __name__ == '__main__':
app.run(debug=True)