在sklearn中从CountVectorizer到TfidfTransformer的转换

5

我正在使用sklearn处理大量文本数据。首先,我需要将文本内容(单词计数)转换为向量,并执行TfidfTransformer。以下是我的代码,似乎无法将CountVectorizer的输出传递给TfidfTransformer的输入。

TEXT = [data[i].values()[3] for i in range(len(data))]

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer

vectorizer = CountVectorizer(min_df=0.01,max_df = 2.5, lowercase = False, stop_words = 'english')

X = vectorizer(TEXT)
transformer = TfidfTransformer(X)
X = transformer.fit_transform()

当我运行这段代码时,我遇到了以下错误:
Traceback (most recent call last):
File "nlpQ2.py", line 27, in <module>
X = vectorizer(TEXT)
TypeError: 'CountVectorizer' object is not callable

我原以为已将文本向量化,但现在它变成了一个矩阵——我是否错过了某个转换步骤?谢谢!

2个回答

7

这一行

X = vectorizer(TEXT)

如果没有调用 fit_transform,向量化器就不会产生输出(这是引发异常的原因,与 TfIdf 本身无关)。同时,你下一次的调用也是错误的。你应该将数据作为参数传递给 fit_transform,而不是传递给构造函数。

X = vectorizer.fit_transform(TEXT)
transformer = TfidfTransformer()
X = transformer.fit_transform(X)

3

您可能正在寻找一个pipeline,也许像这样的东西:

pipeline = Pipeline([
    ('vect', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
])

或者
pipeline = make_pipeline(CountVectorizer(), TfidfTransformer())

在这个管道上,执行常规操作(例如 fitfit_transform 等等)。
另请参阅此示例

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接