TF-idf模型:TF表示的是词频:即这个词在一篇文档中出现的频率

idf表示的是逆文档频率, 即log(文档的个数/1+出现该词的文档个数)  可以看出出现该词的文档个数越小,表示这个词越稀有,在这篇文档中也是越重要的

TF-idf: 表示TF*idf, 即词频*逆文档频率

词袋模型不仅考虑了一个词的词频,同时考虑了这个词在整个语料库中的重要性

代码:

第一步:使用DataFrame格式处理数据,同时数组化数据

第二步:定义函数,进行分词和停用词的去除,并使用‘ ’连接去除停用词后的列表

第三步:使用np.vectorizer向量化函数,同时调用函数进行分词和停用词的去除

第四步:使用TfidfVectorizer函数,构造TF-idf的词袋模型

  1. import pandas as pd
  2. import numpy as np
  3. import re
  4. import nltk #pip install nltk
  5.  
  6. corpus = ['The sky is blue and beautiful.',
  7. 'Love this blue and beautiful sky!',
  8. 'The quick brown fox jumps over the lazy dog.',
  9. 'The brown fox is quick and the blue dog is lazy!',
  10. 'The sky is very blue and the sky is very beautiful today',
  11. 'The dog is lazy but the brown fox is quick!'
  12. ]
  13.  
  14. labels = ['weather', 'weather', 'animals', 'animals', 'weather', 'animals']
  15.  
  16. # 第一步:构建DataFrame格式数据
  17. corpus = np.array(corpus)
  18. corpus_df = pd.DataFrame({'Document': corpus, 'categoray': labels})
  19.  
  20. # 第二步:构建函数进行分词和停用词的去除
  21. # 载入英文的停用词表
  22. stopwords = nltk.corpus.stopwords.words('english')
  23. # 建立词分割模型
  24. cut_model = nltk.WordPunctTokenizer()
  25. # 定义分词和停用词去除的函数
  26. def Normalize_corpus(doc):
  27. # 去除字符串中结尾的标点符号
  28. doc = re.sub(r'[^a-zA-Z0-9\s]', '', string=doc)
  29. # 是字符串变小写格式
  30. doc = doc.lower()
  31. # 去除字符串两边的空格
  32. doc = doc.strip()
  33. # 进行分词操作
  34. tokens = cut_model.tokenize(doc)
  35. # 使用停止用词表去除停用词
  36. doc = [token for token in tokens if token not in stopwords]
  37. # 将去除停用词后的字符串使用' '连接,为了接下来的词袋模型做准备
  38. doc = ' '.join(doc)
  39.  
  40. return doc
  41.  
  42. # 第三步:向量化函数和调用函数
  43. # 向量化函数,当输入一个列表时,列表里的数将被一个一个输入,最后返回也是一个个列表的输出
  44. Normalize_corpus = np.vectorize(Normalize_corpus)
  45. # 调用函数进行分词和去除停用词
  46. corpus_norm = Normalize_corpus(corpus)
  47.  
  48. # 第四步:使用TfidVectorizer进行TF-idf词袋模型的构建
  49. from sklearn.feature_extraction.text import TfidfVectorizer
  50.  
  51. Tf = TfidfVectorizer(use_idf=True)
  52. Tf.fit(corpus_norm)
  53. vocs = Tf.get_feature_names()
  54. corpus_array = Tf.transform(corpus_norm).toarray()
  55. corpus_norm_df = pd.DataFrame(corpus_array, columns=vocs)
  56. print(corpus_norm_df.head())

