【问题标题】:Sentence returns empty dictionary from gensim.corpora句子从 gensim.corpora 返回空字典
【发布时间】:2019-09-20 19:56:48
【问题描述】:

我正在尝试修改来自this post 的示例 这适用于 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

这是因为字典是空的:

但是我给 dic 提供了一个非空列表

这就是我找不到失败原因的部分

【问题讨论】:

    标签: python nlp gensim spacy


    【解决方案1】:

    问题出在这一行:

    docs_dict.filter_extremes(no_below=20, no_above=0.2)
    

    no_below=20 表示将整个语料库中计数小于20的所有token从字典中删除。 no_above=0.2 表示出现在超过 20% 的文档中的所有标记都将从字典中删除。 由于您在示例中仅使用了一个玩具文档集,因此您的所有标记都将被过滤。只需在使用玩具文档集时注释该行即可。

    【讨论】:

    • 是的,它工作得很好,还有一件事取决于我们的数据?
    • @HackbalTeamz 正确。 filter_extremes 函数对于大型数据集最有用,例如当您在创建模型时内存不足时。对小数据集 imo 来说意义不大。
    猜你喜欢
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2013-11-30
    • 2015-01-01
    相关资源
    最近更新 更多