Hangulatelemzés a NacimNacim2 segítségével - OpenClassrooms
Kérdés ? Ne aggódjon, mi segítünk !

#kódolás: utf-8
import pandák, mint pd
importálja a számot np-ként
importálja az xml.etree.ElementTree fájlt ET-ként
gyűjteményekből import számláló
importálja a matplotlib.pyplot-t plt-ként
import fáklya
a torch.utils.data fájlból importálja a DataLoader, a TensorDataset fájlt
import torch.nn as nn
def get_list (elérési út):
fa = ET.parse (elérési út)
gyökér = fa.getroot ()
text_list = []
vélemény_lista = []
felülvizsgálatra a root.findall-ban ("Review"):
text_string = "
felülvizsgálatra küldve.findall ("./ mondatok/mondat"):
text_string = text_string + " + sent.find ("text"). szöveg
text_string = text_string.lower ()
text_string = text_string.strip ()
text_list.append (text_string + ("\ n"))
véleményezésre a felülvizsgálat során.findall ("./ vélemények/vélemények"):
if (vélemény.get ("kategória") == "LAPTOP # ÁLTALÁNOS"):
vélemény_diktum = vélemény.get ("polaritás")
# Opinion_inner_list.append (vélemény_dict)
vélemény_lista.append (vélemény_diktál)
return text_list, vélemény_lista
vélemények, címkék = get_list (elérési út)
#test_text_list, test_opinion_list = get_list (elérési út)
nyomtatás ('train_text_list', vélemények)
nyomtatás ()
nyomtatás ('train_opinion_list', címkék)
sor = []
karakterlánc importálási központozásból
all_text = " .csatlakozzon ([c a recenziókban, ha c nem az írásjelek között]) # törli az írásjeleket
nyomtatás (all_text)
reviews_split = all_text.split ('\ n')
nyomtatás ('vélemények száma:', len (reviews_split))
all_text2 = " csatlakozzon (reviews_split)
szavak = all_text2.split ()
count_words = Számláló (szavak)
#számolja a szavak gyakoriságát #
total_words = len (szavak)
print (total_words) #nbr szavak száma
sorted_words = count_words.most_common (total_words)
print (count_words) # és írja a szó gyakoriságát
vocab_to_int =
nyomtatás (vocab_to_int)
# létrehozza azt a listát, amely egész számként tartalmazza a moots listáit #
reviews_int = []
felülvizsgálatra a reviews_split oldalon:
r = [vocab_to_int [w] w-re a review.split ()]
reviews_int.append (r)
nyomtatás (reviews_int)
nyomtatás ("langueuuur rev_int", len (reviews_int))
# kódolja a címkéket #
encoded_labels = [1, ha label == 'pozitív' else 0, ha label == 'negatív'else 2, ha label ==' konfliktus 'else 3 a címkék címkéihez] #encode a címkékhez
kódolt_címkék = np.array (kódolt_címkék)
# elemzi az adatokat #
reviews_len = [len (x) x-re a reviews_int-ben]
pd.Series (reviews_len) .hist ()
plt.show ()
pd.Series (reviews_len) .describe ()
# megszabadulni a rövid és hosszú értékektől #
nyomtatás ("a labels11111", len (encoded_labels))
reviews_int = [reviews_int [i] i-re, l felsorolva (reviews_len), ha l> 0]
kódolt_címkék = [kódolt_címkék [i] i-re, l a felsorolásban (reviews_len), ha l> 0 és i seq_length:
új = áttekintés [0: seq_length]
seq_length = 395
features = pad_features (reviews_int, seq_length)
nyomtatás (jellemzők)
len_feat = len (jellemzők)
nyomtatás ("len feat", len_feat)
split_frac = 0,8
# képzési adatok
train_x = features [0: int (split_frac * len_feat)] # a vélemények
nyomtatás ("vonat_x", vonat_x)
train_y = kódolt_címkék [0: int (split_frac * len_feat)] # a címkék
nyomtatás ("vonat_y", vonat_y)
nyomtatás ("review_split", len (reviews_split))
nyomtatás ("langer rev", len (reviews_int))
# adat maradt
maradék_x = jellemzők [int (split_frac * len_feat):]
fennmaradó_y = kódolt_címkék [int (split_frac * len_feat):]
nyomtatás (len (maradék_x))
nyomtatás (len (hátralévő_y))
# érvényesítési adat
érvényes_x = fennmaradó_x [0: int (len (fennmaradó_x) * 0,5)]
érvényes_y = fennmaradó_y [0: int (len (maradék_y) * 0,5)]
nyomtatás ('len (érvényes_x)', len (érvényes_x))
nyomtatás ('len (érvényes_y)', len (érvényes_y))
# teszt adat
teszt_x = fennmaradó_x [int (len (maradék_x) * 0,5):]
teszt_ y = fennmaradó_ y [int (len (maradék_y) * 0,5):]
nyomtatás ('len (teszt_x)', len (teszt_x))
nyomtatás ('len (teszt_y)', len (teszt_y))
train_data = TensorDataset (torch.tensor (np.asarray (train_x)), torch.tensor (np.asarray (train_y)))
valid_data = TensorDataset (torch.tensor (np.asarray (valid_x)), torch.tensor (np.asarray (valid_y)))
test_data = TensorDataset (torch.tensor (np.asarray (test_x)), torch.tensor (np.asarray (test_y)))
# dataloader
batch_size = 20 # a modellfrissítés előtt feldolgozott minták száma
train_loader = DataLoader (vonat_adatok, keverés = True, kötegelt_méret = köteg_méret, drop_last = Igaz)
valid_loader = DataLoader (valid_data, shuffle = True, batch_size = batch_size, drop_last = True)
test_loader = DataLoader (teszt_adatok, shuffle = True, batch_size = batch_size, drop_last = True)
dataiter = iter (train_loader) # hozzáférés beágyazási adatokhoz
minta_x, minta_y = dataiter.next ()
print ('Minta bemeneti méret:', minta_x.méret ()) # köteg_méret, seq_hossz
nyomtatás ('Minta bevitele: \ n', minta_x)
nyomtatás ()
print ('Címkeméret-minta:', minta_y.size ()) # köteg_méret
nyomtatás ('Minta címke: \ n', minta_y)
train_on_gpu = torch.device ("cpu") # Képzés a CPU-n
class SentimentLSTM (nn. modul):
" "
Az RNN modell, amelyet a hangulatelemzés elvégzésére használnak.
" "
def __init __ (self, vocab_size, output_size, embedding_dim, hidden_dim, n_layers, drop_prob = 0.5): # a konstruktor a különféle rétegek meghatározásához
" "
Inicializálja a modellt a rétegek konfigurálásával.
" "