File size: 1,562 Bytes
6a6c74a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import numpy as np
from keras.models import load_model # type: ignore
import joblib
import nltk
import pickle
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
import re

# Modeli ve TF-IDF vectorizer'ı yükle
with open('disaster_model.pkl', 'rb') as f:
    model = pickle.load(f)
vectorizer = joblib.load("tfidf_vectorizer.pkl")

# NLTK paketlerini indir
nltk.download('stopwords')
nltk.download('punkt')
nltk.download('wordnet')

# Preprocessing fonksiyonları
stop_words = set(stopwords.words('english'))
lemmatizer = WordNetLemmatizer()

def preprocess_text(text):
    text = text.lower()
    text = re.sub(r'[^\w\s]', '', text)
    text = re.sub(r'\s+', ' ', text)
    text = re.sub(r'\d+', ' ', text)
    tokens = word_tokenize(text)
    tokens = [lemmatizer.lemmatize(word) for word in tokens if word not in stop_words]
    return ' '.join(tokens)

def predict_sentiment(text):
    text = preprocess_text(text)
    text_vectorized = vectorizer.transform([text]).toarray()
    prediction = model.predict(text_vectorized)
    return 'Real Disaster' if prediction > 0.5 else 'Not Real Disaster'

# Gradio arayüzü
demo = gr.Interface(
    fn=predict_sentiment,
    inputs=gr.Textbox(lines=2, placeholder="Enter a tweet here..."),
    outputs="text",
    title="Tweet",
    description="Enter a tweet and get the prediction (preal disaster or not real disaster)."
)

if __name__ == "__main__":
    demo.launch(share=True)