文本特征抽取
作用:对文本数据进行特征值化
类:sklearn.feature_extraction.text.CountVectorizer
1.CountVectorizer语法
• CountVectorizer(max_df=1.0,min_df=1,…)
• 返回词频矩阵
•CountVectorizer.fit_transform(X,y)
•X:文本或者包含文本字符串的可迭代对象
•返回值:返回sparse矩阵
•CountVectorizer.inverse_transform(X)
•X:array数组或者sparse矩阵
返回值:转换之前数据格式
•CountVectorizer.get_feature_names()
•返回值:单词列表
2.流程和例子
from sklearn.feature_extraction.text import CountVectorizer def conuntvec(): """ 对文本进行特征值化 :return: None """ cv = CountVectorizer() data = cv.fit_transform(["life is short,i like python", "life is too long,i dislike python"]) print(cv.get_feature_names()) # 将sparse矩阵转换为·数组 print(data.toarray()) return None if __name__ == '__main__': conuntvec()
结果:
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too'] [[0 1 1 1 0 1 1 0] [1 1 1 0 1 1 0 1]]
第一行,打印出 统计所有文章当中所有的词,重复的只看做一次 (词的列表)
注意: 对于单个的英文字母直接进行放弃,不进行统计 (因为它是没有分类的依据的)
数据数组:, 类似于统计的次数,对每篇文章,在词的列表里面进行统计每个词出现的次数
数据数组的第一行,第一个小数组:对应的输入的数据,以逗号分隔开,
例如第一句话是:"life is short,i like python", 对应词的列表,出现几次值就为几
3. 文本特征抽取: 统计次数 Count() ,可用于文本分类,情感分析
4.
(1)对于中文特征值化要,按照指定的格式提前分好词,例如
中文文本以空格分开
from sklearn.feature_extraction.text import CountVectorizer def countvec(): """ 对中文文本进行特征值化 :return: None """ cv = CountVectorizer() data = cv.fit_transform([ "人生 苦短 我 喜欢 Python Python", "人生 漫长 不用 Python" ]) print(cv.get_feature_names()) print(data.toarray()) return None if __name__ == '__main__': countvec()
结果: 代表的意思同英文一样,统计出次数
['python', '不用', '人生', '喜欢', '漫长', '苦短'] [[2 0 1 1 0 1] [1 1 1 0 1 0]]
(2)可以使用jieba库进行分词
利用jieba库做中文特征抽取, 例子
from sklearn.feature_extraction.text import CountVectorizer import jieba def cutword(): content1 = jieba.lcut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上," "所以每个人不要放弃今天。") content2 = jieba.lcut("我们看到的从很远星系来的光是在几百万年之前发出的," "这样当我们看到宇宙时,我们是在看它的过去。") content3 = jieba.lcut("如果只用一种方式了解某样事物,你就不会真正了解它。" "了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。") # 把分词后的列表转换成字符串 c1 = ' '.join(content1) c2 = ' '.join(content2) c3 = ' '.join(content3) return c1, c2, c3 def chinesevec(): """ 对一段文本使用jieba分词后组成有空格的格式的字符串进行文本特征抽取 :return: None """ c1, c2, c3 = cutword() cv = CountVectorizer() data = cv.fit_transform([c1, c2, c3]) print(cv.get_feature_names()) print(data.toarray()) return None if __name__ == '__main__': chinesevec()
抽取的结果: 完成了中文特征抽取,文本特征值化
['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过 去', '这样'] [[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0] [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1] [1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]