TextRank算法是什么
TextRank算法是由 Google 搜索的核心网页排序算法(PageRank算法) 改编的,通过词语的共现窗口构建共现网络计算词语的得分。把文本拆分成词语作为网络节点,组成词语网络图模型,将词语间的相似关系看成是一种推荐或投票关系,使其可以计算每一个词语的重要性(得分),以此来提取文本中的关键词。
(1) 对文本进行jieba分词、词性标注和去除停用词等数据预处理操作, 得到词语节点。
(2) 构建候选关键词图G=(V,E),其中V为节点集,由候选关键词组成,并采用**共现**关系构造任两点之间的边,两个节点之间仅当它们对应的词汇在长度为K的窗口中共现则存在边,K表示窗口大小即最多共现K个词汇;
(3) 计算各节点的权重,直至收敛;
(4) 对节点权重进行倒序排列,得到排名前TopN个词汇作为文本关键词。
PageRank算法
PageRank算法认为网页重要性由两部分组成:
① 如果一个网页被大量其他网页链接到说明这个网页比较重要,即被链接网页的数量;
② 如果一个网页被排名很高的网页链接说明这个网页比较重要,即被链接网页的权重。
一般情况下,一个网页的PageRank值(PR)计算公式如下所示
P
R
(
p
i
)
=
1
−
α
N
+
α
∑
p
i
ε
M
p
j
P
R
(
p
j
)
L
(
p
i
)
PR(p_i) =\frac{1-α}{N} + α \sum_{p_iεM_{p_j}}\frac{PR(p_j)}{L(p_i)}
PR(pi)=N1−α+αpiεMpj∑L(pi)PR(pj)
其中,PR(Pi)是第i个网页的重要性排名即PR值;ɑ是阻尼系数,一般设置为0.85;N是网页总数;Mpi 是所有对第i个网页有出链的网页集合;L(Pj)是第j 个网页的出链数目。
初始时,假设所有网页的排名都是1/N,根据上述公式计算出每个网页的PR值,在不断迭代趋于平稳的时候,停止迭代运算,得到最终结果。一般来讲,只要10次左右的迭代基本上就收敛了。
代码实现
(1)读取样本数据
(2)加载自定义停用词表stopWord.txt
(3)使用用jieba.analyse.textrank函数筛选出指定词性,以及topN个文本关键词,并将结果存入数据框中
(4)保存最终结果
def getKeywords_textrank(data,topK):
idList,textList= data['id'], data['text']
ids, texts, keys = [], [], []
for index in range(len(idList)):
text = abstractList[index]
jieba.analyse.set_stop_words("./stopWord.txt") # 加载自定义停用词表
keywords = jieba.analyse.textrank(text, topK=topK, allowPOS=('n','nz','v','vd','vn')) # TextRank关键词提取,词性筛选
word_split = " ".join(keywords)
keys.append(word_split.encode("utf-8"))
ids.append(idList[index])
texts.append(textList[index])
result = pd.DataFrame({"id": ids, "title": titles, "key": keys}, columns=['id', 'title', 'key'])
result .to_csv('./result .csv', index=False)
return result