import gradio as gr import pandas as pd import numpy as np import io import request from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import TfidfVectorizer csv_url = "https://github.com/NguyenDung0210/oop/raw/main/Cleaned%20Data.csv" content = requests.get(csv_url).content df = pd.read_csv(io.StringIO(content.decode('utf-8')), sep=";") X = df['Title'] y = df['Encoded Tag'] tfidf_vectorizer = TfidfVectorizer() X_tfidf = tfidf_vectorizer.fit_transform(X) # Train the Naive Bayes model nb = MultinomialNB(alpha=0.4) nb.fit(X_tfidf, y) # Function to make predictions encoded = {0:'Chính trị', 1:'Giáo dục', 2:'Giải trí', 3:'Kinh doanh', 4:'Sức khỏe'} def predict_category(title): title_tfidf = tfidf_vectorizer.transform([title]) probabilities = nb.predict_proba(title_tfidf)[0] data = {"Category": [encoded[i] for i in range(len(encoded))], "Probability (%)": [f"{probabilities[i]*100:.2f}%" for i in range(len(probabilities))]} df = pd.DataFrame(data) return encoded[np.argmax(probabilities)], df # Create the Gradio interfaces iface = gr.Interface( fn=predict_category, inputs="text", outputs=[ gr.Textbox(label="Prediction"), gr.Dataframe(label="Probs", type='pandas') ], title="Text Classification App", description="Enter a news title and get the predicted category.", examples=[ ["Phó Thủ tướng ghi sổ tang tưởng niệm các nạn nhân trong vụ khủng bố ở Nga"], ["Thiếu giáo viên: Dự kiến cho phép tuyển dụng người có trình độ cao đẳng"], ['Diễn viên Thu Quỳnh chia sẻ điều bất ngờ không tính toán trước'], ["Nhóm khách vay mua nhà đất bị nợ xấu, ngân hàng tá hỏa biết khách còn nợ khủng"], ["Điều kiện để các giáo sư y khoa Hàn Quốc không từ chức hàng loạt"] ] ) # Run the interface iface.launch()