sklearn文本特征提取和TfidfVectorizer
文本特征提取:单词作为特征。
**关键词:**在某一个类别的文章中,出现的次数很多,在其它的文章中出现的次数很少。具有很好的类别区分能力,适合用来分类。
**sklearn.feature_extraction.text.CountVectorizer():**统计每个样本特征值出现的次数。**注意:**英文文本中不统计字母,中文文本中不统计单个字,标点符号也不统计。
注意:在统计文本里面单词出现次数的时候,单词或者词语需要用空格键隔开,英文文本已经用空格键隔开了,但是中文文本一般没有隔开,需要手动隔开或者用程序代码来隔开(jieba模块)。
例如:英文文本:I want to play football. 单词之间已经隔开了。
中文文本:我爱北京天安门。词语之间没有隔开,需要手动隔开或者用程序代码来隔开,隔开之后是:我 爱 北京 天安门 。
TfidfVectorizer:用来评估一字词对于一个文件集合中的一篇文章的重要程度。
**计算方法1:**tf(term frequency):词频,某一个词语在该文件中出现的频率,idf(inverse document frequency):逆向文档频率,是一个词语普遍重要性的度量。可以由总文件数目除以包含该词语的文件的数目,再将得到的商取以10为底的对数得到。
**计算方法2:**tf:文本中词语出现的次数,idf:In[(1+nd)/(1+df)]+1 nd:文本数目 df:包含词语的文本数目。
最后,tfidf = tf * idf
TfidfVectorizer按照计算方法2来计算。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba
import numpy
import pandas
def count_demo():
#文本特征抽取
data = {
'life is too too short, I like like like like python',
'life is too too long, I dislike python'
}
transfer = CountVectorizer()
data_new = transfer.fit_transform(data)
print(data_new.toarray()) #toarray()将稀疏矩阵转换成一般的矩阵
print(transfer.get_feature_names())
return None
def count_chinese_demo():
#中文文本特征抽取 #中文字词之间需要用空格隔开,单个字不统计
data = {
'我 爱 北京 天安门, 天安门 上 太阳 升',
'人生苦短 我用Python'
}
transfer = CountVectorizer()
data_new = transfer.fit_transform(data)
print(data_new.toarray()) #toarray()将稀疏矩阵转换成一般的矩阵
print(transfer.get_feature_names())
return None
def cut_word(text):
#用jieba进行中文分词
text = ' '.join(jieba.cut(text))
return text
def count_chinese_demo_2():
#中文文本特征抽取,自动分词
data = [ '我爱北京天安门,天安门上太阳升。',
'我曾经跨过山和大海,也曾经跨过人山人海。',
'幻胖的女孩,需要好好地吃饭,脸圆圆的很可爱。']
data_new = []
for sent in data:
data_new.append(cut_word(sent))
print(data_new)
transfer = CountVectorizer()
data_final = transfer.fit_transform(data_new)
print(data_final.toarray()) #toarray()将稀疏矩阵转换成一般的矩阵
print(transfer.get_feature_names())
return None
def tfidf_demo():
#用tf-idf进行文本特征抽取
data = [ '爱北京北京北京天安门天安门上太阳升',
'我曾经跨过山和大海,也曾经跨过人山人海。',
'幻胖的北京女孩,需要好好地吃饭,脸圆圆的很可爱。']
data_new = []
for sent in data:
data_new.append(cut_word(sent))
print(data_new)
transfer = TfidfVectorizer(norm=None) #norm默认的是正则化/归一化
data_final = transfer.fit_transform(data_new)
print(data_final.toarray()) #toarray()将稀疏矩阵转换成一般的矩阵
print(transfer.get_feature_names())
return None
if __name__ == "__main__":
#count_demo()
#count_chinese_demo()
#count_chinese_demo_2()
#tfidf_demo()