本文主要介绍两个类的基本使用,CountVectorizer与TfidfVectorizer,这两个类都是特征数值计算的常见方法。对于每一个训练文本,CountVectorizer只考虑每种词汇在该训练文本中出现的频率,而TfidfVectorizer除了考量某一词汇在当前训练文本中出现的频率之外,同时关注包含这个词汇的其它训练文本数目的倒数。相比之下,训练文本的数量越多,TfidfVectorizer这种特征量化方式就更有优势。
1. sklearn.feature_extraction.text.CountVectorizer
这个类的主要作用是统计每一个训练文本中,每个单词出现的频率;然后构成一个特征矩阵,每一行表示一个训练文本的词频统计结果。其思想是,先根据所有训练文本,不考虑其出现顺序,只将训练文本中每个出现过的词汇单独视为一列特征,构成一个词汇表(vocabulary list),该方法又称为词袋法(Bag of Words)。
#python2.7 sklearn version 0.18.1
from sklearn.feature_extraction.text import CountVectorizer
X_test = ['I sed about sed the lack',
'of any Actually']
count_vec=CountVectorizer(stop_words=None)
print count_vec.fit_transform(X_test).toarray()
print '\nvocabulary list:\n\n',count_vec.vocabulary_
>>
>>
[[1 0 0 1 1 0 2 1]
[0 1 1 0 0 1 0 0]]
(0, 4) 1
(0, 7) 1
(0, 0) 1
(0, 6) 2
(0, 3) 1
(1, 1) 1
(1, 2) 1
(1, 5) 1
vocabulary list:
{
u'about': 0, u'i': 3, u'of': 5, u'lack': 4, u'actually': 1, u'sed': 6, u'the': 7, u'any': 2}
关于上面的代码,有几点说明:
(1)第6行代码中,stop_words=None表示不去掉停用词,若改为stop_words='english’则去掉停用词;
(2)第12,13行,分别是X_test中,两段文本的词频统计结果;
(3)第15-22行,是稀疏矩阵的表示方式;
(4)CountVectorizer同样适用于中文
# -*- coding: utf-8 -*-
from sklearn.feature_extraction.text import CountVectorizer
X_test = [u'没有 你 的 地方 都是 他乡',u'没有 你 的 旅行 都是 流浪']
count_vec=CountVectorizer(token_pattern=r"(?u)\b\w\w+\b")
print count_vec.fit_transform(X_test).toarray()
print count_vec.fit_transform(X_test)
print '\nvocabulary list:\n'
for key,value in count_vec.vocabulary_.items(