TF-IDF 提取关键词
<?php class Document
{
protected $words;
protected $tf_matrix;
protected $tfidf_matrix;
public function __construct($string)
{
$this->tfidf_matrix = null;
if (isset($string))
{
$string = strtolower($string);
$this->words = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', $string, -1, PREG_SPLIT_NO_EMPTY);
$this->build_tf();
}
else
{
$this->words = null;
$this->tf_matrix = null;
}
}
public function build_tf()
{
if (isset($this->tf_matrix) && $this->tf_matrix)
return ;
$this->tfidf_matrix = null;
$words_count = count($this->words);
$words_occ = array_count_values($this->words);
foreach ($words_occ as $word => $amount)
$this->tf_matrix[$word] = $amount / $words_count;
arsort($this->tf_matrix);
}
public function build_tfidf($idf)
{
if (isset($this->tfidf_matrix) && $this->tfidf_matrix)
return true;
if (!isset($this->tf_matrix) || !$this->tf_matrix)
return false;
if (!isset($idf) || !$idf)
return false; if(is_array($idf)){
foreach ($this->tf_matrix as $word => $word_tf){
$this->tfidf_matrix[$word] = $word_tf * $idf[$word];
} }else{
foreach ($this->tf_matrix as $word => $word_tf){
$this->tfidf_matrix[$word] = $word_tf * $idf;
}
}
arsort($this->tfidf_matrix);
return true;
}
public function getWords()
{
return ($this->words);
}
public function getTf()
{
return ($this->tf_matrix);
}
public function getTfidf()
{
return ($this->tfidf_matrix);
}
} /*
第一步,计算词频。
考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。 第二步,计算逆文档频率。
这时,需要一个语料库(corpus),用来模拟语言的使用环境。
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。 第三步,计算TF-IDF。
可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。
*/
$text = 'i very good, ha , i very nice, i is good'; $obj = new Document($text);
$obj->build_tf(); //词频率TF,一般是词出现次数/总词数 $idf = log(3 / 2); //逆文档频率,总文档数/包含该词的文档数
$obj->build_tfidf($idf); //越高则频率高
var_dump($obj->getWords(), 88, $obj->getTf(), 99, $obj->getTfidf());
http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
TF-IDF 提取关键词的更多相关文章
- TF-IDF与余弦类似性的应用(一):自己主动提取关键词
作者: 阮一峰 日期: 2013年3月15日 原文链接:http://www.ruanyifeng.com/blog/2013/03/tf-idf.html 这个标题看上去好像非常复杂,事实上我要谈的 ...
- TF/IDF(term frequency/inverse document frequency)
TF/IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明. 一. TF/IDF描述单个term与特定document的相 ...
- 基于TF/IDF的聚类算法原理
一.TF/IDF描述单个term与特定document的相关性TF(Term Frequency): 表示一个term与某个document的相关性. 公式为这个term在document中出 ...
- TF/IDF计算方法
FROM:http://blog.csdn.net/pennyliang/article/details/1231028 我们已经谈过了如何自动下载网页.如何建立索引.如何衡量网页的质量(Page R ...
- 信息检索中的TF/IDF概念与算法的解释
https://blog.csdn.net/class_brick/article/details/79135909 概念 TF-IDF(term frequency–inverse document ...
- 使用solr的函数查询,并获取tf*idf值
1. 使用函数df(field,keyword) 和idf(field,keyword). http://118.85.207.11:11100/solr/mobile/select?q={!func ...
- TextRank算法提取关键词的Java实现
转载:码农场 » TextRank算法提取关键词的Java实现 谈起自动摘要算法,常见的并且最易实现的当属TF-IDF,但是感觉TF-IDF效果一般,不如TextRank好. TextRank是在 G ...
- tf–idf算法解释及其python代码实现(下)
tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...
- tf–idf算法解释及其python代码实现(上)
tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...
- 文本分类学习(三) 特征权重(TF/IDF)和特征提取
上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的 ...
随机推荐
- java实现每个单词首字母大写
/** * 每个单词第一个字母大写 * @param str * @return */ public static String toUpperFirstCode(String str) { Stri ...
- LeetCode-7-反转数组-c#
目前看到的网上的版本 都是用到数组的反转函数.对于代码实现的细节没给出 反转函数的想法没给出. 特在此补充. Reverse函数是从c#库源码中抠出的主要部分代码.主要是双端步进.交换,当然是o(1) ...
- .Net Core:Middleware中间件管道
.NetCore中的Middleware是装配到管道处理请求和响应的组件:每个组件都可以决定是否继续进入下一个管道.并且可以在进入下一个管道前后执行逻辑: 最后一个管道或者中断管道的中间件叫终端中间件 ...
- 自己写的一些公共js方法
/* 说明文件:这里用的都是es6的语法 导入导出,拿vue举个栗子,你只需要在用到的地方,按需要导入就行了,然后在mounted中直接可以拿来用 比如下面的手机****方法,在需要用到的地方impo ...
- python绘制中文词云图
准备工作 主要用到Python的两个第三方库 jieba:中文分词工具 wordcloud:python下的词云生成工具 步骤 准备语料库,词云图需要的背景图片 使用jieba进行分词,去停用词,词频 ...
- 使用dbms_profiler收集存储过程每步执行时间
最近和优化团队的专家学到一个很有意义的内置包:dbms_profiler,专门用于分析Oracle存储过程中的各段代码的时间开销情况,从而快速找到性能瓶颈的步骤. 1.sys创建dbms_profil ...
- html5 css多列布局
p{ text-indent: 2em; line-height: 2em;}h4{ -webkit-column-span:all; background: green; ...
- IT题库8-死锁
一.死锁原理 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等 ...
- c++常用
常用函数,方便查找,不定时更新. 1. 生成随机数 #include <iostream> #include <stdlib.h> #include <time.h> ...
- java中的函数
1.函数:定义在类中的具有特定功能的一段独立小程序.函数也称之为方法. 为了提高代码的复用性,对代码进行抽取. 将这个部分定义成一个独立的功能.方便使用. java中对功能的定义通过函数来实现的.2函 ...