TF-IDF算法-golang实现
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实现的更多相关文章
- 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的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...
- 55.TF/IDF算法
主要知识点: TF/IDF算法介绍 查看es计算_source的过程及各词条的分数 查看一个document是如何被匹配到的 一.算法介绍 relevance score算法,简单来说 ...
- Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据
相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...
- tf–idf算法解释及其python代码
tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...
- 25.TF&IDF算法以及向量空间模型算法
主要知识点: boolean model IF/IDF vector space model 一.boolean model 在es做各种搜索进行打分排序时,会先用boolean mo ...
- Elasticsearch学习之相关度评分TF&IDF
relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度 Elasticsearch使用的是 term frequency/inverse doc ...
- 基于TF/IDF的聚类算法原理
一.TF/IDF描述单个term与特定document的相关性TF(Term Frequency): 表示一个term与某个document的相关性. 公式为这个term在document中出 ...
- 信息检索中的TF/IDF概念与算法的解释
https://blog.csdn.net/class_brick/article/details/79135909 概念 TF-IDF(term frequency–inverse document ...
随机推荐
- flex兼容性问题
flex在众多手机浏览器上的兼容方案(亲测华为手机自带浏览器) 如果项目使用构建工具,可加autoprefixer来处理,[autoprefixer使用指南] 纯手写css兼容代码,需给每个使用的属性 ...
- SSM框架下的redis缓存
基本SSM框架搭建:http://www.cnblogs.com/fuchuanzhipan1209/p/6274358.html 配置文件部分: 第一步:加入jar包 pom.xml <!-- ...
- 《Spring实战》-- 'cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element' 错误的解决办法
在Eclipse中新建了一个maven项目学习Spring,在 service.xml 中配置 Spring,想要学习'面向切面的Spring',service.xml 内容如下: <beans ...
- ActiveReports 报表应用教程 (12)---交互式报表之贯穿钻取
在葡萄城ActiveReports报表中提供强大的数据分析能力,您可以通过图表.表格.图片.列表.波形图等控件来实现数据的贯穿钻取,在一级报表中可以通过鼠标点击来钻取更为详细的数据. 本文展示的是20 ...
- Android逆向 APK文件组成
一 了解APK文件 我们知道Android系统能运行的程序是.apk文件格式,其实它就是一个压缩包而已,把.apk修改成.zip,然后解压就可以得到该apk内部的文件结构. PS: 既然可以把apk文 ...
- CSS揭秘(一)引言
借了一本CSS揭秘,国外的一本书,应该是目前相关书目里最好的了,内容非常扎实,不得不说图灵教育出的书真的不错,不然不是很厚的一本书卖到99也是.... 国外的这类书总是以问题开始,然后通过解决问题引出 ...
- Oracle EBS OPM complete batch
--complete_batch --created by jenrry SET serveroutput on DECLARE x_return_status VARCHAR2 (1); l_exc ...
- Python中可视化图表处理echarts库的安装
系统环境:Windows 7 企业版 进入cmd 输入:python –m pip install pyecharts
- laravel上传图片报错
在laravel的上传图片代码文件中路径如下: vendor\stevenyangecho\laravel-u-editor\src\Uploader\Upload.php第131行有一句代码错误$r ...
- 【Python】os.path.isfile()的使用方法汇总
方法一: # -*- coding:utf-8 -*- import os import sys from uiautomator import device as d filepath = r'E: ...