ilaydabeyhan commited on
Commit
2f17ed7
·
verified ·
1 Parent(s): 5d69071

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -89
app.py CHANGED
@@ -1,90 +1,80 @@
1
- from flask import Flask, request, jsonify
2
- import joblib
3
- import re
4
- from sentence_transformers import SentenceTransformer
5
- from threading import Lock
6
- import os
7
-
8
- # Flask uygulamasını başlat (Hugging Face bu uygulamayı otomatik olarak başlatır)
9
- app = Flask(__name__)
10
-
11
- # Model yükleme işlemini sadece bir kez yapmak için global değişkenler
12
- MODEL_LOADED = False
13
- MODEL_LOCK = Lock()
14
- classifier = None
15
- embedding_model = None
16
-
17
-
18
- # Metin ön işleme fonksiyonu
19
- def metin_temizle(metin):
20
- """Metni küçük harfe dönüştürür, noktalama işaretlerini ve sayıları kaldırır."""
21
- metin = metin.lower()
22
- metin = re.sub(r'[^\w\s]', '', metin)
23
- metin = re.sub(r'\d+', '', metin)
24
- return metin
25
-
26
-
27
- # Modeli yükleme fonksiyonu (Sadece bir kez çalışacak)
28
- def load_models():
29
- global classifier, embedding_model, MODEL_LOADED
30
-
31
- # Kilit mekanizmasını kullanarak, modelin birden fazla kez yüklenmesini engelle
32
- with MODEL_LOCK:
33
- if MODEL_LOADED:
34
- return
35
-
36
- print("Modeller ilk kez yükleniyor...")
37
- try:
38
- # 1. SVC sınıflandırma modelini yükle
39
- classifier = joblib.load('siniflandirma_modeli.pkl')
40
- print("SVC modeli başarıyla yüklendi.")
41
- except FileNotFoundError:
42
- # Bu hata olursa, yüklemede bir sorun var demektir.
43
- raise FileNotFoundError("siniflandirma_modeli.pkl dosyası bulunamadı.")
44
-
45
- try:
46
- # 2. Gömme modelini doğrudan internetten indir (Distiluse modeli)
47
- embedding_model = SentenceTransformer('distiluse-base-multilingual-cased-v2')
48
- print("Sentence-Transformer modeli başarıyla indirildi/yüklendi.")
49
- except Exception as e:
50
- print(f"HATA: Sentence-Transformer modeli yüklenirken bir sorun oluştu: {e}")
51
- raise Exception(f"Model yükleme hatası: {e}")
52
-
53
- MODEL_LOADED = True
54
- print("Model yükleme tamamlandı. API hazır.")
55
-
56
-
57
- # API'nin makale başlığını alıp kategoriyi tahmin edeceği uç nokta (endpoint)
58
- @app.route('/kategorize-et', methods=['POST'])
59
- def kategorize_et_api():
60
- """Gelen HTTP isteğini işler, makale başlığını kategorize eder ve sonucu JSON olarak döndürür."""
61
-
62
- # Modelleri yükle (Zaten yüklüyse bu adım atlanır)
63
- load_models()
64
-
65
- # Gelen JSON verisini al
66
- data = request.get_json(silent=True)
67
-
68
- if not data or 'baslik' not in data:
69
- return jsonify({"hata": "Makale başlığı (baslik) JSON gövdesinde bulunamadı."}), 400
70
-
71
- makale_basligi = data.get('baslik', '')
72
-
73
- temizlenmis_baslik = metin_temizle(makale_basligi)
74
-
75
- # Başlığı vektöre dönüştür
76
- tahmin_vektoru = embedding_model.encode([temizlenmis_baslik])
77
-
78
- # Sınıflandırma modelini kullanarak kategoriyi tahmin et
79
- tahmin_sonucu = classifier.predict(tahmin_vektoru)[0]
80
-
81
- # Sonucu JSON formatında döndür
82
- return jsonify({"kategori": tahmin_sonucu})
83
-
84
-
85
- # Uygulama çalıştırma kodu. Hugging Face'de bu satır genellikle gerekmez,
86
- # ancak dosyamızı daha standart tutmak için bırakabiliriz.
87
- if __name__ == '__main__':
88
- # Hugging Face'de port otomatik olarak verilir. Lokal test için 7860 kullanıyoruz
89
- port = int(os.environ.get('PORT', 7860))
90
  app.run(host='0.0.0.0', port=port)
 
