对小红书评论基于LDA模型作主题分析

import numpy as np
import re
import pandas as pd
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import LatentDirichletAllocationdf1 = pd.read_csv('小红书评论.csv')  # 读取同目录下csv文件
# df1 = df1.drop_duplicates(subset=['用户id'])  # 获取一个id只评论一次的数据
pattern = u'[\\s\\d,.<>/?:;\'\"[\\]{}()\\|~!\t"@#$%^&*\\-_=+a-zA-Z,。\n《》、?:;“”‘’{}【】()…¥!—┄-]+'
df1['cut'] = df1['内容'].apply(lambda x: str(x))
df1['cut'] = df1['cut'].apply(lambda x: re.sub(pattern, ' ', x))  #对评论内容作清洗,只保留中文汉字,生成新的cut行
df1['cut'] = df1['cut'].apply(lambda x: " ".join(jieba.lcut(x)))  #对评论内容作分词和拼接
print(df1['cut'])# 1.构造TF-IDF
tf_idf_vectorizer = TfidfVectorizer()
tf_idf = tf_idf_vectorizer.fit_transform(df1['cut'])
# 2.特征词列表
feature_names = tf_idf_vectorizer.get_feature_names_out()
# 3.将特征矩阵转变为pandas DataFrame
matrix = tf_idf.toarray()
feature_names_df = pd.DataFrame(matrix,columns=feature_names)
print(feature_names_df)
# 所有的特征词组成列,所有的评论组成行,矩阵中的元素表示这个特征词在该评论中所占的重要性,即tf-idf值,0表示该句评论中没有该词。n_topics = 5
# 定义LDA对象
lda = LatentDirichletAllocation(n_components=n_topics,max_iter=50,learning_method='online',learning_offset=50.,random_state=0
)
# 核心,将TF-IDF矩阵放入LDA模型中
lda.fit(tf_idf)#第1部分
# 要输出的每个主题的前 n_top_words 个主题词数
n_top_words = 50
def top_words_data_frame(model: LatentDirichletAllocation,tf_idf_vectorizer: TfidfVectorizer,n_top_words: int) -> pd.DataFrame:rows = []feature_names = tf_idf_vectorizer.get_feature_names_out()for topic in model.components_:top_words = [feature_names[i]for i in topic.argsort()[:-n_top_words - 1:-1]]rows.append(top_words)columns = [f'topic {i + 1}' for i in range(n_top_words)]df = pd.DataFrame(rows, columns=columns)return df#2
def predict_to_data_frame(model: LatentDirichletAllocation, X: np.ndarray) -> pd.DataFrame:matrix = model.transform(X)columns = [f'P(topic {i + 1})' for i in range(len(model.components_))]df = pd.DataFrame(matrix, columns=columns)return df# 要输出的每个主题的前 n_top_words 个主题词数# 计算 n_top_words 个主题词
top_words_df = top_words_data_frame(lda, tf_idf_vectorizer, n_top_words)# 获取五个主题的前五十个特征词
print(top_words_df)# 转 tf_idf 为数组,以便后面使用它来对文本主题概率分布进行计算
X = tf_idf.toarray()# 计算完毕主题概率分布情况
predict_df = predict_to_data_frame(lda, X)# 获取五个主题,对于每个评论,分别属于这五个主题的概率
print(predict_df)
使用了sklearn库中的TfidfVectorizer函数来创建一个tf-idf向量化器对象tf_idf_vectorizer。然后,该对象的fit_transform函数被用来将数据集df1中的文本内容作为输入,进一步生成tf-idf向量化后的特征矩阵tf_idf。在这个特征矩阵中,每个文本的tf-idf向量代表了该文本中每个单词的权重,这些权重是根据所有文本在训练过程中出现的单词计算得出的。这些权重通常表示单词在整个数据集中的重要性或者特殊性。
get_feature_names()是TfidfVectorizer类中的一个方法,它返回由TfidfVectorizer对象中提取出的特征单词组成的列表,这些特征单词会被用来构建特征向量。特征向量是由训练集中的文档中的特征单词按照预定义的特征权重组成的向量。在使用TfidfVectorizer对文本进行向量化后,可以通过调用get_feature_names()来获取所有特征单词。
在这段代码中,toarray() 方法将 tf-idf 矩阵转换为一个 numpy 数组。然后,使用 numpy 数组来创建一个 pandas DataFrame,指定列名为特征单词列表(feature_names)。这样就可以得到一个以特征单词为列名,每行表示一个样本的 DataFrame,它的元素是该样本中该特征单词的 tf-idf 值。对TF-IDF以及LDA模型的理解,参照下面的链接:https://zhuanlan.zhihu.com/p/537450715
https://zhuanlan.zhihu.com/p/480672270
https://zhuanlan.zhihu.com/p/629317852

 

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

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

