博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【ZH奶酪】如何用sklearn计算中文文本TF-IDF?
阅读量:5096 次
发布时间:2019-06-13

本文共 5164 字,大约阅读时间需要 17 分钟。

1. 什么是TF-IDF

tf-idf(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技术。tf-idf是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

2. 如何用sklearn计算TF-IDF?

2.1 语料集

本文所用语料集为人机对话系统中的短文本语料,corpus列表中的每个元素是一条Query。(如果是长文本的话,每个元素是一篇文档)

corpus = [  "帮我 查下 明天 北京 天气 怎么样",  "帮我 查下 今天 北京 天气 好不好",  "帮我 查询 去 北京 的 火车",  "帮我 查看 到 上海 的 火车",  "帮我 查看 特朗普 的 新闻",  "帮我 看看 有没有 北京 的 新闻",  "帮我 搜索 上海 有 什么 好玩的",  "帮我 找找 上海 东方明珠 在哪"]

2.2 将语料转换为词袋向量

step 1. 声明一个向量化工具vectorizer

本文使用的是CountVectorizer,默认情况下,CountVectorizer仅统计长度超过两个字符的词,但是在短文本中任何一个字都可能十分重要,比如“去/到”等,所以要想让CountVectorizer也支持单字符的词,需要加上参数token_pattern='\\b\\w+\\b'

step 2. 根据语料集统计词袋(fit);

step 3. 打印语料集的词袋信息;
step 4. 将语料集转化为词袋向量(transform);
step 5. 还可以查看每个词在词袋中的索引;
代码

from sklearn.feature_extraction.text import CountVectorizer# step 1vectoerizer = CountVectorizer(min_df=1, max_df=1.0, token_pattern='\\b\\w+\\b')# step 2vectoerizer.fit(corpus)# step 3bag_of_words = vectoerizer.get_feature_names()print("Bag of words:")print(bag_of_words)print(len(bag_of_words))# step 4X = vectoerizer.transform(corpus)print("Vectorized corpus:")print(X.toarray())# step 5print("index of `的` is : {}".format(vectoerizer.vocabulary_.get('的')))

输出

Bag of words:['上海', '东方明珠', '什么', '今天', '到', '北京', '去', '在哪', '天气', '好不好', '好玩的', '帮我', '怎么样', '找找', '搜索', '新闻', '明天', '有', '有没有', '查下', '查看', '查询', '火车', '特朗普', '的', '看看']26Vectorized corpus:[[0 0 0 0 0 1 0 0 1 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0] [0 0 0 1 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0] [0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 1 0] [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1 0] [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0] [0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1] [1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0] [1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0]]index of `的` is : 24

2.3 根据词袋向量统计TF-IDF

step 1. 声明一个TF-IDF转化器(TfidfTransformer);

step 2. 根据语料集的词袋向量计算TF-IDF(fit);
step 3. 打印TF-IDF信息:比如结合词袋信息,可以查看每个词的TF-IDF值;
step 4. 将语料集的词袋向量表示转换为TF-IDF向量表示;

from sklearn.feature_extraction.text import TfidfTransformer# step 1tfidf_transformer = TfidfTransformer()# step 2tfidf_transformer.fit(X.toarray())# step 3for idx, word in enumerate(vectoerizer.get_feature_names()):  print("{}\t{}".format(word, tfidf_transformer.idf_[idx]))# step 4tfidf = tfidf_transformer.transform(X)print(tfidf.toarray())

输出

上海  1.8109302162163288东方明珠    2.504077396776274什么  2.504077396776274今天  2.504077396776274到   2.504077396776274北京  1.587786664902119去   2.504077396776274在哪  2.504077396776274天气  2.09861228866811好不好 2.504077396776274好玩的 2.504077396776274帮我  1.0怎么样 2.504077396776274找找  2.504077396776274搜索  2.504077396776274新闻  2.09861228866811明天  2.504077396776274有   2.504077396776274有没有 2.504077396776274查下  2.09861228866811查看  2.09861228866811查询  2.504077396776274火车  2.09861228866811特朗普 2.504077396776274的   1.587786664902119看看  2.504077396776274[[0.         0.         0.         0.         0.         0.3183848  0.         0.         0.42081614 0.         0.         0.20052115  0.50212047 0.         0.         0.         0.50212047 0.  0.         0.42081614 0.         0.         0.         0.  0.         0.        ] [0.         0.         0.         0.50212047 0.         0.3183848  0.         0.         0.42081614 0.50212047 0.         0.20052115  0.         0.         0.         0.         0.         0.  0.         0.42081614 0.         0.         0.         0.  0.         0.        ] [0.         0.         0.         0.         0.         0.33116919  0.52228256 0.         0.         0.         0.         0.20857285  0.         0.         0.         0.         0.         0.  0.         0.         0.         0.52228256 0.43771355 0.  0.33116919 0.        ] [0.38715525 0.         0.         0.         0.53534183 0.  0.         0.         0.         0.         0.         0.21378805  0.         0.         0.         0.         0.         0.  0.         0.         0.44865824 0.         0.44865824 0.  0.33944982 0.        ] [0.         0.         0.         0.         0.         0.  0.         0.         0.         0.         0.         0.23187059  0.         0.         0.         0.48660646 0.         0.  0.         0.         0.48660646 0.         0.         0.5806219  0.36816103 0.        ] [0.         0.         0.         0.         0.         0.33116919  0.         0.         0.         0.         0.         0.20857285  0.         0.         0.         0.43771355 0.         0.  0.52228256 0.         0.         0.         0.         0.  0.33116919 0.52228256] [0.33420711 0.         0.4621274  0.         0.         0.  0.         0.         0.         0.         0.4621274  0.18454996  0.         0.         0.4621274  0.         0.         0.4621274  0.         0.         0.         0.         0.         0.  0.         0.        ] [0.37686288 0.52110999 0.         0.         0.         0.  0.         0.52110999 0.         0.         0.         0.20810458  0.         0.52110999 0.         0.         0.         0.  0.         0.         0.         0.         0.         0.  0.         0.        ]]

参考资料

转载于:https://www.cnblogs.com/CheeseZH/p/8644893.html

你可能感兴趣的文章
hdu 5402 Travelling Salesman Problem (技巧,未写完)
查看>>
[AIR] 获取U盘,打开U盘
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
asp.net 获取IP地理位置的几个主要接口
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
设计模式之装饰者模式
查看>>
【转】Linux内核调试方法总结
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>
ORACLE 递归查询
查看>>
[Android] 开发第十天
查看>>