fadyabila's picture
new prediction
6fc1fb5
import streamlit as st
import pandas as pd
import numpy as np
import nltk
import tensorflow as tf
from nltk.corpus import stopwords
import re
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from nltk.stem import LancasterStemmer
from keras.models import load_model
import string
# Download required NLTK data
nltk.download('stopwords')
nltk.download('punkt')
nltk.download('wordnet')
nltk.download('data')
# Load the pre-trained model
model = tf.keras.models.load_model('restaurant_review')
# Mendefinisikan Stopwords
stopwords_eng = stopwords.words("english")
# Membuat Stopwords Baru
new_stw = ['i',
'me',
'my',
'myself',
'we',
'our',
'ours',
'ourselves',
'you',
"you're",
"you've",
"you'll",
"you'd",
'your',
'yours',
'yourself',
'yourselves',
'he',
'him',
'his',
'himself',
'she',
"she's",
'her',
'hers',
'herself',
'it',
"it's",
'its',
'itself',
'they',
'them',
'their',
'theirs',
'themselves',
'what',
'which',
'who',
'whom',
'this',
'that',
"that'll",
'these',
'those',
'am',
'is',
'are',
'was',
'were',
'be',
'been',
'being',
'have',
'has',
'had',
'having',
'do',
'does',
'did',
'doing',
'a',
'an',
'the',
'and',
'but',
'if',
'or',
'because',
'as',
'until',
'while',
'of',
'at',
'by',
'for',
'with',
'about',
'against',
'between',
'into',
'through',
'during',
'before',
'after',
'above',
'below',
'to',
'from',
'up',
'down',
'in',
'out',
'on',
'off',
'over',
'under',
'again',
'further',
'then',
'once',
'here',
'there',
'when',
'where',
'why',
'how',
'all',
'any',
'both',
'each',
'few',
'more',
'most',
'other',
'some',
'such',
'no',
'nor',
'not',
'only',
'own',
'same',
'so',
'than',
'too',
'very',
's',
't',
'can',
'will',
'just',
'don',
"don't",
'should',
"should've",
'now',
'd',
'll',
'm',
'o',
're',
've',
'y',
'ain',
'aren',
"aren't",
'couldn',
"couldn't",
'didn',
"didn't",
'doesn',
"doesn't",
'hadn',
"hadn't",
'hasn',
"hasn't",
'haven',
"haven't",
'isn',
"isn't",
'ma',
'mightn',
"mightn't",
'mustn',
"mustn't",
'needn',
"needn't",
'shan',
"shan't",
'shouldn',
"shouldn't",
'wasn',
"wasn't",
'weren',
"weren't",
'won',
"won't",
'wouldn',
"wouldn't"
]
# Compile Stopwords
stw_en = stopwords_eng + new_stw
stw_en = list(set(stw_en))
# Define Lancaster Stemmer
lanc = LancasterStemmer()
# Define the text processing function
def text_proses(review):
# Mengubah Review ke Lowercase
review = review.lower()
# Menghilangkan Hashtag
review = re.sub("#[A-Za-z0-9_]+", " ", review)
# Menghilangkan \n
review = re.sub(r"\\n", " ",review)
# Menghilangkan Whitespace
review = review.strip()
# Menghilangkan Tanda Baca
review = review.translate(str.maketrans('', '', string.punctuation))
# Menghilangkan Link
review = re.sub(r"http\S+", " ", review)
review = re.sub(r"www.\S+", " ", review)
# Menghilangkan yang Bukan Huruf seperti Emoji, Simbol Matematika (seperti μ), dst
review = re.sub("[^A-Za-z\s']", " ", review)
# Menghilangkan duplicate characters
review = re.sub("(.)\\1{2,}", "\\1", review)
# Merapikan Spasi
review = ' '.join(review.split())
# Melakukan Tokenisasi
tokens = word_tokenize(review)
# Menghilangkan Stopwords
review = ' '.join([word for word in tokens if word not in stw_en])
# Melakukan Stemming
review = lanc.stem(review)
# Join the processed words into a single string
return review
# Define the lemmatization function
def lemmatize_text(text):
sentence = []
for word in text.split():
lemmatizer = WordNetLemmatizer()
sentence.append(lemmatizer.lemmatize(word, 'v'))
return ' '.join(sentence)
# Define the Streamlit app
def run():
st.title("Restaurant Review Inference")
# Define the input form
review = st.text_input("Enter a restaurant review:")
liked = st.selectbox("Did you like the restaurant?", ['Yes', 'No'])
# Process the input data
data = {
'Review': review,
'Liked': 1 if liked == 'Yes' else 0
}
data = pd.DataFrame([data])
data['text_processed'] = data['Review'].apply(text_proses)
data['text_processed'] = data['text_processed'].apply(lemmatize_text)
# Perform the inference
if st.button("Predict"):
y_pred = model.predict(data['text_processed'])
y_pred = np.where(y_pred >= 0.5, 1, 0)
# Show the prediction result
if y_pred[0] == 1:
st.write("The review is positive!")
else:
st.write("The review is negative.")
# Run the Streamlit app
if __name__ == '__main__':
app()