Estou rodando o mesmo código da aula porém em outra base de dados. Estou tentando fazer a análise de sentimentos para uma base de tweets.
segue meu código:
import numpy as np
def matriz_vetores(textos):
x = len(textos)
y = 300
matriz = np.zeros((x,y))
for i in range(x):
palavras_numeros = tokenizador(textos.iloc[i])
matriz[i] = combinacao_de_vetores_por_soma(palavras_numeros)
return matriz
matriz_vetores_treino = matriz_vetores(df_treino["tweet"])
matriz_vetores_treino = matriz_vetores(df_teste["tweet"])
O erro:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-60-95e14761acea> in combinacao_de_vetores_por_soma(palavras_numeros)
4 try:
----> 5 vetor_resultante += modelo.get_vector(pn)
6 except KeyError:
6 frames
KeyError: "word '1498321048902384092' not in vocabulary"
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
/usr/local/lib/python3.8/dist-packages/gensim/models/keyedvectors.py in word_vec(self, word, use_norm)
450 return result
451 else:
--> 452 raise KeyError("word '%s' not in vocabulary" % word)
453
454 def get_vector(self, word):
KeyError: "word '0000000000000000000' not in vocabulary"
Minha questão: a função anterior não deveria resolver esse problema de palavras fora do vocabulário? Segue a função que deveria corrigir isso:
def combinacao_de_vetores_por_soma(palavras_numeros):
vetor_resultante = np.zeros(300)
for pn in palavras_numeros:
try:
vetor_resultante += modelo.get_vector(pn)
except KeyError:
if pn.isnumeric():
pn = "0"*len(pn)
vetor_resultante += modelo.get_vector(pn)
else:
vetor_resultante += modelo.get_vector("unknown")
return vetor_resultante