File size: 2,850 Bytes
8da6361 0ab7ba4 8da6361 0ab7ba4 3d2d155 0ab7ba4 8da6361 3d2d155 0ab7ba4 3d2d155 0ab7ba4 3d2d155 0ab7ba4 3d2d155 0ab7ba4 3d2d155 8da6361 0ab7ba4 8da6361 0ab7ba4 8da6361 3d2d155 8da6361 3d2d155 8da6361 3d2d155 8da6361 3d2d155 8da6361 3d2d155 8da6361 |
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 |
from sklearn.pipeline import Pipeline
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
from joblib import dump, load
import firebase_admin
from firebase_admin import credentials, firestore
import logging
import datetime
import re
import pandas as pd
import os
from flask import Flask, request, jsonify
# إعداد السجلات
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s")
# Firebase Initialization
try:
cred_path = r"D:\app-sentinel-7qnr19-firebase-adminsdk-kjmbe-533749ec1a.json"
if not firebase_admin._apps:
cred = credentials.Certificate(cred_path)
firebase_admin.initialize_app(cred)
db = firestore.client()
logging.info("Firebase initialized successfully.")
except Exception as e:
logging.error(f"Error initializing Firebase: {e}")
db = None
# Load or Train Model with Pipeline
try:
model_path = os.path.join(os.getcwd(), "model_pipeline.joblib")
model_pipeline = load(model_path)
logging.info("Model pipeline loaded successfully.")
except Exception as e:
logging.warning(f"Model pipeline not found. Training new one. Error: {e}")
try:
# Train new model and vectorizer as part of pipeline
messages = ["example message 1", "example message 2"]
labels = ["label1", "label2"]
model_pipeline = Pipeline([
('vectorizer', TfidfVectorizer()), # تحويل النصوص إلى تمثيل رقمي
('classifier', MultinomialNB()) # تصنيف باستخدام Naive Bayes
])
model_pipeline.fit(messages, labels)
dump(model_pipeline, model_path)
logging.info("New model pipeline trained and saved.")
except Exception as e:
logging.error(f"Error training new model: {e}")
# Flask API
app = Flask(__name__)
@app.route('/classify', methods=['POST'])
def classify_message():
data = request.json
message = data.get("message", "")
# التصنيف باستخدام الـ pipeline
if message.strip() == "":
return jsonify({"error": "Message cannot be empty"}), 400
classification = model_pipeline.predict([message])[0]
# تخزين الرسالة في Firestore
message_data = {
"text": message,
"classification": classification,
"timestamp": datetime.datetime.now(),
}
if db:
db.collection("all_messages").add(message_data)
logging.info(f"Message classified as {classification} and stored in Firestore.")
else:
logging.warning("Firestore is not initialized. Data not stored.")
return jsonify({"classification": classification})
if __name__ == "__main__":
app.run(debug=True)
|