1、TF-IDF算法介绍

TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

(1)TF是词频(Term Frequency)

词频(TF)表示词条(关键字)在文本中出现的频率。

这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。

公式:           即:

其中 ni,j 是该词在文件 dj 中出现的次数,分母则是文件 dj 中所有词汇出现的次数总和;

(2) IDF是逆向文件频率(Inverse Document Frequency)

逆向文件频率 (IDF) :某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。

如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。

公式:

其中,|D| 是语料库中的文件总数。 |{j:ti∈dj}| 表示包含词语 ti 的文件数目(即 ni,j≠0 的文件数目)。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1+|{j:ti∈dj}|

即:

(3)TF-IDF实际上是:TF * IDF

某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

公式:

golang 实现TF-IDF 算法

 1 package main
2
3 import (
4 "fmt"
5 "math"
6 "sort"
7 "time"
8 )
9
10 type wordTfIdf struct {
11 nworld string
12 value float64
13 }
14
15 func main() {
16 start := currentTimeMillis()
17 FeatureSelect(Load())
18
19
20 cost := currentTimeMillis() - start
21 fmt.Printf("耗时 %d ms ",cost)
22
23 }
24
25 type wordTfIdfs []wordTfIdf
26 type Interface interface {
27 Len() int
28 Less(i, j int) bool
29 Swap(i, j int)
30 }
31
32 func (us wordTfIdfs) Len() int {
33 return len(us)
34 }
35 func (us wordTfIdfs) Less(i, j int) bool {
36 return us[i].value > us[j].value
37 }
38 func (us wordTfIdfs) Swap(i, j int) {
39 us[i], us[j] = us[j], us[i]
40 }
41
42 func currentTimeMillis() int64 {
43 return time.Now().UnixNano() / 1000000
44 }
45 func FeatureSelect(list_words [][]string) {
46 docFrequency := make(map[string]float64, 0)
47 sumWorlds := 0;
48 for _, wordList := range list_words {
49 for _, v := range wordList {
50 docFrequency[v] += 1
51 sumWorlds++;
52 }
53 }
54 wordTf := make(map[string]float64)
55 for k, _ := range docFrequency {
56 wordTf[k] = docFrequency[k] / float64(sumWorlds)
57 }
58 docNum := float64(len(list_words))
59 wordIdf := make(map[string]float64)
60 wordDoc := make(map[string]float64, 0)
61 for k, _ := range docFrequency {
62 for _, v := range list_words {
63 for _, vs := range v {
64 if (k == vs) {
65 wordDoc[k] += 1
66 break
67 }
68 }
69 }
70 }
71 for k, _ := range docFrequency {
72 wordIdf[k] = math.Log(docNum / (wordDoc[k] + 1))
73 }
74 var wordifS wordTfIdfs
75 for k, _ := range docFrequency {
76 var wti wordTfIdf
77 wti.nworld = k
78 wti.value = wordTf[k] * wordIdf[k]
79 wordifS = append(wordifS, wti)
80 }
81 sort.Sort(wordifS)
82 fmt.Println(wordifS)
83 }
84
85 func Load() [][]string {
86 slice := [][]string{
87 {"my", "dog", "has", "flea", "problems", "help", "please"},
88 {"maybe", "not", "take", "him", "to", "dog", "park", "stupid"},
89 {"my", "dalmation", "is", "so", "cute", "I", "love", "him"},
90 {"stop", "posting", "stupid", "worthless", "garbage"},
91 {"mr", "licks", "ate", "my", "steak", "how", "to", "stop", "him"},
92 {"quit", "buying", "worthless", "dog", "food", "stupid"},
93 }
94 return slice
95 }

TF-IDF算法-golang实现的更多相关文章

  1. tf–idf算法解释及其python代码实现(下)

    tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...

  2. tf–idf算法解释及其python代码实现(上)

    tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...

  3. 55.TF/IDF算法

    主要知识点: TF/IDF算法介绍 查看es计算_source的过程及各词条的分数 查看一个document是如何被匹配到的         一.算法介绍 relevance score算法,简单来说 ...

  4. Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据

    相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...

  5. tf–idf算法解释及其python代码

    tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...

  6. 25.TF&IDF算法以及向量空间模型算法

    主要知识点: boolean model IF/IDF vector space model     一.boolean model     在es做各种搜索进行打分排序时,会先用boolean mo ...

  7. Elasticsearch学习之相关度评分TF&IDF

    relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度 Elasticsearch使用的是 term frequency/inverse doc ...

  8. 基于TF/IDF的聚类算法原理

        一.TF/IDF描述单个term与特定document的相关性TF(Term Frequency): 表示一个term与某个document的相关性. 公式为这个term在document中出 ...

  9. 信息检索中的TF/IDF概念与算法的解释

    https://blog.csdn.net/class_brick/article/details/79135909 概念 TF-IDF(term frequency–inverse document ...

随机推荐

  1. js 事件委托代理

    在优化网页性能的技巧当中,对DOM的优化是必不可少的.这其中就涉及到了javascript对DOM的频繁操作.比如响应用户操作的事件.一般情况下,如果是稍微初级一点的前端程序员,在拿到项目的时候,对待 ...

  2. OpenCV 线条及形状

    1.线条 # dst 相当于画板 dst=np.zeros((300,300,3),np.uint8) # #参1 图像 参2 起始点 参3 结束点 参4 颜色 line=cv2.line(dst,( ...

  3. Android Monkey的使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/71750907 本文出自[赵彦军的博客] 什么是 Monkey Monkey 是一个 ...

  4. 解决ci框架php发送邮件附件中文乱码问题

    CI框架发送邮件附件中文出现乱码,是因为php basename()函数不支持中文引起,修改类库 Email.php 文件中 _append_attachments()方法,大致在 1474行 添加如 ...

  5. MAYA逼真手枪制作视频教程 中文字幕

    下载地址 更多中文字幕教程请关注微镜映画网,有各类CG教程提供

  6. Azure 门户中基于角色的访问控制入门

    面向安全的公司应侧重于向员工提供他们所需的确切权限. 权限过多,可能会向攻击者公开帐户. 权限太少意味着员工无法有效地完成其工作. Azure 基于角色的访问控制 (RBAC) 可通过为 Azure ...

  7. git bash安装和基本设置

    Part1:安装步骤 1.下载地址: https://git-for-windows.github.io/ 2.下载完成后安装,安装路径自己选择,其他的选项参照下图: 其他的一步一步往下即可,最后Fi ...

  8. SQL 性能不佳的几个原因

    •不准确的统计数据•差劲的索引•差劲的查询设计 •差劲的执行计划,通常是由不正确的参数引起的•过度阻塞和死锁 •非基于集合的操作•不良数据库设计 •过度碎片 •不能重复使用执行计划 •查询频繁重编译 ...

  9. struct与class区别联系(转)

    传送门:struct与class区别联系 注意C中的struct和C++中的struct是不一样的,c中的struct比较原生,仅仅是将一些属性封装起来构成一个整体,没有OO的相关特性.而c++中的s ...

  10. ajax知识点及正则表达式总结

    一.JSON JSON是JavaScript  Object  Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数 ...