saurabh091's picture
Update app.py
15708cd verified
from flask import Flask, render_template, request
from keras.models import load_model
from tensorflow.keras.preprocessing.sequence import pad_sequences
import numpy as np
import pickle
import time
import os
import kagglehub
# Download latest version
model_folder = kagglehub.model_download("saurabhmaulekhi/next_word_prediction/keras/version-1")
files_in_folder = os.listdir(model_folder)
model_name = files_in_folder[0]
model_path = os.path.join(model_folder,model_name)
model = load_model(model_path)
with open("tokenizer.pickle", 'rb') as handle:
tokenizer = pickle.load(handle)
app = Flask(__name__)
@app.route('/')
def home():
return render_template('home.html')
@app.route('/home')
def home_click():
return render_template('home.html')
@app.route('/', methods=['GET', 'POST'])
def predict_show():
if request.method == 'POST':
try:
user_input = request.form['user_input']
num_of_words = int(request.form['num'])
result = prediction(user_input, num_of_words)
except ValueError:
result = "Invalid input. Please enter a number."
return render_template('home.html', result=result)
@app.route('/document')
def document():
return render_template('document.html')
def prediction(text, no_of_words):
sentence = []
sentence.append(text+" ") ## Adding the original given word to the list
text = text.lower() ## lower casing the word beacuse model is buil on lower case words
for i in range(no_of_words):
# tokenize
token_text = tokenizer.texts_to_sequences([text])[0]
# padding
padded_token_text = pad_sequences([token_text], maxlen=56, padding='pre')
# predict
pos = np.argmax(model.predict(padded_token_text)) ## predicting new word
for word, index in tokenizer.word_index.items():
if index == pos:
text = word
sentence.append(text)
sentence.append(" ")
sentence.pop()
return sentence
if __name__ == "__main__":
app.run(host='0.0.0.0', port=7860)