整合 CountVectorizer 和 TfidfVectorizer 绘制词云图

本文分别整合 CountVectorizer 和 TfidfVectorizer 绘制词云图

✨ CountVectorizer

CountVectorizerscikit-learn 中用于 文本特征提取 的一个工具,它的主要作用是将一组文本(文本集合)转换为词频向量(Bag-of-Words,词袋模型)

简单来说:

CountVectorizer 会把文本中的每一个词(token)当作特征,然后统计每个词在每个文本中出现的次数,最终输出一个稀疏矩阵表示文本的“词频”。

🔧 作用与功能详解:

  1. 分词:自动将每个句子切分成词(默认以空格分割,也可以自定义分词器)。
  2. 构建词典:对整个语料中所有出现的词汇建立一个词汇表(字典)。
  3. 向量化:将每个文本表示为一个向量,每个维度是某个词在该文本中出现的次数。

📚 应用场景:

  • 文本分类(如垃圾邮件识别、情感分析)
  • 文本聚类
  • 信息检索
  • 自然语言处理(NLP)中的特征工程

⚠️ 注意:

  • CountVectorizer 不考虑词语顺序,即是典型的“词袋模型”。
  • 它也不考虑语义(两个同义词视为不同词)。
  • 你可以设置 max_featuresstop_wordsngram_range 等参数来优化结果。

✨ TfidfVectorizer

TfidfVectorizer 是 scikit-learn 提供的一个类,用于将原始文本转化为TF-IDF 特征矩阵,常用于文本分类、聚类、信息检索等任务。

🧠 TF-IDF 是什么?

TF-IDF = Term Frequency - Inverse Document Frequency

它是一种权重计算方法,用来衡量某个词对某个文档的重要性。

📌 1. TF(词频)公式:

T F ( t , d ) = 词  t 在文档  d 中出现的次数 文档  d 中总词数 TF(t, d) = \frac{\text{词 } t \text{ 在文档 } d \text{ 中出现的次数}}{\text{文档 } d \text{ 中总词数}} TF(t,d)=文档 d 中总词数 t 在文档 d 中出现的次数

表示某个词在文档中出现的频率。

📌 2. IDF(逆文档频率)公式:

I D F ( t ) = log ⁡ ( 1 + N 1 + D F ( t ) ) + 1 IDF(t) = \log \left( \frac{1 + N}{1 + DF(t)} \right) + 1 IDF(t)=log(1+DF(t)1+N)+1

  • ( N ):语料库中的总文档数
  • ( DF(t) ):包含词 ( t ) 的文档数量

这个公式会让出现在越少文档中的词权重越高,因为它更能“区别”文档。

📌 3. TF-IDF 综合计算:

T F - I D F ( t , d ) = T F ( t , d ) × I D F ( t ) TF\text{-}IDF(t, d) = TF(t, d) \times IDF(t) TF-IDF(t,d)=TF(t,d)×IDF(t)

⚙️ 常用参数解释

参数名含义
ngram_range=(1, 2)提取 uni-gram 和 bi-gram
max_df=0.85忽略出现在超过85%文档中的词
min_df=2忽略出现在少于2个文档中的词
stop_words='english'去除英文停用词(中文需自定义)
tokenizer自定义分词函数(适用于中文,结合 jieba)
use_idf=True是否使用逆文档频率
smooth_idf=True是否进行平滑(避免分母为0)

🧪 中文处理建议

因为 TfidfVectorizer 默认不适合中文,需要配合 jieba 分词:

import jiebadef chinese_tokenizer(text):return jieba.lcut(text)vectorizer = TfidfVectorizer(tokenizer=chinese_tokenizer)
X = vectorizer.fit_transform(docs)

📊 输出样例

假设你有:

docs = ["我 爱 你", "你 爱 他", "他 爱 我"]

输出的 TF-IDF 词向量矩阵如下:

文档索引
Doc10.700.500.500
Doc200.500.500.70
Doc30.500.5000.70

CountVectorizer vs TfidfVectorizer

特性CountVectorizerTfidfVectorizer
核心思想统计词频(TF)统计 TF × IDF
向量值每个词的出现次数每个词的重要性权重
词频高是否意味着重要不一定(可能是常见词)
适用场景适合简单建模(如朴素贝叶斯)更适合文本分类、信息检索等
是否考虑语料库整体信息❌ 只考虑当前文档✅ 考虑所有文档的分布
是否支持平滑✅ 支持平滑处理

✨ 什么是 n-gram?

n-gram 是指连续的 n 个词。例如:

  • 输入句子:"I love machine learning"
  • 1-gram(unigram): "I", "love", "machine", "learning"
  • 2-gram(bigram): "I love", "love machine", "machine learning"
  • 3-gram(trigram): "I love machine", "love machine learning"

🛠️ ngram_range=(min_n, max_n) 说明

  • ngram_range=(1, 1):只提取 1-gram(默认)
  • ngram_range=(1, 2):提取 1-gram 和 2-gram
  • ngram_range=(2, 3):提取 2-gram 和 3-gram

