| import gradio as gr |
| import joblib |
| import re |
| from nltk.corpus import stopwords |
| import nltk |
|
|
| nltk.download('stopwords', quiet=True) |
| stop_words = set(stopwords.words('english')) |
|
|
| svm_model = joblib.load('svm_model.pkl') |
| vectorizer = joblib.load('tfidf_vectorizer.pkl') |
|
|
| label_map = { |
| 1: 'World', |
| 2: 'Sports', |
| 3: 'Business', |
| 4: 'Sci/Tech' |
| } |
|
|
| def clean_text(text): |
| text = text.lower() |
| text = re.sub(r'[^a-zA-Z]', ' ', text) |
| words = text.split() |
| words = [w for w in words if w not in stop_words] |
| return " ".join(words) |
|
|
| def predict(text): |
| if not text.strip(): |
| return "Please enter some text." |
| cleaned = clean_text(text) |
| vectorized = vectorizer.transform([cleaned]) |
| prediction = svm_model.predict(vectorized)[0] |
| return label_map[prediction] |
|
|
| demo = gr.Interface( |
| fn=predict, |
| inputs=gr.Textbox( |
| lines=4, |
| placeholder="Paste a news headline or article here...", |
| label="News Text" |
| ), |
| outputs=gr.Textbox(label="Predicted Category"), |
| title="AG News Classifier", |
| description="Classifies news articles into: World, Sports, Business, or Sci/Tech. Built with SVM + TF-IDF trained on 120,000 articles.", |
| examples=[ |
| ["NASA discovers water on Mars surface"], |
| ["Stock markets crash amid banking crisis"], |
| ["Ronaldo scores hat-trick in World Cup qualifier"], |
| ["World leaders gather for climate summit in Paris"], |
| ["Apple launches new AI chip for iPhones"] |
| ], |
| theme=gr.themes.Soft() |
| ) |
|
|
| demo.launch() |