Spaces:
Sleeping
Sleeping
| # train_model.py | |
| import pandas as pd | |
| import re | |
| import joblib | |
| from sklearn.model_selection import train_test_split | |
| from sklearn.feature_extraction.text import TfidfVectorizer | |
| from sklearn.linear_model import LogisticRegression | |
| from sklearn.metrics import accuracy_score, classification_report | |
| # --- 1) LOAD CSVs WITH PROPER ENCODING --- | |
| fake = pd.read_csv(r"C:\Users\Srikar M\OneDrive\Documents\python\TruthRadar\Fake.csv\Fake.csv", encoding="utf-8-sig") | |
| real = pd.read_csv(r"C:\Users\Srikar M\OneDrive\Documents\python\TruthRadar\True.csv\True.csv", encoding="utf-8-sig") | |
| # DEBUG: confirm columns | |
| print("🔥 Fake columns:", fake.columns.tolist()) | |
| print("🔥 Real columns:", real.columns.tolist()) | |
| # --- 2) BUILD 'content' AND 'label' ON EACH DF INDIVIDUALLY --- | |
| # Take title + first 300 chars of text | |
| fake["content"] = fake["title"] + " " + fake["text"].str[:300] | |
| real["content"] = real["title"] + " " + real["text"].str[:300] | |
| fake["label"] = "FAKE" | |
| real["label"] = "REAL" | |
| # --- 3) CONCATENATE AND SHUFFLE --- | |
| df = pd.concat([fake, real], ignore_index=True) | |
| # Now df has columns: ['title','text','subject','date','content','label'] | |
| df = df[["content", "label"]].sample(frac=1, random_state=42).reset_index(drop=True) | |
| # --- 4) PREPROCESS TEXT (same as in Flask) --- | |
| def clean_text(text): | |
| text = re.sub(r"http\S+", "", text) | |
| text = re.sub(r"[^a-zA-Z\s]", "", text) | |
| return text.lower() | |
| df["content"] = df["content"].apply(clean_text) | |
| # --- 5) SPLIT INTO TRAIN/TEST --- | |
| X = df["content"] | |
| y = df["label"] | |
| X_train, X_test, y_train, y_test = train_test_split( | |
| X, y, test_size=0.2, random_state=42 | |
| ) | |
| # --- 6) VECTORIZE --- | |
| vectorizer = TfidfVectorizer(stop_words="english", max_df=0.7, ngram_range=(1,2)) | |
| X_train_tfidf = vectorizer.fit_transform(X_train) | |
| X_test_tfidf = vectorizer.transform(X_test) | |
| # --- 7) TRAIN MODEL --- | |
| model = LogisticRegression(max_iter=1000) | |
| model.fit(X_train_tfidf, y_train) | |
| # --- 8) EVALUATE --- | |
| y_pred = model.predict(X_test_tfidf) | |
| print("\n🧠 Model Accuracy:", accuracy_score(y_test, y_pred)) | |
| print(classification_report(y_test, y_pred)) | |
| # --- 9) SAVE ARTIFACTS --- | |
| joblib.dump(model, "app/model.pkl") | |
| joblib.dump(vectorizer, "app/vectorizer.pkl") | |
| print("\n✅ Model and vectorizer saved to app/") | |