文本预处理:词袋模型(bag of words,BOW)、TF-IDF

这篇博客主要整理介绍文本预处理中的词袋模型(bag of words,BOW)和TF-IDF。

一、词袋模型(bag of words,BOW)

词袋模型能够把一个句子转化为向量表示,是比较简单直白的一种方法,它不考虑句子中单词的顺序,只考虑词表(vocabulary)中单词在这个句子中的出现次数。下面直接来看一个例子吧(例子直接用wiki上的例子):

"John likes to watch movies, Mary likes movies too"

"John also likes to watch football games"

对于这两个句子,我们要用词袋模型把它转化为向量表示,这两个句子形成的词表(不去停用词)为:

[‘also’, ‘football’, ‘games’, ‘john’, ‘likes’, ‘mary’, ‘movies’, ‘to’, ‘too’, ‘watch’]

因此,它们的向量表示为:

scikit-learn中的CountVectorizer()函数实现了BOW模型,下面来看看用法:

from sklearn.feature_extraction.text import CountVectorizer
corpus = ["John likes to watch movies, Mary likes movies too","John also likes to watch football games",
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
print(X.toarray())#输出结果:
#['also', 'football', 'games', 'john', 'likes', 'mary', 'movies', 'to', 'too', 'watch']
#[[0 0 0 1 2 1 2 1 1 1]
# [1 1 1 1 1 0 0 1 0 1]]
二、TF-IDF(Term Frequency / Inverse Document Frequency,词频-逆文本频率)

BOW模型有很多缺点,首先它没有考虑单词之间的顺序,其次它无法反应出一个句子的关键词,比如下面这个句子:

"John likes to play football, Mary likes too"

这个句子若用BOW模型,它的词表为:[‘football’, ‘john’, ‘likes’, ‘mary’, ‘play’, ‘to’, ‘too’],则词向量表示为:[1 1 2 1 1 1 1]。若根据BOW模型提取这个句子的关键词,则为 “like”,但是显然这个句子的关键词应该为 “football”。而TF-IDF则可以解决这个问题。TF-IDF看名字也知道包括两部分TF和IDF,TF(Term Frequency,词频)的公式为:
TF(w)=单词w在文章中出现的次数文章的单词总数TF(w) = \frac{单词w在文章中出现的次数}{文章的单词总数}TF(w)=文章的单词总数单词w在文章中出现的次数​
而IDF(inverse document frequency,逆文本频率)的公式为:
IDF(w)=log(语料库中文档的总数包含词w的文档数+1)IDF(w) =log( \frac{语料库中文档的总数}{包含词w的文档数 + 1})IDF(w)=log(包含词w的文档数+1语料库中文档的总数​)
其中,分母之所以加1是为了防止分母为0。所以,TF-IDF的公式为:
TF−IDF(w)=TF(w)∗IDF(w)TF-IDF(w) = TF(w)*IDF(w)TF−IDF(w)=TF(w)∗IDF(w)
TF-IDF值越大说明这个词越重要,也可以说这个词是关键词。关于关键词的判断示例,可以参考TF-IDF与余弦相似性的应用(一):自动提取关键词
下面来看看实际使用,sklearn中封装TF-IDF方法,并且也提供了示例:

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ['This is the first document.','This document is the second document.','And this is the third one.','Is this the first document?',
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())print(X)
print(X.toarray())"""
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this'](0, 8) 0.38408524091481483(0, 3)   0.38408524091481483(0, 6)   0.38408524091481483(0, 2)   0.5802858236844359(0, 1)    0.46979138557992045(1, 8)   0.281088674033753(1, 3) 0.281088674033753(1, 6) 0.281088674033753(1, 1) 0.6876235979836938(1, 5)    0.5386476208856763(2, 8)    0.267103787642168(2, 3) 0.267103787642168(2, 6) 0.267103787642168(2, 0) 0.511848512707169(2, 7) 0.511848512707169(2, 4) 0.511848512707169(3, 8) 0.38408524091481483(3, 3)   0.38408524091481483(3, 6)   0.38408524091481483(3, 2)   0.5802858236844359(3, 1)    0.46979138557992045
[[0.         0.46979139 0.58028582 0.38408524 0.         0.0.38408524 0.         0.38408524][0.         0.6876236  0.         0.28108867 0.         0.538647620.28108867 0.         0.28108867][0.51184851 0.         0.         0.26710379 0.51184851 0.0.26710379 0.51184851 0.26710379][0.         0.46979139 0.58028582 0.38408524 0.         0.0.38408524 0.         0.38408524]]
"""​

文本预处理:词袋模型(bag of words,BOW)、TF-IDF相关推荐

  1. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录

  2. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、xgboost模型预测推理并使用混淆矩阵评估模型、可视化模型预测的概率分布

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.xgboost模型预测推理并使用混淆矩阵评估模型.可视化模型预测的概率分布 目录

  3. 词袋模型(bag of words)构建实战

    词袋模型(bag of words)构建实战 目录 词袋模型(bag of words)构建实战 语料数据预处理 词袋模型(BOW)构建

  4. BoW词袋模型Bag of Words cpp实现(stable version 0.01)

    致谢:基础框架来源BoW,开发版本在此基础上进行,已在Ubuntu.OS X上测试通过,Windows需要支持c++11的编译器(VS2012及其以上). 使用 代码下载地址:bag-of-words ...

  5. 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了

    摘自:https://mp.weixin.qq.com/s/OZnnuA31tEaVt0vnDOy5hQ 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了 原创 小翼 飞思实验室 今天 基 ...

  6. 【自然语言处理】词袋模型在文本分类中的用法

    词袋模型在文本分类中的用法 1.加载数据 20 Newsgroups:数据被组织成 20 个不同的新闻组,每个新闻组对应一个不同的主题.一些新闻组彼此非常密切相关(例如 comp.sys.ibm.pc ...

  7. 【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)

    觉得有帮助请点赞关注收藏~~~ 一.文本向量化 文本向量化:将文本信息表示成能够表达文本语义的向量,是用数值向量来表示文本的语义. 词嵌入(Word Embedding):一种将文本中的词转换成数字向 ...

  8. 词向量之词袋模型(BOW)详解

    目录 前言 词袋模型 词袋模型的作用 词袋模型的实现 前言   自然语言处理面临的文本数据往往是非结构化杂乱无章的文本数据,而机器学习算法处理的数据往往是固定长度的输入和输出.因而机器学习并不能直接处 ...

  9. 【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)

    本文作为入门级教程,介绍了词袋模型(bag of words model)和词向量模型(word embedding model)的基本概念. 目录 1 词袋模型和编码方法 1.1 文本向量化 1.2 ...

  10. 文本相似度-词袋模型

    1.词袋模型 将两篇文本通过词袋模型变为向量模型,通过计算向量的余弦距离来计算两个文本间的相似度. 词袋模型的缺点: 词袋模型最重要的是构造词表,然后通过文本为词表中的词赋值,但词袋模型严重缺乏相似词 ...

