TypeError:“ TfidfModel”对象不可调用

初始化后,为什么不能为每个文档计算TFIDF矩阵?

我从999个文档开始:999个段落,每个段落约5-15个句子。
spaCy对所有内容进行标记化之后,我创建了字典(〜16k个唯一标记)和语料库(元组列表的列表)

现在,我准备为某些ML创建tfidf矩阵(以及后来的LDA和w2V矩阵)。但是,在用我的语料库初始化tfidf模型之后(用于计算“ IDF”)
tfidf = models.TfidfModel(corpus)尝试查看每个文档的tfidf时,出现以下错误消息tfidf(corpus[5])
TypeError:“ TfidfModel”对象不可调用

我可以使用不同的语料库创建此模型,其中我有四个文档,每个文档仅包含一个句子。
在那里,我可以确认期望的语料库是元组列表的列表:
[doc1 [(word1,count),(word2,count),...],doc2 [(word3,count),(word4,count),...] ...]

from gensim import corpora, models, similarities

texts = [['teenager', 'martha', 'moxley'...], ['ok','like','kris','usual',...]...]
dictionary = corpora.Dictionary(texts)
>>> Dictionary(15937 unique tokens: ['teenager', 'martha', 'moxley']...)

corpus = [dictionary.doc2bow(text) for text in texts]
>>> [[(0, 2),(1, 2),(2, 1)...],[(3, 1),(4, 1)...]...]

tfidf = models.TfidfModel(corpus)
>>> TfidfModel(num_docs=999, num_nnz=86642)

tfidf(corpus[0])
>>> TypeError: 'TfidfModel' object is not callable

corpus[0]
>>> [(0, 2),(1, 2),(2, 1)...]

print(type(corpus),type(corpus[1]),type(corpus[1][3]))
>>> <class 'list'> <class 'list'> <class 'tuple'>

最佳答案

扩展@ whs2k的答案,使用方括号语法在语料库周围形成转换包装,从而形成一种惰性处理流水线。

直到阅读了本教程中的注释,我才明白:https://radimrehurek.com/gensim/tut2.html


  调用模型[语料库]仅在旧语料库周围创建包装器
  文档流–实际转换是在运行过程中即时完成的
  文档迭代。我们无法在以下时间转换整个语料库
  调用corpus_transformed = model [corpus],因为那意味着
  将结果存储在主存储器中,这与gensim的
  记忆独立的目标。如果您要遍历
  转换了corpus_transformed多次,并进行了转换
  成本很高,请先将生成的语料库序列化到磁盘上,然后继续
  使用那个。


但是我仍然不完全了解潜在的Python列表魔术。

07-28 03:01
查看更多