from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
# 字典特征提取
def dict_demo():
# 字典类型的数据
data = [{'city': '北京', 'temperature': 100},{'city': '上海', 'temperature': 60},{'city': '深圳', 'temperature': 30}]
# 实例化一个转换器类,默认sparse=True,表示transfer.fit_transform(data)的返回值为稀疏矩阵
# 更改为sparse=False后,返回的不是稀疏矩阵
transfer = DictVectorizer(sparse=False)
# 调用fit_transform方法,返回sparse矩阵
'''
非稀疏矩阵
[[ 0. 1. 0. 100.]
[ 1. 0. 0. 60.]
[ 0. 0. 1. 30.]]
等同于:
稀疏矩阵: 前一部分是坐标,表示后面值在矩阵中的位置
(0, 1) 1.0
(0, 3) 100.0
(1, 0) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0
'''
data_new = transfer.fit_transform(data)
feature_name = transfer.get_feature_names()
print("提取后的数据:",data_new)
print("特征名字:",feature_name)
# 文本特征提取(以单词为特征值)
def text_demo():
text = ["life is short short,i like python python","life is too long,i dislike python"]
# 实例化一个转换器对象,stop_words=["too","is"]中的值不作为结果的特征值,这个列表可以去网上找一些专门的停用词表
# transfer = CountVectorizer(stop_words=["too","is"])
transfer = CountVectorizer()
# 调用fit_transform方法,返回sparse矩阵
new_text = transfer.fit_transform(text)
new_text_feater_name = transfer.get_feature_names()
# 稀疏矩阵
print(new_text)
# 非稀疏矩阵
print(new_text.toarray())
# 特征名称
print(new_text_feater_name)
# 进行中文分词的函数
def cut_text(data):
new_data = " ".join(list(jieba.cut(data)))
return new_data
# 中文文本特征提取(以jieba分词后的中文词语最为特征词)
def text_chinese_demo():
# 原始数据
text_list = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
new_text_list = []
# 循环进行分词,并保存到新的列表
for text in text_list:
new_text_list.append(cut_text(text))
# 实例化一个转换器对象
transfer = CountVectorizer()
# 调用fit_transform方法,返回sparse矩阵
new_text_array = transfer.fit_transform(new_text_list)
new_text_feater_name = transfer.get_feature_names()
# 稀疏矩阵
print(new_text_array)
# 非稀疏矩阵
print(new_text_array.toarray())
# 特征名称
print(new_text_feater_name)
# 用tf-idf快速的提取出文章的关键词
def tf_idf_demo():
text_list = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
new_text_list = []
# 循环进行分词,并保存到新的列表
for text in text_list:
new_text_list.append(cut_text(text))
transfer = TfidfVectorizer()
new_text_array = transfer.fit_transform(new_text_list)
new_text_feater_name = transfer.get_feature_names()
# 稀疏矩阵
print(new_text_array)
# 非稀疏矩阵
print(new_text_array.toarray())
# 特征名称
print(new_text_feater_name)
if __name__ == '__main__':
# 字典特征提取
# dict_demo()
# 英文文本特征提取
# text_demo()
# 中文文本特征提取
# text_chinese_demo()
# 用tf-idf快速的提取出文章的关键词
tf_idf_demo()