from tensorflow import keras
import numpy as np

data = keras.datasets.imdb

(train_data, train_labels), (test_data,
                             test_labels) = data.load_data(num_words=88000)  # Taking 10000 most frequent words

# print(test_labels)

word_index = data.get_word_index()
word_index = {k: (v+3) for k, v in word_index.items()}
word_index["<PAD>"] = 0
word_index["<START>"] = 1
word_index["<UNK>"] = 2
word_index["<UNUSED>"] = 3

reverse_word_index = dict([(value, key)
                           for (key, value) in word_index.items()])

# print(reverse_word_index)


def decode_review(text):
    return " ".join([reverse_word_index.get(i, "?") for i in text])


# print(decode_review(test_data[0]))
'''
train_data = keras.preprocessing.sequence.pad_sequences(
    train_data, value=word_index['<PAD>'], padding="post", maxlen=250)
test_data = keras.preprocessing.sequence.pad_sequences(
    test_data, value=word_index['<PAD>'],  padding="post", maxlen=250)

model = keras.Sequential()
model.add(keras.layers.Embedding(88000, 16))
model.add(keras.layers.GlobalAveragePooling1D())
model.add(keras.layers.Dense(16, activation="relu"))
model.add(keras.layers.Dense(1, activation="sigmoid"))

model.compile(
    optimizer="adam",
    loss="binary_crossentropy",
    metrics=["accuracy"]
)

x_val = train_data[:10000]
x_train = train_data[10000:]

y_val = train_labels[:10000]
y_train = train_labels[10000:]

fitModel = model.fit(x_train, y_train, epochs=40,
                     batch_size=512, validation_data=(x_val, y_val), verbose=1)

results = model.evaluate(test_data, test_labels)
# print(results)

model.save("model-movie-reviews.h5")'''


def encode_review(text):
    encoded = [word_index["<START>"]]

    for word in text:
        if word.lower() in word_index:
            encoded.append(word_index[word.lower()])
        else:
            encoded.append(word_index["<UNK>"])

    return encoded


model = keras.models.load_model("model-movie-reviews.h5")

# class_names = ["Bad", "Good"]

with open("reviews.txt", encoding="utf-8") as f:
    review = []
    print("\n")
    for line in f.readlines():
        nline = line.replace(",", "").replace(".", "").replace(":", "").replace(
            ";", "").replace("(", "").replace(")", "").replace("\"", "").strip().split(" ")
        for word in nline:
            review.append(word)
        print(line, end='')

    encoded = encode_review(review)
    encoded = keras.preprocessing.sequence.pad_sequences(
        [encoded], value=word_index['<PAD>'], padding="post", maxlen=250)
    prediction = model.predict(encoded)
    print("\n")
    print(encoded)
    print("Good: %.2f\tBad: %.2f"
          % (prediction[0][0] * 100,
             (1-prediction[0][0]) * 100))
