Tf-idf⽂本特征提取
- TF-IDF的主要思想是:如果某个词或短语在⼀篇⽂章中出现的概率⾼,并且在其他⽂章中很少出现,则认为此词或者短语具有很好的类别区分能⼒,适合⽤来分类。
- TF-IDF作⽤:⽤以评估⼀字词对于⼀个⽂件集或⼀个语料库中的其中⼀份⽂件的重要程度。
1,公式:
- 词频(term frequency,tf)指的是某⼀个给定的词语在该⽂件中出现的频率
- 逆向⽂档频率(inverse document frequency,idf)是⼀个词语普遍重要性的度量。某⼀特定词语的idf,可以由总⽂件数⽬除以包含该词语之⽂件的数⽬,再将得到的商取以10为底的对数得到
最终得出结果可以理解为重要程度。
举例:假如⼀篇⽂章的总词语数是100个,⽽词语"⾮常"出现了5次,那么"⾮常"⼀词在该⽂件中的词频就是5/100=0.05。
⽽计算⽂件频率(IDF)的⽅法是以⽂件集的⽂件总数,除以出现"⾮常"⼀词的⽂件数。
所以,如果"⾮常"⼀词在1,0000份⽂件出现过,⽽⽂件总数是10,000,000份的话,
其逆向⽂件频率就是lg(10,000,000 / 1,0000)=3。
最后"⾮常"对于这篇⽂档的tf-idf的分数为0.05 * 3=0.15
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import jieba
def cut_word(text):
"""
进行中文分词:“我爱北京天安门” -> "我 爱 北京 天安门"
:param text:
:return:
"""
return ' '.join(jieba.cut(text))
def tfidf_demo():
"""
用TF-IDF的方法进行文本特征提取
:return:
"""
data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。',
'我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。',
'如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']
data_new = []
for sent in data:
data_new.append(cut_word(sent))
print(data_new)
# 1、实例化一个转换器类
transfer = TfidfVectorizer()
# 2、调用
data_final = transfer.fit_transform(data_new)
# 1、实例化一个转换器类
transfer = TfidfVectorizer()
# 2、调用fit_transform
data_final = transfer.fit_transform(data_new)
print("data_final:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
if __name__ == "__main__":
tfidf_demo()
# print(cut_word('我爱北京天安门'))
总结:
- tfidf主要思想: 如果某个词或短语在⼀篇⽂章中出现的概率⾼,并且在其他⽂章中很少出现,则认为此词或者短语具有很 好的类别区分能⼒,适合⽤来分类
- tf – 词频
- idf – 逆向⽂档频率 api:sklearn.feature_extraction.text.TfidfVectorizer
- 注意:
分类机器学习算法进⾏⽂章分类中前期数据处理⽅式