TF-IDF词项权重计算

简介: 一、TF-IDF词项频率: df:term frequency。 term在文档中出现的频率.tf越大,词项越重要. 文档频率: tf:document frequecy。

一、TF-IDF

词项频率:

df:term frequency。 term在文档中出现的频率.tf越大,词项越重要.

文档频率:

tf:document frequecy。有多少文档包含此term,df越大词项越不重要.

词项权重计算公式:

tf-idf=tf(t,d)*log(N/df(t))
  • W(t,d):the weight of the term in document d
  • tf(t,d):the frequency of term t in document d
  • N:the number of documents
  • df(t):the number of documents that contain term t

二、JAVA实现

package com.javacore.algorithm;

import java.util.Arrays;
import java.util.List;

/**
 * Created by bee on 17/3/13.
 * @version 1.0
 * @author blog.csdn.net/napoay
 */
public class TfIdfCal {



    /**
     *calculate the word frequency
     * @param doc word vector of a doc
     * @param term  a word
     * @return the word frequency of a doc
     */
    public double tf(List<String> doc, String term) {

        double termFrequency = 0;
        for (String str : doc) {
            if (str.equalsIgnoreCase(term)) {
                termFrequency++;
            }
        }
        return termFrequency / doc.size();
    }


    /**
     *calculate the document frequency
     * @param docs the set of all docs
     * @param term a word
     * @return the number of docs which contain the word
     */

    public int df(List<List<String>> docs, String term) {
        int n = 0;
        if (term != null && term != "") {

            for (List<String> doc : docs) {
                for (String word : doc) {
                    if (term.equalsIgnoreCase(word)) {
                        n++;
                        break;
                    }
                }
            }
        } else {
            System.out.println("term不能为null或者空串");
        }

        return n;
    }


    /**
     *calculate the inverse document frequency
     * @param docs  the set of all docs
     * @param term  a word
     * @return  idf
     */

    public double idf(List<List<String>> docs, String term) {

        System.out.println("N:"+docs.size());
        System.out.println("DF:"+df(docs,term));
        return  Math.log(docs.size()/(double)df(docs,term));
    }


    /**
     * calculate tf-idf
     * @param doc a doc
     * @param docs document set
     * @param term a word
     * @return inverse document frequency
     */
    public double tfIdf(List<String> doc, List<List<String>> docs, String term) {

        return tf(doc, term) * idf(docs, term);
    }


    public static void main(String[] args) {

        List<String> doc1 = Arrays.asList("人工", "智能", "成为", "互联网", "大会", "焦点");
        List<String> doc2 = Arrays.asList("谷歌", "推出", "开源", "人工", "智能", "系统", "工具");
        List<String> doc3 = Arrays.asList("互联网", "的", "未来", "在", "人工", "智能");
        List<String> doc4 = Arrays.asList("谷歌", "开源", "机器", "学习", "工具");
        List<List<String>> documents = Arrays.asList(doc1, doc2, doc3,doc4);


        TfIdfCal calculator = new TfIdfCal();

        System.out.println(calculator.tf(doc2, "开源"));
        System.out.println(calculator.df(documents, "开源"));
        double tfidf = calculator.tfIdf(doc2, documents, "谷歌");
        System.out.println("TF-IDF (谷歌) = " + tfidf);
        System.out.println(Math.log(4/2)*1.0/7);

    }


}

运行结果:

0.14285714285714285
2
N:4
DF:2
TF-IDF (谷歌) = 0.09902102579427789
目录
相关文章
|
7月前
|
算法
TF-IDF算法是什么呢?
TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用于信息检索和文本挖掘的统计方法,用于评估一个词在文档集或一个语料库中的重要程度。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
|
4月前
|
API 算法框架/工具
【Tensorflow+keras】使用keras API保存模型权重、plot画loss损失函数、保存训练loss值
使用keras API保存模型权重、plot画loss损失函数、保存训练loss值
37 0
|
5月前
|
自然语言处理 算法 搜索推荐
|
7月前
TF-IDF 怎样将用单词权重的向量表示一个文档
TF-IDF 怎样将用单词权重的向量表示一个文档
78 1
|
算法 Windows
【文本分类】基于类信息的TF-IDF权重分析与改进
【文本分类】基于类信息的TF-IDF权重分析与改进
390 0
【文本分类】基于类信息的TF-IDF权重分析与改进
TF-IDF及相似度计算
TF-IDF:衡量某个词对文章的重要性由TF和IDF组成 TF:词频(因素:某词在同一文章中出现次数) IDF:反文档频率(因素:某词是否在不同文章中出现) TF-IDF = TF*IDF TF :一个单词在一篇文章出现次数越多越重要 IDF: 每篇文章都出现的单词(如的,你,我,他) ,越不重要
427 0
TF-IDF及相似度计算
|
TensorFlow 算法框架/工具
寻找最小误差(loss) tensorflow
寻找最小误差(loss) tensorflow
104 0
|
搜索推荐 索引
空间向量模型和tf-idf
空间向量模型和tf-idf
370 0
空间向量模型和tf-idf
|
机器学习/深度学习 TensorFlow 算法框架/工具
TensorFlow2实现条件批归一化(Conditional Batch Normalization)
在生成对抗网络中使用 BN 会导致生成图片在一定程度上出现同质化的缺点。利用条件批归一化可以解决此问题,本文讲解了条件批归一化,并使用TensorFlow2进行实现。
1401 0
TensorFlow2实现条件批归一化(Conditional Batch Normalization)
|
机器学习/深度学习 算法 TensorFlow
TF之NN:基于Tensorflow利用神经网络算法对数据集(用一次函数随机生成100个数)训练预测斜率、截距(逼近已知一次函数)
TF之NN:基于Tensorflow利用神经网络算法对数据集(用一次函数随机生成100个数)训练预测斜率、截距(逼近已知一次函数)
TF之NN:基于Tensorflow利用神经网络算法对数据集(用一次函数随机生成100个数)训练预测斜率、截距(逼近已知一次函数)