# Univerzitet u Novom Sadu, Fakultet tehničkih nauka, Novi Sad, Srbija
# Studijski program OAS Informacioni inženjering
# Predmet Metode i tehnike nauke o podacima

# Pomoćni sadržaj


# %% Biblioteke i korpusi

import nltk
nltk.download("gutenberg")
from nltk.corpus import gutenberg
nltk.download("punkt")
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize
nltk.download("stopwords")
from nltk.corpus import stopwords
nltk.download("wordnet")
from nltk.stem import WordNetLemmatizer
from gensim.models import Word2Vec


# %% Priprema tokena

print("Datoteke u korpusu:")
print(gutenberg.fileids())
print()

tekst = gutenberg.raw(["austen-emma.txt", "austen-persuasion.txt", 
                       "austen-sense.txt", "chesterton-ball.txt", 
                       "chesterton-brown.txt", "chesterton-thursday.txt"])

raspon = (780, 790)
rečenice = sent_tokenize(tekst)
print("------------------------------------------------------------")
print("Primeri tokena:\n")
print(rečenice[raspon[0]:raspon[1]])
print()

stop_reči = stopwords.words("english")

lematizator = WordNetLemmatizer()
for i in range(len(rečenice)):
    rečenica = rečenice[i]
    rečenice[i] = [lematizator.lemmatize(token).lower() for token in 
                   word_tokenize(rečenica.replace("\r\n", " ")) 
                   if token.lower() not in stop_reči and token.isalpha()]
    
print("------------------------------------------------------------")
print("Primeri tokena nakon sređivanja:\n")
print(rečenice[raspon[0]:raspon[1]])
print()


# %% Ugradna predstava reči

model = Word2Vec(rečenice, vector_size=30, epochs=10)

reč = "house"
print("Predstava za reč <{}>:\n".format(reč))
print(model.wv[reč])
print()
print("Najsličnije reči za reč <{}>:\n".format(reč))
print(model.wv.most_similar(reč))
print()
#%%
reči = ["chair", "home", "house", "party", "police", "walk"]
print("Sličnosti između reči:\n")
for i in range(len(reči) - 1):
    for j in range(i + 1, len(reči)):
        print("{:^12} | {:^7.3f} | {:^12}".format(
            reči[i], model.wv.similarity(reči[i], reči[j]), reči[j]))

