Spaces:
No application file
No application file
File size: 1,967 Bytes
1f66ef8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | from flask import Flask, render_template, request, jsonify
import numpy as np
import pickle
from tensorflow.keras.models import load_model
from tensorflow.keras.utils import pad_sequences
app = Flask(__name__)
encoder_model = load_model("encoder_model.keras")
decoder_model = load_model("decoder_model.keras")
with open("encoder_tokenizer.pkl","rb") as f:
encoder_tokenizer = pickle.load(f)
with open("decoder_tokenizer.pkl","rb") as f:
decoder_tokenizer = pickle.load(f)
with open("config.pkl","rb") as f:
config = pickle.load(f)
input_maxln = config["input_mxlen"]
output_maxln = config["output_mxlen"]
def translate(sentence):
sequence = encoder_tokenizer.texts_to_sequences([sentence])
sequence = pad_sequences(sequence,
maxlen=input_maxln,
padding="post")
states = encoder_model.predict(sequence, verbose=0)
start = decoder_tokenizer.word_index["<start>"]
end = decoder_tokenizer.word_index["<end>"]
target_seq = np.array([[start]])
translated = []
while True:
output, h, c = decoder_model.predict(
[target_seq] + states,
verbose=0
)
token = np.argmax(output[0, -1, :])
if token == end:
break
word = decoder_tokenizer.index_word.get(token, "")
if word:
translated.append(word)
target_seq = np.array([[token]])
states = [h, c]
if len(translated) > output_maxln:
break
return " ".join(translated)
@app.route("/")
def home():
return render_template("index.html")
@app.route("/translate", methods=["POST"])
def translate_api():
text = request.json["text"]
prediction = translate(text)
return jsonify({
"translation": prediction
})
if __name__ == "__main__":
app.run(debug=True) |