0

如果我已经调用过vectorizer.fit_transform(corpus),那么以后打印文档术语矩阵以vectorizer.fit_transform(corpus)再次调用的唯一方法是什么?

from sklearn.feature_extraction.text import CountVectorizer
corpus = ['the', 'quick','brown','fox']
vectorizer = CountVectorizer(stop_words='english')
vectorizer.fit_transform(corpus) # Returns the document-term matrix

我的理解是通过上述操作,我现在已将术语保存到vectorizer对象中。我假设这是因为我现在可以调用而无需再次vectorizer.vocabulary_传入。corpus

所以我想知道为什么没有类似的方法.document_term_matrix

corpus如果数据现在已经存储在vectorizer对象中,我必须再次传入似乎很奇怪。但根据文档,只有.fit, .transform, 和.fit_transform返回矩阵。

文档: http ://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer.fit

其他信息:

我正在使用 Anaconda 和 Jupyter Notebook。

4

1 回答 1

2

您可以简单地将 fit 分配给 variable dtm,并且由于它是Scipy sparse matrix,因此使用以下toarray方法打印它:

from sklearn.feature_extraction.text import CountVectorizer
corpus = ['the', 'quick','brown','fox']
vectorizer = CountVectorizer(stop_words='english')
dtm = vectorizer.fit_transform(corpus)

# vectorizer object is still fit:
vectorizer.vocabulary_
# {'brown': 0, 'fox': 1, 'quick': 2}

dtm.toarray()
# array([[0, 0, 0],
#        [0, 0, 1],
#        [1, 0, 0],
#        [0, 1, 0]], dtype=int64)

尽管我猜对于任何实际的文档术语矩阵来说,这都是不切实际的……您可以改用该nonzero方法:

dtm.nonzero()
# (array([1, 2, 3], dtype=int32), array([2, 0, 1], dtype=int32))
于 2018-01-11T18:02:52.780 回答