# -*- coding: utf-8 -*-
"""
Created on Sat Aug 28 19:50:08 2021

@author: USER
"""

import tensorflow as tf
import tensorflow_datasets as tfds
imdb,info=tfds.load('imdb_reviews',with_info=True,as_supervised=True)
import numpy as np
train_data,test_data=imdb['train'],imdb['test']
training_sentences=[]
training_labels=[]
test_sentences=[]
test_labels=[]
for s,l in train_data:
    training_sentences.append(s.numpy().decode('utf8'))
    training_labels.append(l.numpy())

for s,l in test_data:
    test_sentences.append(s.numpy().decode('utf8'))
    test_labels.append(l.numpy())
    
training_labels_final=np.array(training_labels)
test_labels_final=np.array(test_labels)

vocab_size=10000
embedding_dim=16
max_length=120
trunc_type='post'
oov_tok='<OOV>'

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
tokenizer=Tokenizer(num_words=vocab_size,oov_token=oov_tok)
tokenizer.fit_on_texts(training_sentences)
word_index=tokenizer.word_index
sequences=tokenizer.texts_to_sequences(training_sentences)
padded=pad_sequences(sequences,maxlen=max_length,truncating=trunc_type)
testing_sequences=tokenizer.texts_to_sequences(test_sentences)
testing_padded=pad_sequences(testing_sequences,maxlen=max_length)
reverse_word_index=dict([(value,key) for (key,value) in word_index.items()])
def decode_review(text):
    return ''.join([reverse_word_index.get(i,'?') for i in text])
print(decode_review(padded[3]))
print(training_sentences[3])

model=tf.keras.Sequential([
    tf.keras.layers.Embedding(vocab_size,embedding_dim,input_length=max_length),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(6,activation='relu'),
    tf.keras.layers.Dense(1,activation='sigmoid')
    ])
model.summary()
model.compile(
    loss='binary_crossentropy',
    optimizer='adam',
    metrics=['accuracy']
    )
num_epochs=10
model.fit(
    padded,
    training_labels_final,
    epochs=num_epochs,
    validation_data=(testing_padded,test_labels_final)
    )
e = model.layers[0]
weights = e.get_weights()[0]
print(weights.shape) #shape:(vocab_size,embedding_dim)

sentence='I really think this is amazing. honest.'
sequence=tokenizer.texts_to_sequences([sentence])
print(sequence)

                             