Я пытаюсь изменить пример из этого поста , который применяет tf-idf.
from sklearn.datasets import fetch_20newsgroups
from gensim.corpora import Dictionary
from gensim.models.tfidfmodel import TfidfModel
from gensim.matutils import sparse2full
import numpy as np
import spacy
nlp = spacy.load('en_core_web_md')
def keep_token(t):
return (t.is_alpha and
not (t.is_space or t.is_punct or
t.is_stop or t.like_num))
def lemmatize_doc(doc):
return [ t.lemma_ for t in doc if keep_token(t)]
sentences = ['Pro USB and Analogue Microphone']
docs = [lemmatize_doc(nlp(doc)) for doc in sentences]
docs_dict = Dictionary(docs)
docs_dict.filter_extremes(no_below=20, no_above=0.2)
docs_dict.compactify()
docs_corpus = [docs_dict.doc2bow(doc) for doc in docs]
model_tfidf = TfidfModel(docs_corpus, id2word=docs_dict)
docs_tfidf = model_tfidf[docs_corpus]
docs_vecs = np.vstack([sparse2full(c, len(docs_dict)) for c in docs_tfidf])
tfidf_emb_vecs = np.vstack([nlp(docs_dict[i]).vector for i in range(len(docs_dict))])
docs_emb = np.dot(docs_vecs, tfidf_emb_vecs)
But I'm getting this error:
282 _warn_for_nonsequence(tup)
--> 283 return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)
284
285
ValueError: need at least one array to concatenate
Причина в том, что эта строка перенастраивает пустой список:
docs_corpus = [docs_dict.doc2bow(doc) for doc in docs]
docs_corpus
Это потому, что словарь пуст:
Но я кормлю диктовку непустым списком
Эту часть я не нахожупричина, по которой это не удается