是否有一个完整的python 2.7示例有关如何使用tfidftransformer(http://scikit-learn.org/stable/modules/mmodules/feature_extraction.htaction.html)将TF/IDF用于N-克的克?环顾Scikit-Learn页面,它只有代码段(未完成样本)。
问候,lin
对于TF-IDF功能提取,Scikit-learn具有2个类TfidfTransformer
和TfidfVectorizer
类。这两个类实质上都具有相同的目的,但应该以不同的方式使用。对于文本特征提取,Scikit-learn具有变压器和 vectorizers 的概念。向量器直接在原始文本上工作以生成功能,而变压器则可以在现有功能上运行并将其转换为新功能。因此,按照该类比,TfidfTransformer
在现有的术语频率功能上工作,并将其转换为TF-IDF功能,而TfidfVectorizer
则将其作为输入为输入原始文本和直接生成TF-IDF功能。您应该始终使用TfidfVectorizer
,如果在功能构建时,您没有现有的文档 - 期限矩阵。在黑匣子级别,您应该将TfidfVectorizer
视为CountVectorizer
,然后是TfidfTransformer
。
现在来了Tfidfectorizer
的工作示例。请注意,如果此示例很清楚,那么您将毫无困难地了解TfidfTransformer
给出的示例。
现在考虑您的语料库中有以下4个文档:
text = [
'jack and jill went up the hill',
'to fetch a pail of water',
'jack fell down and broke his crown',
'and jill came tumbling after'
]
您可以使用任何iterable
,只要它在字符串上迭代。TfidfVectorizer
还支持从文件中详细介绍文件的文本。现在,在最简单的情况下,我们可以初始化TfidfVectorizer
对象并将培训数据适合其。如下所示:
tfidf = TfidfVectorizer()
train_features = tfidf.fit_transform(text)
train_features.shape
此代码只需fits
我们的输入数据上的vectorizer即可生成尺寸稀疏矩阵4 x 20
。因此,它将给定文本中的每个文档转换为20
功能的向量,其中词汇的大小为20
。
在TfidfVectorizer
的情况下,当我们说fit the model
时,这意味着TfidfVectorizer
从语料库中学习IDF权重。"转换数据"是指使用拟合模型(学习的IDF权重)将文档转换为TF-IDF向量。该术语是整个Scikit-Learn的标准。在分类问题的情况下,它非常有用。考虑是否要根据某些使用TF-IDF向量作为功能的标记培训数据将文档分类为正或负面。在这种情况下,您将使用培训数据构建TF-IDF矢量机,当您看到新的测试文档时,您只需使用已经 fitting TfidfVectorizer
。
因此,如果我们有以下test_txt
:
test_text = [
'jack fetch water',
'jill fell down the hill'
]
我们将通过简单地做
来构建测试功能test_data = tfidf.transform(test_text)
这将再次为我们提供2 x 20
的稀疏矩阵。在这种情况下使用的IDF权重是从培训数据中学到的。
这就是简单的TfidfVectorizer
的工作方式。您可以通过传递构造函数中的更多参数来使其更加复杂。这些在Scikit-Learn文档中有很好的记录。我经常使用的一些参数是:
-
ngram_range
-这使我们能够使用n gram令牌构建TF -IDF向量。例如,如果我通过(1,2)
,那么这将同时构建Umigrams and Bigrams。 -
stop_words
-允许我们在此过程中分别给出止损以忽略。几乎所有文档中都存在的诸如" the","等单词是一种常见的做法。 -
min_df
和max_df
-这使我们能够根据文档频率动态过滤词汇。例如,通过给出0.7
的max_df
,我可以让我的应用程序自动删除域特定的停止单词。例如,在医学期刊的语料库中,可以将疾病一词视为停止词。
除此之外,您还可以参考我为项目编写的示例代码。尽管它的记录不佳,但功能命名很好。
希望这会有所帮助!