File size: 4,872 Bytes
dfb3177
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import streamlit as st
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
import joblib
import tensorflow as tf
from sentence_transformers import SentenceTransformer
import torch
import re
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import nltk
nltk.download('stopwords')
nltk.download('wordnet')
from transformers import AutoTokenizer


# Tokenizer'ı başlatıyoruz
tokenizer = AutoTokenizer.from_pretrained("alibayram/tr_tokenizer", use_fast=True)
embedding_model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')

# Model dosyaları
log_reg_model = joblib.load('logistic_regression_model.pkl')  # Logistic Regression modeli
#lstm_model = tf.keras.models.load_model('lstm_model.h5')  # LSTM model
nn_model = joblib.load('neural_network_model.pkl')  # Neural network modeli
rf_model = joblib.load('random_forest_model.pkl')  # Random Forest modeli
svm_model = joblib.load('support_vector_machine_model.pkl')  # SVM modeli
xgboost_model = joblib.load('xgboost_model.pkl')  # XGBoost modeli



# Preprocessing ve veri hazırlığı için fonksiyonlar
def preprocess_text(text):
    STOPWORDS = set(stopwords.words('turkish'))
    STOPWORDS.add('mi') 
    # Küçük harfe çevirme
    text = text.lower()
    # Noktalama işaretlerini kaldır
    text = re.sub(r'[^\w\s]', '', text)
    # Stopwords kaldır ve lemmatization uygula
    text = " ".join([word for word in text.split() if word not in STOPWORDS])
    return text

def tokenize_text(text):
    
    tokens = tokenizer.tokenize(text)
    return tokens

def vectorize_text(text):
    # Tokenized listeyi string'e dönüştürelim
    titles_as_strings = [' '.join(eval(tokens)) for tokens in text]
    # Metni vektöre dönüştürme
    return embedding_model.encode(titles_as_strings)

def vectorize_text(text):
    
    # Her bir başlığı string olarak kabul ederek işleme alıyoruz
    titles_as_strings = [' '.join(tokens) if isinstance(tokens, list) else tokens for tokens in text]
    
    # Metni vektöre dönüştürme
    return embedding_model.encode(titles_as_strings)



# Tahmin fonksiyonları
def predict_logistic_regression(text):
    
    return log_reg_model.predict(text)



def predict_neural_network(text):

    return nn_model.predict(text)

def predict_random_forest(text):
    
    return rf_model.predict(text)

def predict_svm(text):
    
    return svm_model.predict(text)

def predict_xgboost(text):
    
    return xgboost_model.predict(text)

# Streamlit arayüzü
st.title("Haber Başlığı Doğruluk Tahmin Aracı")

# Kullanıcıdan haber başlığını alma
news_title = st.text_input("Haber Başlığını Girin:")

title_preprocesed=preprocess_text(news_title)
title_tokenized=tokenize_text(title_preprocesed)
title_vectorized=vectorize_text(title_tokenized)

# Model Seçim kutusu
model_choice = st.selectbox(
    "Hangi modeli kullanmak istersiniz?",
    ("Logistic Regression", "LSTM","Neural Network", "Random Forest", "Support Vector Machine", "XGBoost")
)

# "Tahmin Et" butonu
if st.button("Tahmin Et"):
    if news_title:
        # Seçilen modele göre tahmin yapma
        if model_choice == "Logistic Regression":
            prediction = predict_logistic_regression(title_vectorized)
        elif model_choice == "Neural Network":
            prediction = predict_neural_network(title_vectorized)
        elif model_choice == "Random Forest":
            prediction = predict_random_forest(title_vectorized)
        elif model_choice == "Support Vector Machine":
            prediction = predict_svm(title_vectorized)
        elif model_choice == "XGBoost":
            prediction = predict_xgboost(title_vectorized)



        # Tahmin Sonucunu Gösterme
        if prediction[0] == 1:
            st.write(f"**Tahmin:** Bu haber başlığı doğru.")
        else:
            st.write(f"**Tahmin:** Bu haber başlığı yanlış.")
        
        # Tüm modellerin tahminlerini yazma
        st.write("### Tüm Modellerin Tahminleri:")
        st.write(f"**Logistic Regression Tahmini:** {'Doğru' if predict_logistic_regression(title_vectorized)[0] == 1 else 'Yanlış'}")
        st.write(f"**Neural Network Tahmini:** {'Doğru' if predict_neural_network(title_vectorized)[0] == 1 else 'Yanlış'}")
        st.write(f"**Random Forest Tahmini:** {'Doğru' if predict_random_forest(title_vectorized)[0] == 1 else 'Yanlış'}")
        st.write(f"**SVM Tahmini:** {'Doğru' if predict_svm(title_vectorized)[0] == 1 else 'Yanlış'}")
        st.write(f"**XGBoost Tahmini:** {'Doğru' if predict_xgboost(title_vectorized)[0] == 1 else 'Yanlış'}")
    
    else:
        st.write("Lütfen bir haber başlığı girin.")