机器学习入门-文本数据-构造Tf-idf词袋模型(词频和逆文档频率) 1.TfidfVectorizer(构造tf-idf词袋模型)的更多相关文章

  1. 机器学习入门-文本数据-构造Ngram词袋模型 1.CountVectorizer(ngram_range) 构建Ngram词袋模型

    函数说明: 1 CountVectorizer(ngram_range=(2, 2)) 进行字符串的前后组合,构造出新的词袋标签 参数说明:ngram_range=(2, 2) 表示选用2个词进行前后 ...

  2. 机器学习入门-文本数据-构造词频词袋模型 1.re.sub(进行字符串的替换) 2.nltk.corpus.stopwords.words(获得停用词表) 3.nltk.WordPunctTokenizer(对字符串进行分词操作) 4.np.vectorize(对函数进行向量化) 5. CountVectorizer(构建词频的词袋模型)

    函数说明: 1. re.sub(r'[^a-zA-Z0-9\s]', repl='', sting=string)  用于进行字符串的替换,这里我们用来去除标点符号 参数说明:r'[^a-zA-Z0- ...

  3. 【Lucene3.6.2入门系列】第14节_SolrJ操作索引和搜索文档以及整合中文分词

    package com.jadyer.solrj; import java.util.ArrayList; import java.util.List; import org.apache.solr. ...

  4. 请转发!简单2分钟制作无接触式小区进出微信登记表!全免费!数据安全!所有数据均存在创建人登录的QQ腾讯文档里!

    全免费!数据安全!所有数据均存在创建人登录的QQ腾讯文档里! 阻击疫情到了最吃劲的关键期,大家能不出门就不出门,但免不了出去买个菜.取个快递啥的,每次出入的时候,社区同志都在认真拿着笔记录每个进出信息 ...

  5. 机器学习入门-文本特征-使用LDA主题模型构造标签 1.LatentDirichletAllocation(LDA用于构建主题模型) 2.LDA.components(输出各个词向量的权重值)

    函数说明 1.LDA(n_topics, max_iters, random_state)  用于构建LDA主题模型,将文本分成不同的主题 参数说明:n_topics 表示分为多少个主题, max_i ...

  6. 机器学习入门-文本特征-word2vec词向量模型 1.word2vec(进行word2vec映射编码)2.model.wv['sky']输出这个词的向量映射 3.model.wv.index2vec(输出经过映射的词名称)

    函数说明: 1. from gensim.model import word2vec  构建模型 word2vec(corpus_token, size=feature_size, min_count ...

  7. C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化

    转:http://www.cnblogs.com/lantionzy/archive/2009/10/23/1588511.html 1.新建Word文档 #region 新建Word文档/// &l ...

  8. (大数据工程师学习路径)第二步 Vim编辑器----Vim文档编辑

    一.vim重复命令 1.重复执行上次命令 在普通模式下.(小数点)表示重复上一次的命令操作 拷贝测试文件到本地目录 $ cp /etc/protocols . 打开文件进行编辑 $ vim proto ...

  9. 【机器学习】机器学习入门02 - 数据拆分与测试&算法评价与调整

    0. 前情回顾 上一周的文章中,我们通过kNN算法了解了机器学习的一些基本概念.我们自己实现了简单的kNN算法,体会了其过程.这一周,让我们继续机器学习的探索. 1. 数据集的拆分 上次的kNN算法介 ...

随机推荐

  1. uoj#213. 【UNR #1】争夺圣杯

    http://uoj.ac/problem/209 单调栈求出每个位置x左边第一个大于它的位置L[x]和右第一个不小于它的位置R[x],于是矩形L[x]<=l<=x<=r<=R ...

  2. hive命令的3种调用方式

    方式1:hive –f  /root/shell/hive-script.sql(适合多语句) hive-script.sql类似于script一样,直接写查询命令就行 例如: [root@cloud ...

  3. mysql监测工具

    可视性是系统设计的最佳境界,MySQL 也不例外.一旦完成了 MySQL 环境的搭建.运行并调优,您千万不要认为已经万事大吉了. 数据库环境既会受到来自系统更改或流量负荷的影响,也会遇到例如流量高峰. ...

  4. dubbo项目部署遇到的问题

    部署的项目结构如下: [图片] 1 Socket >>>相关的报错 检查下zookeeper的服务端cmd和客户端cmd是否起来了 2 jdbc.DataSourceProperti ...

  5. PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级

    参考来源: https://github.com/digoal/blog/blob/master/201803/20180326_01.md#postgresql-一主多从多副本强同步简明手册---配 ...

  6. MySQL 之数据库增量数据恢复案例

    MySQL 数据库增量数据恢复案例 一.场景概述 MySQL数据库每日零点自动全备 某天上午10点,小明莫名其妙地drop了一个数据库 我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢 ...

  7. CNN卷积层基础:特征提取+卷积核+反向传播

    本篇介绍卷积层的线性部分 一.与全连接层相比卷积层有什么优势? 卷积层可以节省参数,因为卷积运算利用了图像的局部相关性——分析出一小片区域的特点,加上Pooling层(汇集.汇聚),从附近的卷积结果中 ...

  8. IntelliJ IDEA 版本控制器 - Git

    1.下载Git 2.测试Git是否安装成功 3.设置 本机 Git 标识,同时解决未设置标识产生的错误 Successfully created project 'demo' on GitHub, b ...

  9. MySQL存储过程 事务transaction

    MySQL 中,单个 Store Procedure(SP) 不是原子操作,而 Oracle 则是原子的.如下的存储过程,即使语句2 失败,语句 1 仍然会被 commit 到数据库中: create ...

  10. Java中的Html解析:使用jsoup

    包:jsoup-1.10.2.jar import java.io.File; import java.io.IOException; import org.jsoup.Jsoup; import o ...