TF-IDF的主要思想
如果一个词或短语在某一篇文章中出现的概率很高,并且在其它文章中很少出现,则认为该词或短语具有很好的类别区分能力,适合用来分类
TF-IDF的作用
用以评估一个词语对于一个文件或者一个语料库中的其中一份文件的重要程度
TF-IDF公式
- 词频(term frequency,简称TF),指的是某一个给定的词语在该文件中出现的频率;
- 逆向文档频率(inverse document frequency,简称IDF)是一个词语普遍重要性的重要度量。某一特定词语idf由总文件数目除以包含该词语文件的数目,再将得到的商取以10为底数得到
TF-IDF=TF*IDF #衡量一个词语的重要程度
Sklearn中API(如果不了解建议去了解一哈Skelearn,能直接计算TF-IDF)
sklearn.feature_extraction.text.TfidfVectorizer(stop_words=[],.......)
- TfidfVectorizer.fit_transform(X)
X表示传入的文本,返回值为sparse矩阵 - TfidfVectorizer.inverse_transform(X)
X表示array数组或者sparse矩阵,返回值为转换之前的数据格式 - TfidfVectorizer.get_feature_names()
返回值为单词列表
实例如下(直接全部粘贴到PyChram即可使用,注意导入相关依赖包,如果没有及时下载)
# 针对中文分词
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
def cut_word(text):
new_text = " ".join(list(jieba.cut(text)))
print(new_text)
return new_text
#tf-idf实列
def tfidf_demo():
data = ["老沈是一名网约车司机,晚上是他最忙的时段。他经常在饭店门口等那些喝醉了酒的客人。",
"老主顾把胖子塞进车后座,对老沈大声地说道:“先到长城花园,顺路顺路,先把李总送回家。”",
"那姑娘报了一个地名,老主顾眼都不眨地说道:“顺路顺路,刚好先送你到家。”"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# 1、生成一个转换器
transfer = TfidfVectorizer(stop_words=[",","。",'"',":"])
# 2、调用fit_transform
data_finale = transfer.fit_transform(data_new)
print("特征名字:\n", transfer.get_feature_names())
print("data_new:\n", data_finale.toarray())
return
if __name__ == '__main__':
tfidf_demo()