相关文章

渗透测试修复笔记 - 02 Docker Remote API漏洞

需要保持 Docker 服务运行并且不希望影响其他使用 Docker 部署的服务&#xff0c;同时需要禁止外网访问特定的 Docker API 端口&#xff08;2375&#xff09;&#xff1a;通过一下命令来看漏洞 docker -H tcp://ip地址:2375 images修改Docker配置以限制访问 修改daemon.json配…

如何设计出标准化的数据库?(三大范式)

当谈及数据库设计时&#xff0c;我们实际上在谈论如何组织和管理数据以支持应用程序或业务的需求。数据库设计的质量直接影响着系统的性能、可维护性和数据的完整性。那么怎么去设计数据库才可以尽可能地实现一个标准化的数据库呢&#xff1f;这就不得不提到三大范式。 1. 三大…

图【数据结构】

文章目录 图的基本概念邻接矩阵邻接表图的遍历BFSDFS 图的基本概念 图是由顶点集合及顶点间的关系组成的一种数据结构 顶点和边&#xff1a;图中结点称为顶点 权值:边附带的数据信息 路径 &#xff1a; 简单路径 和 回路&#xff1a; 子图&#xff1a;设图G {V, E}和图G1…

MySQL8 设置大小写敏感

问题描述 今天对我本地的数据库迁移服务器上&#xff0c;完成之后启动项目报错 说数据库中不存在 quartz_LOCKS 这张表 我打开服务器上面的数据上面展示的表名是 quartz_LOCKS&#xff0c;然后通过查询 lower_case_table_names 配置可知 show variables like lower_case_tabl…

Kamailio的SIP服务的性能

官方的性能报告&#xff1a; Kamailio (OpenSER) 1.2.0 - Transaction Module and User Location Performance Tests 如下的提取的性能参数也是基于官方的性能报告&#xff0c;信令走的UDP&#xff0c;作为做系统方案的参照&#xff0c;Kamailio的性能还是非常&#xff0c;非常…

