特征抽取是对文本等数据进行值化,特征值化是为了让计算机能够更好的去理解数据。
sklearn特征抽取api
- sklearn.feature_extraction
字典特征抽取(对字典数据进行特征值化)
- from sklearn.feature_extraction import DictVectorizer
# 字典特征抽取
from sklearn.feature_extraction import DictVectorizer
dict = DictVectorizer(sparse=False)
data = dict.fit_transform([{"city":"北京","temperature":100},{"city":"上海","temperature":60},{"city":"深圳","temperature":30}])
print(dict.get_feature_names())
print(data)
文本特征抽取(对文本数据进行特征值化)
- from sklearn.feature_extraction.text import CountVectorizer
英文特征抽取
from sklearn.feature_extraction.text import CountVectorizer # 导入包
# 特征抽取
# 实例化 CountVectorizer 对象
vector = CountVectorizer()
# 调用fit_transform 输入并转换数据
data = vector.fit_transform(["life is is is short,i like python","life is too long,i dislike python"])
# 打印结果
print(vector.get_feature_names())
print()
print(data.toarray())
中文特征抽取
from sklearn.feature_extraction.text import CountVectorizer # 导入包
# 特征抽取
# 实例化 CountVectorizer 对象
vector = CountVectorizer()
# 调用fit_transform 输入并转换数据
data = vector.fit_transform(["人生苦短,我用python","人生 漫长,我不用python"])
# 打印结果
print(vector.get_feature_names())
print()
print(data.toarray())
from sklearn.feature_extraction.text import CountVectorizer # 导入包
import jieba
def cutword():
# 使用jieba.cut 进行分词
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝大部分人是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
# 转换成列表
content1 = list(con1)
content2 = list(con2)
content3 = list(con3)
# 把列表转换成字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
return c1,c2,c3
def hanzi():
c1,c2,c3 = cutword()
print(c1,c2,c3)
# 实例化 CountVectorizer 对象
cv = CountVectorizer()
# 调用fit_transform 输入并转换数据
data = cv.fit_transform([c1,c2,c3])
# 打印结果
print(cv.get_feature_names())
print(data.toarray())
if __name__=='__main__':
hanzi()
TF-IDF
- TF-IDF 的主要思想是:如果某个词或短语在一篇文章中出现的频率高,并且在其它文章中很少出现,则认为改词或者短语具有很好的类别区分能力,适合用来分类。
- TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要性。
tf : term frequency : 词的频率
idf : 逆文档频率 : inverse document frequency log(总文档数量/(除以)该词出现的文档数量)
log(数值):输入的数值越小,结果越小
tf*idf = 重要性程度
- from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cutword():
# 使用jieba.cut 进行分词
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝大部分人是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
# 转换成列表
content1 = list(con1)
content2 = list(con2)
content3 = list(con3)
# 把列表转换成字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
return c1,c2,c3
def tfidfvec():
c1,c2,c3 = cutword()
print(c1,c2,c3)
# 实例化 TfidfVectorizer 对象
tf = TfidfVectorizer()
# 调用fit_transform 输入并转换数据
data = tf.fit_transform([c1,c2,c3])
# 打印结果
print(tf.get_feature_names())
print(data.toarray())
if __name__=='__main__':
tfidfvec()