1
+ from flask import Flask, request, jsonify
2
+ import joblib
3
+ import re
4
+ from sentence_transformers import SentenceTransformer
5
+ from threading import Lock
6
+ import os
7
+
8
+ # Flask uygulamasını başlat (Hugging Face bu uygulamayı otomatik olarak başlatır)
9
+ app = Flask(__name__)
10
+
11
+ # Model yükleme işlemini sadece bir kez yapmak için global değişkenler
12
+ MODEL_LOADED = False
13
+ MODEL_LOCK = Lock()
14
+ classifier = None
15
+ embedding_model = None
16
+
17
+ # Metin ön işleme fonksiyonu
18
+ def metin_temizle(metin):
19
+ """Metni küçük harfe dönüştürür, noktalama işaretlerini ve sayıları kaldırır."""
20
+ metin = metin.lower()
21
+ metin = re.sub(r'[^\w\s]', '', metin)
22
+ metin = re.sub(r'\d+', '', metin)
23
+ return metin
24
+
25
+ # Modeli yükleme fonksiyonu (Sadece bir kez çalışacak)
26
+ def load_models():
27
+ global classifier, embedding_model, MODEL_LOADED
28
+ # Kilit mekanizmasını kullanarak, modelin birden fazla kez yüklenmesini engelle
29
+ with MODEL_LOCK:
30
+ if MODEL_LOADED:
31
+ return
32
+ print("Modeller ilk kez yükleniyor...")
33
+ try:
34
+ # 1. SVC sınıflandırma modelini yükle
35
+ classifier = joblib.load('siniflandirma_modeli.pkl')
36
+ print("SVC modeli başarıyla yüklendi.")
37
+ except FileNotFoundError:
38
+ # Bu hata olursa, yüklemede bir sorun var demektir.
39
+ raise FileNotFoundError("siniflandirma_modeli.pkl dosyası bulunamadı.")
40
+ try:
41
+ # 2. Gömme modelini doğrudan internetten indir (Distiluse modeli)
42
+ embedding_model = SentenceTransformer('distiluse-base-multilingual-cased-v2')
43
+ print("Sentence-Transformer modeli başarıyla indirildi/yüklendi.")
44
+ except Exception as e:
45
+ print(f"HATA: Sentence-Transformer modeli yüklenirken bir sorun oluştu: {e}")
46
+ raise Exception(f"Model yükleme hatası: {e}")
47
+ MODEL_LOADED = True
48
+ print("Model yükleme tamamlandı. API hazır.")
49
+
50
+ # API'nin makale başlığını alıp kategoriyi tahmin edeceği uç nokta (endpoint)
51
+ @app.route('/', methods=['POST']) # <-- Yeni eklendi: Kök adresi (/) dinler
52
+ @app.route('/kategorize-et', methods=['POST'])
53
+ def kategorize_et_api():
54
+ """Gelen HTTP isteğini işler, makale başlığını kategorize eder ve sonucu JSON olarak döndürür."""
55
+ # Modelleri yükle (Zaten yüklüyse bu adım atlanır)
56
+ load_models()
57
+ # Gelen JSON verisini al
58
+ data = request.get_json(silent=True)
59
+ if not data or 'baslik' not in data:
60
+ # Eğer POST isteği boşsa veya 'baslik' anahtarı yoksa hata döndür
61
+ return jsonify({"hata": "Makale başlığı (baslik) JSON gövdesinde bulunamadı."}), 400
62
+
63
+ makale_basligi = data.get('baslik', '')
64
+ temizlenmis_baslik = metin_temizle(makale_basligi)
65
+
66
+ # Başlığı vektöre dönüştür
67
+ tahmin_vektoru = embedding_model.encode([temizlenmis_baslik])
68
+
69
+ # Sınıflandırma modelini kullanarak kategoriyi tahmin et
70
+ tahmin_sonucu = classifier.predict(tahmin_vektoru)[0]
71
+
72
+ # Sonucu JSON formatında döndür
73
+ return jsonify({"kategori": tahmin_sonucu})
74
+
75
+ # Uygulama çalıştırma kodu. Hugging Face'de bu satır genellikle gerekmez,
76
+ # ancak dosyamızı daha standart tutmak için bırakabiliriz.
77
+ if __name__ == '__main__':
78
+ # Hugging Face'de port otomatik olarak verilir. Lokal test için 7860 kullanıyoruz
79
+ port = int(os.environ.get('PORT', 7860))
 
 
 
 
 
 
 
 
 
 
80
  app.run(host='0.0.0.0', port=port)