bainskarman's picture
Update app.py
04eb1fc verified
import streamlit as st
import pickle
import numpy as np
import os
from tensorflow.keras.models import load_model
import numpy as np
import pandas as pd
import re
import nltk
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
import matplotlib.pyplot as plt
import seaborn as sns
import nltk
nltk.download('wordnet')
model = load_model('best_model.keras')
# Load the tokenizer
with open('tokenizer.pkl' ,'rb') as f:
tokenizer = pickle.load(f)
# Load the label encoder
with open('label_encoder.pkl', 'rb') as f:
label_encoder = pickle.load(f)
# Load max_length
with open('max_length.pkl', 'rb') as f:
max_length = pickle.load(f)
# Load stop words
with open('stop_words.pkl', 'rb') as f:
stop_words = pickle.load(f)
lemmatizer = WordNetLemmatizer()
def preprocess_text(text):
text = str(text)
text = text.lower()
text = re.sub(r'[^a-z\s]', '', text)
words = text.split()
st_words = stop_words
words = [word for word in words if word not in stop_words]
words = [lemmatizer.lemmatize(word) for word in words]
text = ' '.join(words)
return text
def classify_text(text):
text = preprocess_text(text)
seq = tokenizer.texts_to_sequences([text])
padded_seq = np.pad(seq, ((0, 0), (0, max_length - len(seq[0]))), mode='constant')
prediction = model.predict(padded_seq)
predicted_label_index = np.argmax(prediction, axis=1)[0]
predicted_label = label_encoder.inverse_transform([predicted_label_index])[0]
categories = predicted_label.split('|')
if len(categories) == 3:
main_category = categories[0]
sub_category = categories[1]
lowest_category = categories[2]
else:
main_category = "Unknown"
sub_category = "Unknown"
lowest_category = "Unknown"
return main_category, sub_category, lowest_category
# Streamlit UI
def main():
st.title("Text Classifier")
# Text input
user_input = st.text_input("Enter text to classify")
if st.button("Classify"):
if user_input:
# Classify input text
main_category, sub_category, lowest_category = classify_text(user_input)
st.success(f"Main Category: {main_category}, Sub Category: {sub_category}, Lowest Category: {lowest_category}")
else:
st.warning("Please enter some text.")
if __name__ == '__main__':
main()