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)