精华内容
下载资源
问答
  • TFIDF实例及讲解

    千次阅读 2018-07-10 17:59:45
    其中右边的term count是一个词在一句话中的出现次数,其中example出现3次,不是在所有文档中出现3次,是在这句话中3次,term count就是统计后的,右图两句话实际应该是 this is a a sample this is another ...

    tfidf

    其中右边的term count是一个词在一句话中的出现次数,其中example出现3次,不是在所有文档中出现3次,是在这句话中3次,term count就是统计后的,右图两句话实际应该是
    this is a a sample
    this is another another example example example

    展开全文
  • tfidf python 中文 实例

    千次阅读 2019-07-25 10:19:37
    tfidf = transformer.fit_transform(X) # 第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵 word = vectorizer.get_feature_names() # 获取词袋模型中的所有词语 print(word) print(X...
    from sklearn.feature_extraction.text import TfidfTransformer
    from sklearn.feature_extraction.text import CountVectorizer
    
    if __name__ == "__main__":
        corpus = ["我 来到 北京 清华大学",  # 第一个文本切词后的结果,词之间以空格隔开
                  "他 来到 了 网易 杭研 大厦",  # 第二个文本的切词结果
                  "小明 硕士 毕业 与 中国 科学院",  # 第三个文本的切词结果
                  "我 爱 北京 天安门"]  # 第四个文本的切词结果
        def cut(sentence):
            return sentence.split(" ")
        vectorizer = CountVectorizer(analyzer="word", tokenizer=cut)  # 将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i个文本下的词频
        transformer = TfidfTransformer()  # 统计每个词语的tf-idf权值
        X = vectorizer.fit_transform(corpus)
        tfidf = transformer.fit_transform(X)  # 第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵
        word = vectorizer.get_feature_names()  # 获取词袋模型中的所有词语
        print(word)
        print(X.toarray())
        weight = tfidf.toarray()  # 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i个文本中的tf-idf权重
        for i in range(len(weight)):  # 打印每个文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一个文本下的词语权重
            print("-------这里输出第", i, u"个文本的词语tf-idf权重------")
            for j in range(len(word)):
                print(word[j], weight[i][j])
    

    [‘与’, ‘中国’, ‘了’, ‘他’, ‘北京’, ‘大厦’, ‘天安门’, ‘小明’, ‘我’, ‘来到’, ‘杭研’, ‘毕业’, ‘清华大学’, ‘爱’, ‘硕士’, ‘科学院’, ‘网易’]
    [[0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0]
    [0 0 1 1 0 1 0 0 0 1 1 0 0 0 0 0 1]
    [1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0]
    [0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 0 0]]
    -------这里输出第 0 个文本的词语tf-idf权重------
    与 0.0
    中国 0.0
    了 0.0
    他 0.0
    北京 0.4658085493691629
    大厦 0.0
    天安门 0.0
    小明 0.0
    我 0.4658085493691629
    来到 0.4658085493691629
    杭研 0.0
    毕业 0.0
    清华大学 0.5908190806023349
    爱 0.0
    硕士 0.0
    科学院 0.0
    网易 0.0
    -------这里输出第 1 个文本的词语tf-idf权重------
    与 0.0
    中国 0.0
    了 0.4217647821447532
    他 0.4217647821447532
    北京 0.0
    大厦 0.4217647821447532
    天安门 0.0
    小明 0.0
    我 0.0
    来到 0.3325241986862672
    杭研 0.4217647821447532
    毕业 0.0
    清华大学 0.0
    爱 0.0
    硕士 0.0
    科学院 0.0
    网易 0.4217647821447532
    -------这里输出第 2 个文本的词语tf-idf权重------
    与 0.408248290463863
    中国 0.408248290463863
    了 0.0
    他 0.0
    北京 0.0
    大厦 0.0
    天安门 0.0
    小明 0.408248290463863
    我 0.0
    来到 0.0
    杭研 0.0
    毕业 0.408248290463863
    清华大学 0.0
    爱 0.0
    硕士 0.408248290463863
    科学院 0.408248290463863
    网易 0.0
    -------这里输出第 3 个文本的词语tf-idf权重------
    与 0.0
    中国 0.0
    了 0.0
    他 0.0
    北京 0.43779123108611473
    大厦 0.0
    天安门 0.5552826649411127
    小明 0.0
    我 0.43779123108611473
    来到 0.0
    杭研 0.0
    毕业 0.0
    清华大学 0.0
    爱 0.5552826649411127
    硕士 0.0
    科学院 0.0
    网易 0.0

    展开全文
  • 详细的tfidf构建过程实例(转)

    千次阅读 2011-04-21 17:31:00
    TFIDF

    文本相似计算是进行文本聚类的基础,和传统结构化数值数据的聚类方法类似,文本聚类是通过计算文本之间"距离"来表示文本之间的相似度并产生聚类。文本相似度的常用计算方法有余弦定理和Jaccard系数。但是文本数据与普通的数值数据或类属数据不同,文本数据是一种半结构化数据,在进行文本挖掘之前必须要对文本数据源进行处理,如分词、向量化表示等,其目的就是使用量化的数值来表达这些半结构化的文本数据。使其适用于分析计算。

    进行文本数据挖掘或信息检索的时候,会对文本进行分词处理,经过分词处理以后,一个文本的表示就变为由若干关键词(Token)来表示的多维向量。可表示为: d(t1,t2,…,tn),d表示被处理的文档,tn表示在d中出现过至少一次的关键词。在文本挖掘过程中会处理大量的文档,记为d1,d2,…,dm。经分词后,这些文档的向量表示就变为:dm(t1,t2,…,tn),m表示文档个数、n表示某个文档中关键词的个数。下面的例子中有两个包含若干关键词的文档,在本文的后面会一直使用这个例子所提供的数据。

    d1 (A, B, C, C, S, D, A, B, T, S, S, S, T, W, W)

    d2(C, S, S, T, W, W, A, B, S, B)

    在了解了文档的向量表示以后再来看看TFIDF加权统计方法(在一些简单的处理方法中,可以只通过词频来计算文本间的相似度,不过当某个关键词在两篇长度相差很大的文本中出现的频率相近时会降低结果的准确性)。TFIDF是一种加权技术,它通过统计的方法来计算和表达某个关键词在文本中的重要程度。TFIDF是由两部分组成,一部分是TF(Token Frequency),表示一个词在文档中出现的次数,即词频。另一部分是IDF(Inverse Document Frequency),表示某个词出现在多少个文本中(或者解释为有多少个文本包含了这个词),即逆向文档频率,通常由公式IDFt=log((1+|D|)/|Dt|),其中|D|表示文档总数,|Dt|表示包含关键词t的文档数量。TFIDF的值就是由这两部分相乘得到的,还要指出的是TFIDF不是指某一个特定的公式,而是表示了一系列基于基本TFIDF方法变形(分别对TF和IDF这两部分进行处理)的公式的集合,而TFIDFtd=tftd*ln(idft)(t关键词在文本d中的词频乘以t的逆向文档频率的自然对数)是被多数系统证明是最有效的一个公式。现在来看看上面那个例子中给出的数据,由例子给出的数据可得到词频矩阵如下:

     

    d1

    d2

    A

    2

    1

    B

    2

    2

    C

    2

    1

    D

    1

    0

    S

    4

    3

    T

    2

    1

    W

    2

    2

     

        通常需要把词频数据正规化,以防止词频数据偏向于关键词较多即较长的文本。如某一个词在文档d1中出现了100次,在d2中出现了100次,仅从词频看来这个词在这两个文档中的重要性相同,然而再考虑另一个因素,就是d1的关键词总数是1000,而d2的关键词总数是100000,所以从总体上看,这个词在d1和d2中的重要性是不同的。因此就需要对词频做正规化处理。正规化处理的方法是用词频除以所有文档的关键词总数,将上面的词频矩阵进行正规化处理后,结果如下表:

     

     

    d1

    d2

    A

    0.08

    0.04

    B

    0.08

    0.08

    C

    0.08

    0.04

    D

    0.04

    0.00

    S

    0.16

    0.12

    T

    0.08

    0.04

    W

    0.08

    0.08

    文档中关键词总数=25

     

        然后再计算每个关键词对应的逆向文档频率即IDF的值。如下表所示:

     

    ln

    A

    0.4

    B

    0.4

    C

    0.4

    D

    1.1

    S

    0.4

    T

    0.4

    W

    0.4

     

        最后将正规化后的词频与IDF值相乘,结果如下:

     

     


     

    d1

    d2

    A

    0.032

    0.016

    B

    0.032

    0.032

    C

    0.032

    0.016

    D

    0.044

    0.000

    S

    0.064

    0.048

    T

    0.032

    0.016

    W

    0.032

    0.032

     

    在得到TFIDF权值以后就可以利用这些数据利用余弦定理Jaccard系数来计算文本之间的相似度以实现文本聚类等标准的文本挖掘算法了

    展开全文
  • 最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理。 关于TFIDF算法的介绍可以参考这篇博客http://www.ruanyifeng.com/blog/2013/03/tf-idf.html。 计算公式比较简单,如下: 预处理 由于...


    算法介绍

    最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理。

    关于TFIDF算法的介绍可以参考这篇博客http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

    计算公式比较简单,如下:

    9770967555d135a232911c78e1aba3be8148e7a3

    预处理

    由于需要处理的候选词大约后3w+,并且语料文档数有1w+,直接挨个文本遍历的话很耗时,每个词处理时间都要一分钟以上。

    为了缩短时间,首先进行分词,一个词输出为一行方便统计,分词工具选择的是HanLp

    然后,将一个领域的文档合并到一个文件中,并用“$$$”标识符分割,方便记录文档数。

    af8278f2be0a8ba2d042515c80f2183f887009a8

    下面是选择的领域语料(PATH目录下):

    4e55027808c0827276f709222ef204896d3e9e9f

    代码实现

    package edu.heu.lawsoutput;

    import java.io.BufferedReader;

    import java.io.BufferedWriter;

    import java.io.File;

    import java.io.FileReader;

    import java.io.FileWriter;

    import java.util.HashMap;

    import java.util.Map;

    import java.util.Set;

     

    /**

     * @ClassName: TfIdf

     * @Description: TODO

     * @author LJH

     * @date 20171112日 下午3:55:15

     */

     

    public class TfIdf {

     

        static final String PATH = "E:\\corpus"; // 语料库路径

     

        public static void main(String[] args) throws Exception {

     

            String test = "离退休人员"; // 要计算的候选词

     

            computeTFIDF(PATH, test);

     

        }

     

        /**

        * @param @param path 语料路经

        * @param @param word 候选词

        * @param @throws Exception

        * @return void

        */

        static void computeTFIDF(String path, String word) throws Exception {

     

            File fileDir = new File(path);

            File[] files = fileDir.listFiles();

     

            // 每个领域出现候选词的文档数

            Map<String, Integer> containsKeyMap = new HashMap<>();

            // 每个领域的总文档数

            Map<String, Integer> totalDocMap = new HashMap<>();

            // TF = 候选词出现次数/总词数

            Map<String, Double> tfMap = new HashMap<>();

     

            // scan files

            for (File f : files) {

     

                // 候选词词频

                double termFrequency = 0;

                // 文本总词数

                double totalTerm = 0;

                // 包含候选词的文档数

                int containsKeyDoc = 0;

                // 词频文档计数

                int totalCount = 0;

                int fileCount = 0;

                // 标记文件中是否出现候选词

                boolean flag = false;

     

                FileReader fr = new FileReader(f);

                BufferedReader br = new BufferedReader(fr);

                String s = "";

     

                // 计算词频和总词数

                while ((s = br.readLine()) != null) {

                    if (s.equals(word)) {

                        termFrequency++;

                        flag = true;

                    }

     

                    // 文件标识符

                    if (s.equals("$$$")) {

                        if (flag) {

                            containsKeyDoc++;

                        }

                        fileCount++;

                        flag = false;

                    }

                    totalCount++;

                }

     

                // 减去文件标识符的数量得到总词数

                totalTerm += totalCount - fileCount;

                br.close();

                // key都为领域的名字

                containsKeyMap.put(f.getName(), containsKeyDoc);

                totalDocMap.put(f.getName(), fileCount);

                tfMap.put(f.getName(), (double) termFrequency / totalTerm);

     

                System.out.println("----------" + f.getName() + "----------");

                System.out.println("该领域文档数:" + fileCount);

                System.out.println("候选词出现词数:" + termFrequency);

                System.out.println("总词数:" + totalTerm);

                System.out.println("出现候选词文档总数:" + containsKeyDoc);

                System.out.println();

            }

            

            //计算TF*IDF

            for (File f : files) {

     

                // 其他领域包含候选词文档数

                int otherContainsKeyDoc = 0;

                // 其他领域文档总数

                int otherTotalDoc = 0;

     

                double idf = 0;

                double tfidf = 0;

                System.out.println("~~~~~" + f.getName() + "~~~~~");

     

                Set<Map.Entry<String, Integer>> containsKeyset = containsKeyMap.entrySet();

                Set<Map.Entry<String, Integer>> totalDocset = totalDocMap.entrySet();

                Set<Map.Entry<String, Double>> tfSet = tfMap.entrySet();

     

                // 计算其他领域包含候选词文档数

                for (Map.Entry<String, Integer> entry : containsKeyset) {

                    if (!entry.getKey().equals(f.getName())) {

                        otherContainsKeyDoc += entry.getValue();

                    }

                }

     

                // 计算其他领域文档总数

                for (Map.Entry<String, Integer> entry : totalDocset) {

                    if (!entry.getKey().equals(f.getName())) {

                        otherTotalDoc += entry.getValue();

                    }

                }

     

                // 计算idf

                idf = log((float) otherTotalDoc / (otherContainsKeyDoc + 1), 2);

     

                // 计算tf*idf并输出

                for (Map.Entry<String, Double> entry : tfSet) {

                    if (entry.getKey().equals(f.getName())) {

                        tfidf = (double) entry.getValue() * idf;

                        System.out.println("tfidf:" + tfidf);

                    }

                }

            }

        }

     

        static float log(float value, float base) {

            return (float) (Math.log(value) / Math.log(base));

        }

    }

     

    运行结果

    测试词为离退休人员,中间结果如下:

    501705bbea89b5e1b5abf299b10625f496616572

    最终结果:

    7048de9fe37e3c132e72d9550c87c2cf70a0037c

    结论

    可以看到离退休人员在养老保险和社保领域,tfidf值比较高,可以作为判断是否为领域概念的一个依据。当然TF-IDF算法虽然很经典,但还是有许多不足,不能单独依赖其结果做出判断。很多论文提出了改进方法,本文只是实现了最基本的算法。如果有其他思路和想法欢迎讨论。

     

    文章转载自  没课割绿地 的博客

     

    展开全文
  • tfidf = np.dot(docs_matrix,idf)#tf*idf tfidf就是一个词袋了 以上是直接计算的方法,为了说明详细,所以写的注释有点多,为了大家看得更清晰一些,我把代码重新复制一次。 import jieba import os ...
  • 文本tfidf

    2018-12-22 21:25:00
    代码实例: # tf idf from sklearn.feature_extraction.text import TfidfVectorizer import jieba def cutword(): con1 = jieba.cut("在百事进入中国市场之后,将外包装进行了修改,变为了代表性的蓝...
  • 1.这个是spark官网的实例代码: import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer} val sentenceData = spark.createDataFrame(Seq( (0.0, "Hi I heard about Spark"), (0.0, "I wish Java could ...
  • 1.def cut_words(text): return " ".join(list(jieba.cut(text))) 使用jieba分词时要将...2实例化时TidifVectorizer后面一定要加括号 transfer=TfidfVectorizer() 3传入data时放进一个[“大苏打打发发”]列表里,...
  • 关键词提取 ... import jieba.analyse jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件...
  • TfidfVectorizer对象实例化的时候 fit时候的数据出现问题 可以看到test(数据)是list套list,而所需要的数据是可迭代对象里面为str 改成[‘是要 申报… 谢谢你’,‘xx xx xx’,’’…]这种形式 把里面的[]...
  • VSTO 两个实例

    2014-04-29 11:09:11
    两个VSTO开发实例 Task1——行求和,然后画出曲线图 随机生成100行100列个数,每个数位为0~9的整数,然后求每行的和,最后调用Chart,画出线状图。 Task2——求TFIDF值。 对于一个workbook有10个sheet,每个sheet...
  • 主要介绍了TF-IDF理解及其Java实现代码实例,简单介绍了tfidf算法及其相应公式,然后分享了Java实现代码,具有一定参考价值,需要的朋友可以了解下。
  • 文本相似度分析实例

    千次阅读 2018-10-26 22:38:15
    1.读取文档 2.对计算的文档进行分词 3.对文档进行整理成指定格式,方便后续进行计算 4.计算出词语的频率 ...10.将新语料库通过tfidfmodel进行处理,得到tfidf 11.通过token2得到特征数 12.计算稀疏矩阵相似度,...
  • 说明: * 其中基准数据,可以来自外部,处理过程为: - 处理为词袋 - 经过数据集的tfidf结果 * 无法处理中文 - 分词器不支持 * 未另外加载语料库 #!/usr/bin/env python #-*-coding=utf-8-*- ...
  • jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件 代码示例 (关键词提取) https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py 关键词提取所使用逆向文件频率(IDF...
  • 系列文章总目录:Python数据分析及可视化实例目录1.项目背景:接上一期:Python数据分析之文本处理词频向量转换前奏词袋word2bowPS趁热打铁2.分析步骤:(1)读取词典和文档;(2)计算tf idf 和 lsi;(3)生成...
  • 测试mahout in action 中kmean实例的时候,输入命令: bin/mahout kmeans -i reuters-vectors/tfidf-vectors/ \ -c reuters-initial-clusters \ -o reuters-kmeans-cl...
  • 四 36.特征工程-字典特征抽取 ...38.特征工程-TFIDF特征抽取 39.特征工程-归一化 40.特征工程-标准化 41.特征工程-缺失值处理 42.特征工程-特征选择 43.特征工程-PCA原理分析 44.特征工程-PCA实例 ...
  • 文本分类/聚类

    千次阅读 2016-07-02 23:16:25
    基本文本聚类方法 python进行中文文本聚类实例TFIDF计算、词袋构建)bag of words基于libsvm的中文文本分类原型文本分类 特征选取之CHI开方检验文本分类与聚类(text categorization and clustering)NLP系列(2)_用...
  • 什么是 TF-IDF 算法?

    2020-07-25 22:46:27
    变种2:标准化解决长文档、短文档问题**变种3:对数函数处理 IDF实例1笔算实例2 笔算+机算优点缺点代码python简易实现待更新 Sklearn的tfidf....TF-IDF 的历史 什么是 TF-IDF 算法? 简单来说,向量空间模型就是希望...
  • TF-IDF和TruncatedSVD

    2018-12-16 11:33:35
    一、使用TF-IDF对文本进行预处理,将文本化为向量的表示形式  1、TfidfVectorizer可以把原始文本转化为tf-idf的特征矩阵... tfidf_model = TfidfVectorizer().fit(document) #字典中词语对应的编号  print(tfid...
  • 贪心科技机器学习训练营(八)

    千次阅读 2019-07-13 19:08:07
    先把来源写上 ...这次是贝叶斯 ...贝叶斯算法对文本进行分类实例 SVM实现人脸识别 深入理解SVM svm的三个核函数 SVM支持向量机(上) SVM支持向量机(下) 回忆下了tfidf 垃圾邮件分类 之前做过文本分类...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

tfidf实例