最新文章

  1. JVM - 写了这么多年代码,你还不知道new对象背后的逻辑?
  2. java中的基本数据类型(四类八种)
  3. 寒假与春节终归,新学期和新任务又至
  4. shell从oracle中获取变量,shell 如何读取环境变量的值
  5. mysql的cpu飙升到500_[MySQLCPU]线上飙升800%,load达到12的解决过程
  6. h5页面禁止复制_H5移动端页面禁止复制技巧
  7. day21 java的日期类
  8. LeetCode刷题(21)
  9. c语言中fprintf的作用,C语言中的printf(),sprintf()和fprintf()
  10. 【BZOJ3916】friends(hash+分情况讨论)
  11. 一步步学习SPD2010--第八章节--理解工作流(8)--使用Visio映射工作流
  12. 电脑版的微信客户端也能刷朋友圈啦
  13. python pdf处理工具_NB,真PDF神处理工具!
  14. java 传入一个日期, 计算公历节日和农历节假日的常用类(包括除夕、清明节、母亲节、父亲节的算法)
  15. eth入门之web2 与 web3 的对比
  16. 我同学——应聘阿里巴巴之经过
  17. 干货丨语雀Baklib在产品帮助手册制作过程中的实际亲测
  18. 同源策略、跨域以及跨域的三种解决方案详解
  19. SIM300-E GPRS模块硬件
  20. 豆芽儿 - 高端IT人才成长社区 上线啦!

热门文章

  1. 三天打渔,两天晒网(java)
  2. 原生JS记忆翻牌小游戏
  3. 【前端库】moment.js 时间库
  4. mysql数据库地址 名称_数据库地址和名称是什么?怎么知道自己地址和名称?
  5. Java学习者论坛【申明:来源于网络】
  6. 旧瓶装新酒——memcache作为DRDOS反射放大器
  7. linux设定u盘启动,cdlinux u盘启动,教您如何设置
  8. Redis中的Stream的实现Radix Tree源码解读
  9. python设置桌面歌词_Python生成歌词词云
  10. 一位“技术宅”自制的自行车码表在B站火了,稚晖君点赞,网友催量产