OwusuDynamo's picture
Update app.py
89000ac
# -*- coding: utf-8 -*-
"""
Created on Mon May 8 23:58:36 2023
@author: ME
"""
import catboost
from src.prediction import Prediction
from src.preprocessor import Preprocessing
import streamlit as st
import joblib
import pandas as pd
import altair as alt
#load saved model
model = catboost.CatBoostClassifier()
model_path = "Artifacts/cb_fakes_news_model.cbm"
model.load_model(model_path)
def predict_article(text):
pred_,conf = Prediction(text,model).predict()
return pred_,conf
#create emoji for predictions
fake_emoji = "\U0001F925"
real_emoji = "\U0001F60A"
emoji_dict = {"The news is real":real_emoji,"The news is fake":fake_emoji}
def main():
st.title("TruthFinder: Detecting Fake News through US Article Titles")
menu = ["Home","Tracker","About"]
choice = st.sidebar.selectbox("Menu",menu)
if choice == "Home":
st.subheader("Home - Enter Article title In Text")
with st.form(key="fake_news_form"):
raw_text = st.text_area("Type Here")
submit_text = st.form_submit_button(label="Submit")
if submit_text:
col1, col2 = st.columns(2)
#predict article title
pred,proba = predict_article(raw_text)
with col1:
st.success("Original Text")
st.write(raw_text)
st.success("Prediction")
emoji_icon = emoji_dict[pred]
st.write("{} {}".format(pred,emoji_icon))
confidence = proba.max()
st.success("Prediction confidence")
confidence = f"{round(confidence* 100,2)}%"
st.write(confidence)
with col2:
st.success("Prediction Probability")
proba_df = pd.DataFrame(proba,columns=["Fake","Real"])
#st.write(proba_df.T)
proba_df_clean = proba_df.T.reset_index()
proba_df_clean.columns = ["Label","Probability"]
fig = alt.Chart(proba_df_clean).mark_bar().encode(x="Label",y="Probability")
st.altair_chart(fig,use_container_width=True)
if __name__ == "__main__":
main()