ilaydabeyhan commited on
Commit
239b303
·
verified ·
1 Parent(s): 8a02ea3

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +90 -0
  2. requirements.txt +4 -0
  3. siniflandirma_modeli.pkl +3 -0
app.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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)
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ Flask
2
+ joblib
3
+ sentence-transformers
4
+ scikit-learn
siniflandirma_modeli.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6ddfe1c0cf8264546ef68bc6578bd1cffe1ab98e2d6e7f59d4b02de7993f91d9
3
+ size 689807