er本次实验主要了解两种不同的关键词提取方式:TF-idf和TextRank。
一、TF-IDF
全称是 Term Frequency - inverse document frequency。
第一部分,就是词频(Term Frequency),即某个词语出现的频率。某个词语出现的次数多,也就说明这个词语重要性可能会很高。但是,这只是可能性,并不绝对。 逆文档频率(inverse document frequency)首先计算某个词在各文档中出现的频率。假设一共有10篇文档,其中某个词A在其中10篇文章中都出先过,另一个词B只在其中3篇文中出现。 逆文档频率就是把这种文档频率取倒数。这样第一部分和第二部分都是越高越好。二者都高,就很有可能是关键词了。
可以看出TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语料库中出现次数成反比。一个词的TF-IDF值非常高,说明这个词比较少见,但是它在这篇文章中多次出现,那么这个词就很可能是我们需要的关键词。
实验代码:
from jieba.analyse import *
with open('sample.txt',encoding='utf-8',errors='ignore')as f:
data=f.read();
for keyword,weight in extract_tags(data,withWeight=True):
print('%s%s'%(keyword,weight))
如果需要修改关键词数量,就需要指定topK参数。例如输出10个关键词,可以这样执行
import jieba
jieba.add_word('开放政府数据')
from jieba.analyse import *
with open('sample.txt',encoding='utf-8')as f:
data=f.read()
for keyword,weight in extract_tags(data,topK=10,withWeight=True):
print('%s %s'%(keyword,weight))
二、TextRank
TextRank首先会提取词汇,形成节点; 然后依据词汇的关联,建立链接。 依照连接节点的多少,给每个节点赋予一个初始的权重数值。 然后就开始迭代。根据某个词所连接所有词汇的权重,重新计算该词汇的权重,然后把重新计算的权重传递下去。 直到这种变化达到均衡态,权重数值不再发生改变。 这与Google的网页排名算法PageRank,在思想上是一致的。 根据最后的权重值,取其中排列靠前的词汇,作为关键词提取结果。
实验代码如下:
from jieba.analyse import *
with open('sample.txt',encoding='utf-8')as f:
data=f.read()
for keyword,weight in textrank(data,withWeight=True):
print('%s %s'%(keyword,weight))
两种方式结果对比:
sample.txt:
链接:https://pan.baidu.com/s/1KfEFVP5K4Rt7rqy29qpkPQ
提取码:qbwf