from flask import Flask, render_template, request, jsonify, Response
import numpy as np
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import load_model
import json
import tensorflow as tf
np.random.seed(42)
tf.random.set_seed(42)
lstm = load_model("model/model_lstm.h5")
bilstm = load_model("model/model_bilstm.h5")
gru = load_model("model/model_gru.h5")
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/about/')
def about():
return render_template('about.html')
@app.route('/test')
def ml():
return render_template('test.html')
#option 1
@app.route('/classify', methods=['GET', 'POST'])
def classify():
photo_x = ""
photo_question_mark = ""
photo_check = ""
try:
text_ = request.form.get('text')
file = "model/model_classification.h5"
loaded_model = load_model(file)
print(1)
except:
return render_template('classify.html', prediction_text="None", text="None", prediction_photo=photo_question_mark)
try:
new_data = [text_]
tokenizer = Tokenizer(num_words=100, oov_token = "")
tokenizer.fit_on_texts(new_data)
new_sequences = tokenizer.texts_to_sequences(new_data)
new_padded = pad_sequences(new_sequences, maxlen=100, padding="post", truncating="post")
predictions = loaded_model.predict(new_padded)
predict_labels = [1 if values>0.5 else 0 for values in predictions]
res = "Positive" if predict_labels[0]==1 else "Negative"
icon = photo_check if predict_labels[0]==1 else photo_x
return render_template('classify.html', prediction_text=res, text=text_, prediction_photo=icon)
except ValueError:
return render_template('classify.html', prediction_text='INVALID INPUT', text=text_, prediction_photo=photo_question_mark)
except:
return render_template('classify.html', prediction_text="None", text="None", prediction_photo=photo_question_mark)
@app.route('/generate', methods=['GET', 'POST'])
def generate():
text_ = request.form.get('input')
if text_ == None:
return render_template('generate.html' ,res_lstm="",res_bilstm="",res_gru="")
try:
txt_lstm = predict(text_,5,lstm)
txt_bilstm = predict(text_,5,bilstm)
txt_gru = predict(text_,5,gru)
return render_template('generate.html' ,res_lstm=txt_lstm,res_bilstm=txt_bilstm,res_gru=txt_gru)
except :
return render_template('generate.html' ,res_lstm="Something went wrong",res_bilstm="Something went wrong",res_gru="Something went wrong")
def predict(seed_text,next_words,model):
#return "Detect change sleep deformed which worse it time all house in philippines"
with open("static/dictionary.json", "r") as file:
loaded_dictionary = json.load(file)
with open('static/tokenizer.json', 'r') as json_file:
tokenizer_json = json_file.read()
tokenizer = tf.keras.preprocessing.text.tokenizer_from_json(tokenizer_json)
for _ in range(next_words):
tokenizer.word_index = loaded_dictionary
token_list = tokenizer.texts_to_sequences([seed_text])[0]
token_list = pad_sequences([token_list], maxlen=51-1, padding='pre')
predicted = np.argmax(model.predict(token_list), axis=-1)
output_word = ""
for word, index in tokenizer.word_index.items():
if index == predicted:
output_word = word
seed_text += " " + output_word
return seed_text
if __name__ == '__main__':
app.run(debug=True)