✅ 示例代码

from sklearn.feature_extraction.text import CountVectorizertext = ["I love machine learning"]# 提取1-gram和2-gram
vectorizer = CountVectorizer(ngram_range=(1, 2))
X = vectorizer.fit_transform(text)print(vectorizer.get_feature_names_out())
print(X.toarray())

输出结果:

['i' 'i love' 'learning' 'love' 'love machine' 'machine' 'machine learning']
[[1 1 1 1 1 1 1]]

这表示:

  • 单个词(unigram)和两个词组合(bigram)都被统计了。

🎯 使用场景建议

  • ngram_range=(1, 2):适合大多数 NLP 应用,可以捕捉常见词和短语搭配。
  • ngram_range=(2, 2):适合挖掘关键词对(如“机器 学习”)
  • ngram_range=(2, 3):更强调上下文结构,但维度较高,需要更多数据支持。

⚠️ 注意:

  • 提取更多的 n-gram 会导致维度爆炸(特征太多),要结合 max_featuresmin_df 限制特征数量。
  • 高阶 n-gram 更稀疏,也更依赖大规模语料支持。

✨ 词云可视化

安装相关的依赖

pip install wordcloud scikit-learn matplotlib

代码

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import matplotlib.pyplot as plt
from wordcloud import WordCloud# 示例文本
texts = ["Natural language processing is fun and exciting.","Machine learning and deep learning are key techniques in AI.","I love studying machine learning and natural language tasks.",
]# 初始化向量器,提取 1-gram 到 2-gram,可以使用CountVectorizer或TfidfVectorizer
vectorizer = CountVectorizer(ngram_range=(1, 2), stop_words='english')
# vectorizer = TfidfVectorizer(ngram_range=(1, 2), stop_words='english')X = vectorizer.fit_transform(texts)# 提取关键词和其对应的 分数值,对于 TF-IDF 是分数值,对于 CountVectorizer 是频率值
feature_names = vectorizer.get_feature_names_out()
print("Features:", feature_names)# 每个词语在所有文档中分数的总和
_scores = X.sum(axis=0).A1# 构建关键词:权重的字典
word_dict = dict(zip(feature_names, _scores))# 生成词云图
wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(word_dict)# 显示图形
plt.figure(figsize=(12, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.title("TF-IDF Weighted WordCloud (1-2 gram)")
plt.show()

运行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 用户管理

用户管理是 Linux 系统管理中的重要组成部分,它涉及到用户和用户组的创建、删除、修改以及权限分配等操作。以下是关于用户和用户组管理的详细说明: 一、用户和用户组的概念 (一)用户(User) 用户是系统中…

【HTTP/2和HTTP/3的应用现状:看不见的革命】

HTTP/2和HTTP/3的应用现状:看不见的革命 实际上,HTTP/2和HTTP/3已经被众多著名网站广泛采用,只是这场革命对普通用户来说是"无形"的。让我们揭开这个技术变革的真相。 著名网站的HTTP/2和HTTP/3采用情况 #mermaid-svg-MtfrNDo5DG…

青少年编程与数学 02-018 C++数据结构与算法 16课题、贪心算法

青少年编程与数学 02-018 C数据结构与算法 16课题、贪心算法 一、贪心算法的基本概念定义组成部分 二、贪心算法的工作原理三、贪心算法的优点四、贪心算法的缺点五、贪心算法的应用实例(一)找零问题问题描述:贪心策略:示例代码&a…

UE5 Set actor Location和 Set World Location 和 Set Relative Location 的区别

在 Unreal Engine 的蓝图里,SetRelativeLocation、SetWorldLocation 和 SetActorLocation 三个节点虽然都能改变物体位置,但作用对象和坐标空间(Coordinate Space)不同: 1. SetActorLocation 作用对象:整个…

VINS-FUSION:跑通手机录制数据

文章目录 📚简介🚀手机录制数据🚀跑通数据🔧启动rviz🔧启动配置🔧播放rosbag🎯跑通结果 📚简介 利用智能手机的 摄像头IMU 采集数据,并在 VINS-Fusion(视觉惯…

Spring AI在大模型领域的趋势场景题深度解析

Spring AI在大模型领域的趋势场景题深度解析 在互联网大厂Java求职者的面试中,经常会被问到关于Spring AI在大模型领域的趋势场景的相关问题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官:马架构,欢迎来到我们…

MySQL数据库全面详解:从基础到高级应用

一、数据存储概述 在计算机系统中,数据可以存储在多种形式中: 变量:程序中最基本的数据存储单元 元组:不可变的序列类型,常用于函数返回多个值 列表:有序可变集合,可存储不同类型元素 字典&…

Redux和MobX有什么区别

Redux 和 MobX 都是用于 React 应用的全局状态管理库,但它们在设计理念、使用方式和适用场景等方面存在明显的区别,下面为你详细分析: 1. 设计理念 Redux:基于 Flux 架构,遵循单向数据流和纯函数式编程的理念。状态是…

WPF实现类似Microsoft Visual Studio2022界面效果及动态生成界面技术

WPF实现类似VS2022界面效果及动态生成界面技术 一、实现类似VS2022界面效果 1. 主窗口布局与主题 <!-- MainWindow.xaml --> <Window x:Class"VsStyleApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x…

备份服务器,备份服务器数据有哪些方法可以实现?

服务器承载着企业核心业务数据与关键应用&#xff0c;数据丢失或业务中断可能带来灾难性后果。因此&#xff0c;构建一套科学、可靠的服务器数据备份体系至关重要。当前&#xff0c;服务器数据备份方法可根据技术架构、存储介质及恢复需求进行多维划分。根据不同场景、预算和技…

前端基础——5、CSS border属性与渐变色(详解与实战)

前端基础——5、CSS border属性与渐变色详解 CSS border属性与渐变色&#xff08;详解与实战&#xff09;一、border属性全面解析1. 基础三属性2. 复合写法3. 高级特性附加.border-style详解使用示例效果&#xff1a; CSS 渐变终极指南&#xff1a;线性渐变与径向渐变的深度解析…

企业出海降本:如何将应用从 AWS EC2 快速无缝迁移至DigitalOcean Droplet

企业出海已经成为目前最热门的趋势。然而不论你是做跨境电商&#xff0c;还是短剧出海&#xff0c;或处于最热门的AI 赛道&#xff0c;你都需要使用海外的云主机或GPU云服务。海外一线的云服务平台尽管覆盖区域广泛&#xff0c;但是往往费用成本较高。所以降本始终是企业出海关…

解决Spring Boot多模块自动配置失效问题

前言 在Spring Boot多模块项目中&#xff0c;模块间配置不生效是一个复杂但可解决的问题&#xff0c;尤其涉及自动配置类、依赖冲突、条件注解以及IDE配置。 一、问题背景与场景 1.1 场景描述 假设存在两个模块&#xff1a; 模块A&#xff1a;提供通用配置&#xff08;如跨…

WEBSTORM前端 —— 第2章:CSS —— 第4节:盒子模型

目录 1.画盒子 2.Pxcook软件 3.盒子模型——组成 4.盒子模型 ——边框线 5.盒子模型——内外边距 6.盒子模型——尺寸计算 7.清除默认样式 8.盒子模型——元素溢出 9.外边距问题 ①合并现象 ②塌陷问题 10.行内元素——内外边距问题 11.盒子模型——圆角 12.盒子…

Kafka和flume整合

需求1&#xff1a;利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台&#xff1a; 在flume/conf下添加.conf文件&#xff0c; vi flume-kafka.conf # 定义 Agent 组件 a1.sourcesr1 a1.sinksk1 a1.c…

Idea 如何配合 grep console过滤并分析文件

这里写自定义目录标题 [grep console插件]()右击打开文件目录&#xff0c;选择 tail in console 同时可以添加自己的快捷键。 ![新的改变](https://i-blog.csdnimg.cn/direct/03423e27cf6c40c5abd2d53982547b61.png) 随后会在idea的菜单栏中出现tail菜单。这里&#xff0c;接下…

怎样学习Electron

学习 Electron 是一个很好的选择&#xff0c;特别是如果你想构建跨平台的桌面应用程序&#xff0c;并且已经有前端开发经验。以下是一个循序渐进的学习指南&#xff0c;帮助你从零开始掌握 Electron。 1. 基础知识 HTML/CSS/JavaScript 确保你对这些基础技术有扎实的理解&am…

MySQL 大数据量分页查询优化指南

问题分析 当对包含50万条记录的edu_test表进行分页查询时&#xff0c;发现随着分页越深入&#xff0c;查询时间越长&#xff1a; limit 0,10&#xff1a;0.05秒limit 200000,10&#xff1a;0.14秒limit 499000,10&#xff1a;0.21秒 通过EXPLAIN分析发现&#xff0c;limit o…

【仿真】Ubuntu 22.04 安装MuJoCo 3.3.2

官方GIthub下载: https://github.com/google-deepmind/mujoco/releases 官网&#xff1a;MuJoCo — Advanced Physics Simulation 文档&#xff1a;Overview - MuJoCo Documentation 主要参考&#xff1a;Ubuntu 22.04 安装Mujoco 3.22 - RobotStudent的文章 - 知乎 简…

最新字节跳动运维云原生面经分享

继续分享最新的go面经。 今天分享的是组织内部的朋友在字节的go运维工程师岗位的云原生方向的面经&#xff0c;涉及Prometheus、Kubernetes、CI/CD、网络代理、MySQL主从、Redis哨兵、系统调优及基础命令行工具等知识点&#xff0c;问题我都整理在下面了 面经详解 Prometheus …