哈尔滨网站设计哪里有做,域名购买网站有哪些,刀具东莞网站建设,discuz数据库转wordpress#xff08;纯属为了记录自己学习的点滴过程#xff0c;引用资料都附在参考列表#xff09;
1 基本概念
什么是关键词#xff08;是什么#xff09; 大略的讲就是文章中重要的单词#xff0c;而不限于词语的新鲜程度。 什么样的单词是重要的单词#xff0c;恐怕这是个…纯属为了记录自己学习的点滴过程引用资料都附在参考列表
1 基本概念
什么是关键词是什么 大略的讲就是文章中重要的单词而不限于词语的新鲜程度。 什么样的单词是重要的单词恐怕这是个见仁见智的问题所以可以根据用户需求合理设计先验知识融进模型进行建模本文讨论的是最易于理解、最常见的几种度量“重要”的方式也可以理解为几种常见理解“关键词”的观点。
2 问题
提取一篇文章的关键词
3 解决思路
3.1 词频统计
先验知识一方面关键词通常在文章中反复出现为了解释关键词作者通常会反复提及它们另一方面反复出现的词语不一定是关键词根据齐夫定律一些词频高的往往是标点符号和助词’的‘等它们显然不是关键词。 算法根据先验知识算法模型如下 分词停用词过滤按词频提取前n个 缺点用词频来提取关键词有一个缺陷那就是高频词并不等价于关键词。比如在一个体育网站中所有文章都是奥运会报道导致“奥运会”词频最高用户希望通过关键词看到每篇文章的特色。此时TF-IDF 就派上用场了。
3.2 IF-IDF
先验知识如果某个词在一篇文档中出现的频率高并且在其它文档中很少出现则认为这个词有很好的类别区分能力。
TF-IDF的数学表达 TF−IDF(t,d)TF(t,d)DF(t)TF(t,d)×IDF(t)TF-IDF(t,d) \frac{TF(t, d)}{DF(t)} \\ TF(t, d) \times IDF(t) TF−IDF(t,d)DF(t)TF(t,d)TF(t,d)×IDF(t) 其中t 代表单词d 代表文档TF(t,d) 代表 t 在 d 中出现频次DF(t) 代表有多少篇文档包含 t。DF 的倒数称为IDF这也是 TF-IDF 得名的由来这个数学式子正式上面基本思想的刻画。
改进TF-IDF在大型语料库上的统计类似于一种学习过程假如我们没有这么大型的语料库或者存储IDF的内存同时又想改善词频统计的效果该怎么办呢此时可以使用TextRank算法。
3.3 TextRank
基本思想TextRank是大名鼎鼎的PageRank算法在文本上的应用。 Google用它来体现网页的相关性和重要性在搜索引擎优化操作中是经常被用来评估网页优化的成效因素之一。 即对于某个网页A而言该网页PageRank值的计算基于以下两个假设 数量假设如果越多的网页指向A即A的入链数量越多则该网页越重要质量假设如果指向A的网页质量越高则A越重要即权重因素不同。 (PageRank的数学细节参考李航《统计学习方法》) 将 PageRank 应用到关键词提取无非是将单词视作节点而已另外每个单词的外链来自自身前后固定大小的窗口内的所有单词。
4 实现
4.1 基于词频统计
这只是一个针对词频统计算法的演示性代码也易于改成批处理的代码;词频统计属于单文档算法就是根据一篇文章不借助其它文章就可以分析该文章的关键词
# -*- coding:utf-8 -*-from pyhanlp import *TermFrequency JClass(com.hankcs.hanlp.corpus.occurrence.TermFrequency)
TermFrequencyCounter JClass(com.hankcs.hanlp.mining.word.TermFrequencyCounter)if __name__ __main__:counter TermFrequencyCounter()counter.add(加油加油中国队) # 第一个文档counter.add(中国观众高呼加油中国) # 第二个文档for termFrequency in counter: # 遍历每个词与词频print(%s%d % (termFrequency.getTerm(), termFrequency.getFrequency()))print(counter.top(2)) # 取 top N# 根据词频提取关键词print(TermFrequencyCounter.getKeywordList(女排夺冠观众欢呼女排女排女排, 3))
运行结果
中国2
中国队1
加油3
观众1
高呼1
[加油3, 中国2]
[女排, 观众, 欢呼]4.2 基于TF-IDF
TF-IDF是基于多文档的统计量所以要输入多篇文档后才能开始计算统计TF-IDF同样涉及分词和停用词过滤
# -*- coding:utf-8 -*-from pyhanlp import *TfIdfCounter JClass(com.hankcs.hanlp.mining.word.TfIdfCounter)if __name__ __main__:counter TfIdfCounter()counter.add(《女排夺冠》, 女排北京奥运会夺冠) # 输入多篇文档counter.add(《羽毛球男单》, 北京奥运会的羽毛球男单决赛)counter.add(《女排》, 中国队女排夺北京奥运会金牌重返巅峰观众欢呼女排女排女排)counter.compute() # 输入完毕for id in counter.documents():print(id : counter.getKeywordsOf(id, 3).toString()) # 根据每篇文档的TF-IDF提取关键词# 根据语料库已有的IDF信息为语料库之外的新文档提取关键词print(counter.getKeywords(奥运会反兴奋剂, 2))
运行结果
女排》 : [女排5.150728289807123, 重返1.6931471805599454, 巅峰1.6931471805599454]
《女排夺冠》 : [夺冠1.6931471805599454, 女排1.2876820724517808, 奥运会1.0]
《羽毛球男单》 : [决赛1.6931471805599454, 羽毛球1.6931471805599454, 男单1.6931471805599454]
[反, 兴奋剂]4.3 基于TextRank
词频统计属于单文档算法;
from pyhanlp import * 关键词提取
content (
程序员(英文Programmer)是从事程序开发、维护的专业人员。
一般将程序员分为程序设计人员和程序编码人员
但两者的界限并不非常清楚特别是在中国。
软件从业人员分为初级程序员、高级程序员、系统
分析员和项目经理四大类。)TextRankKeyword JClass(com.hankcs.hanlp.summary.TextRankKeyword)
keyword_list HanLP.extractKeyword(content, 5)
print(keyword_list)
运行结果 [程序员, 程序, 分为, 人员, 软件]5 参考文献
https://www.jianshu.com/p/f6d66ab97332 《PageRank算法核心思想及数学支撑》何晗《自然语言处理入门》宗成庆《统计自然语言处理》李航《统计学习方法》
6 需要解决的问题
PageRank算法数学细节