无需每次调用​​ .fit_transform() 即可访问文档术语矩阵

Access document-term matrix without calling .fit_transform() each time

如果我已经调用了 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这样的方法?

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

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

其他信息:

我正在使用 Anaconda 和 Jupyter Notebook。

您可以简单地将拟合分配给一个变量 dtm,并且,因为它是一种 Scipy sparse matrix, use the 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))