leetcode代码记录(盛最多水的容器

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以…

突破编程_C++_STL教程( multiset 的基础知识)

1 std::multiset 概述 std::multiset 是 C STL&#xff08;标准模板库&#xff09;中的一个容器&#xff0c;它定义在头文件<set>中。std::multiset 是一个多重集合容器&#xff0c;允许存储重复的元素键值&#xff0c;并且这些元素键值按照特定的严格弱排序准则进行排序…

幸运数字(蓝桥杯23省赛)

幸运数字&#xff08;蓝桥杯23省赛&#xff09; 题目分析 暴力判断的思路就不讲了&#xff0c;这道题主要想将一个思想&#xff0c;对于这种数字类的题目&#xff0c;对半枚举的思路。 100000000是不符合要求的&#xff0c;所以最多遍历到99999999。这个思路是我一半一半的凑…

【Hibernate-Validate】常用注解

常用注解: NotNull:被注释的元素(任何元素)必须不为 nul, 集合为空也是可以的。NotEmpty:用来校验字符串、集合、map、数组不能为null或也不能为空(字符串传入空格也不可以)(集合需至少包含一个元素)NotBlank:被注释的字符串的必须非空&#xff0c;空格也不行&#xff0c;空字…

Unity3D 动态生成场景管理节点详解

前言 Unity3D 提供了丰富的功能和工具&#xff0c;可以帮助开发者快速高效地创建各种类型的游戏。在游戏开发过程中&#xff0c;有时候我们需要动态生成场景管理节点来管理游戏场景中的各种元素&#xff0c;比如角色、道具、敌人等。本文将详细介绍如何在Unity3D中动态生成场景…

来吧伙计们,让AI教我们怎么说海盗语

“如果想伺机而动&#xff0c;就是这样。”——杰克船长提到海盗&#xff0c;我们往往联想到约翰尼德普在《加勒比海盗》中饰演的杰克船长。我们有什么理由不喜欢海盗呢&#xff1f;他们航行在海上&#xff0c;寻找埋藏的宝藏&#xff0c;痛饮朗姆酒&#xff0c;用自己独特的海…

FreMIM:傅里叶变换与遮罩的图像建模在医学图像分割中的应用

代码链接&#xff1a;GitHub - Rubics-Xuan/FreMIM: This repo holds the official code for the paper "FreMIM: Fourier Transform Meets Masked Image Modeling for Medical Image Segmentation". 论文链接&#xff1a;https://arxiv.org/abs/2304.10864 收录于…

差旅补助解决方案|数字化差补赋能业务提效

长期以来&#xff0c;差旅补助一直是企业为了激励员工出差并表达对员工的关怀而采取的一种方式&#xff0c;以经济和福利支持来鼓励员工积极投入工作。然而&#xff0c;由于传统差旅补助的核算、发放和管理方式存在诸多问题&#xff0c;往往适得其反&#xff0c;无法实现企业的…

RocketMQ 面试题及答案整理,最新面试题

RocketMQ的消息存储机制是如何设计的&#xff1f; RocketMQ消息存储机制的设计原理&#xff1a; 1、CommitLog文件&#xff1a; 所有的消息都存储在一个连续的CommitLog文件中&#xff0c;保证了消息的顺序写入&#xff0c;提高写入性能。 2、消费队列&#xff1a; 为每个主…

web前端练习一

1.电子汇款单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>电子汇款单</title> </head> <body><h2>工商银行电子汇款单</h2><table border"1px">&…

C语言自学笔记10----C语言数组

C 语言数组 数组是可以存储多个值的变量。例如&#xff0c;如果要存储100个整数&#xff0c;则可以为其创建一个数组。 示例 int data[100]; 例如&#xff0c; float mark[5]; 在这里&#xff0c;我们声明了一个浮点类型的数组mark。其大小为5。意味着&#xff0c;它可以容纳5个…

MySQL row_number()函数,rank()函数和dense_rank()函数

从MySQL8.0开始引用row_number(), rank()函数和dense_rank()函数&#xff0c;也就是常见的窗口函数&#xff0c;三个函数都是一种用于计算排名的工具&#xff0c;它们根据指定的列对结果集进行排序&#xff0c;并为每一行分配一个排名值&#xff08;1,2,3,...&#xff09;。 函…

【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

CoSaMP算法实现压缩感知的MATLAB实现

CoSaMP(Compressive Sampling Matching Pursuit)算法是一种基于稀疏表示的信号重构算法,它是对OMP(Orthogonal Matching Pursuit)算法的改进。CoSaMP算法在信号重构和压缩感知领域有着广泛的应用,特别是在处理稀疏信号时表现出色。 基本定义 下面是对CoSaMP算法的详细解…

(自用笔记)每天一点vue3—— echarts横坐标刻度标签显示不完全的问题

我是想做一个vue3echarts的账单数据展示项目&#xff0c;因为有vue2的基础&#xff0c;打算直接在这个项目上熟悉掌握vue3的新特性。这系列笔记就按照遇见问题解决问题的思路更新&#xff0c;不按照官方快速上手的章节&#xff0c;特此说明。 echarts 上次遗留一个横坐标刻度标…