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列表魔术。