import nltk import pandas as pd from sklearn.neural_network import MLPClassifier from nltk.tokenize import word_tokenize from gensim.models import Word2Vec import numpy as np nltk.download('punkt') # w pliku train.tsv w kolumnach 25706, 58881, 73761 trzeba zamienic w tekscie tabulator na 4 spacje train = pd.read_csv('train/train.tsv', sep='\t', names=['y', 'x'], header=None) print(train["y"][0], train["x"][0]) # https://www.geeksforgeeks.org/python-word-embedding-using-word2vec/ slowa_train = [] for tekst in train["x"]: pom = [] for slowo in word_tokenize(tekst): pom.append(slowo.lower()) slowa_train.append(pom) print(slowa_train[0]) # https://radimrehurek.com/gensim/models/word2vec.html model = Word2Vec(sentences=slowa_train, vector_size=100, window=5, min_count=1, workers=4) model.save("word2vec.model") wektor = model.wv['przyjmujący'] print(wektor) podobne = model.wv.most_similar('przyjmujący', topn=5) print(podobne) teksty = [] for tekst in train["x"]: pom = None for slowo in word_tokenize(tekst): wektor = model.wv[slowo.lower()] if pom is None: pom = wektor else: pom = np.concatenate((pom,wektor)) teksty.append(pom) print(teksty[0].shape) #print(teksty[0]) liczba_wejscia = 1000#0 poprawione_teksty = [] for wektor in teksty: if len(wektor)>liczba_wejscia: poprawione_teksty.append(wektor[:liczba_wejscia]) else: poprawione_teksty.append(np.pad(wektor,(0,liczba_wejscia-len(wektor)), mode='constant', constant_values=0)) print(poprawione_teksty[0].shape) #print(poprawione_teksty[0]) print(train["y"].to_numpy()) X = poprawione_teksty y = train["y"].to_numpy() clf = MLPClassifier() # activation="tanh" clf.fit(X, y) # w pliku in.tsv w kolumnach 1983, 5199 trzeba zamienic w tekscie tabulator na 4 spacje dev_in = pd.read_csv('dev-0/in.tsv', sep='\t', names=['x'], header=None) print(dev_in["x"][0]) dev_expected = pd.read_csv('dev-0/expected.tsv', sep='\t', names=['y'], header=None) print(dev_expected["y"][0]) teksty_dev= [] for tekst in dev_in["x"]: pom = None for slowo in word_tokenize(tekst): wektor = None try: wektor = model.wv[slowo.lower()] except KeyError: pass if wektor is not None: if pom is None: pom = wektor else: pom = np.concatenate((pom,wektor)) teksty_dev.append(pom) print(teksty_dev[0].shape) #print(teksty_dev[0]) poprawione_teksty_dev = [] for wektor in teksty_dev: if len(wektor)>liczba_wejscia: poprawione_teksty_dev.append(wektor[:liczba_wejscia]) else: poprawione_teksty_dev.append(np.pad(wektor,(0,liczba_wejscia-len(wektor)), mode='constant', constant_values=0)) print(poprawione_teksty_dev[0].shape) #print(poprawione_teksty_dev[0]) przewidywania_dev = clf.predict(poprawione_teksty_dev) print(przewidywania_dev) with open("dev-0/out.tsv", "w", encoding="utf-8") as uwu: for p in przewidywania_dev: uwu.write(str(p)+"\n") mianownik = 0 licznik=0 for e,o in zip(dev_expected["y"].to_list(),przewidywania_dev): mianownik +=1 if e==o: licznik +=1 print(licznik,"/",mianownik,licznik/mianownik) # w pliku in.tsv w kolumnach 1983, 5199 trzeba zamienic w tekscie tabulator na 4 spacje test = pd.read_csv('test-A/in.tsv', sep='\t', names=['x'], header=None) print(test["x"][0]) teksty_test = [] for tekst in test["x"]: pom = None for slowo in word_tokenize(tekst): wektor = None try: wektor = model.wv[slowo.lower()] except KeyError: pass if wektor is not None: if pom is None: pom = wektor else: pom = np.concatenate((pom,wektor)) teksty_test.append(pom) print(teksty_test[0].shape) #print(teksty_test[0]) poprawione_teksty_test = [] for wektor in teksty_test: if len(wektor)>liczba_wejscia: poprawione_teksty_test.append(wektor[:liczba_wejscia]) else: poprawione_teksty_test.append(np.pad(wektor,(0,liczba_wejscia-len(wektor)), mode='constant', constant_values=0)) print(poprawione_teksty_test[0].shape) print(poprawione_teksty_test[0]) przewidywania = clf.predict(poprawione_teksty_test) print(przewidywania) with open("test-A/out.tsv", "w", encoding="utf-8") as uwu: for p in przewidywania: uwu.write(str(p)+"\n")