前言
前面一篇文章我们了解到了如何基于余弦相似度的计算方式去评估两个句子或者文章的相似程度。那么本篇我们就从一篇文章中提取当中的关键词,来获取一篇文章所要表达的意思。即TF-IDF
TF(词频)
一个词在文档(文章)中出现的次数
- 假设一个词很重要应该会在文档(文章)中多次出现
- 过滤掉停用词(的、是、在等),停用词必须过滤,对结果毫无帮助
- 假设一个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反应出这篇文章的特性,也就是我们需要的关键字
或者
IDF(反文档频率)
在词频的基础上赋予每一个词的权重,进一步体现该词的重要性(计算权重)
- 最常见的词(“的”,“是”,“在”等)给与最小权重,或者过滤
- 较常见的词(“国内”,“中国“等)给与较小权重
- 较少见的词(“养殖”,“维基”等)给与较大权重
TF-IDF公式
某个词对文中重要性越高,该值就越大,于是排在前面的几个词就是这篇文章的关键词
TF-IDF整体代码实现(获取一篇文章中的关键字)
代码思路:
- 根据文件获取停用词
- 循环目录读取对应的文件
- 计算每个文件当中所有词的词频
- 计算所有文件所有词的idf(反文档频率)
- 计算一篇文章中的tf-idf
1 | # coding=utf-8 |
1 | 1597auto.seg.cln.txt 这篇文章中的关键词如下 top 8 |
总结
- 优点:简单快速,结果比较符合实际情况
- 缺点:单纯以“词频”做衡量标准,不够全面,有时候重要的词可能出现的次数并不多。这种算法无法体现词的位置信息,出现位置靠前的词与靠后的词都被视为相同的重要性,这是不正确的。(一种解决办法是,将文章中的第一段和每一段的第一句话给与较大的权重)
代码:https://github.com/lishijia/py-data-demo/tree/master/nlp
NLP自然语言 之 余弦相似度 (一 Python代码实现)