Python文本处理:LDA主题聚类模型

一、模型简介

LDA(Latent Dirichlet Allocation)是一种生成式概率模型,用于发现文本数据中隐藏的主题分布。本项目基于Python实现LDA主题模型,包含文本预处理、最佳主题数目选择、关键词提取、词云生成以及PyLDAvis可视化等步骤。

二、数据预处理

文本清洗

对文本数据进行清理操作,包括:

去除标点符号;

去除数字。

代码实现:

text = re.sub(r'[^\w\s]', '', text) 
text = re.sub(r'\d+', '', text)  

分词处理

利用jieba库对文本进行中文分词。

代码实现:

words = jieba.lcut(text) 

停用词过滤

加载停用词表,过滤掉无意义的词语,同时保留长度大于1的词。

代码实现:

stop_words_path = "stop_words.txt" 
with open(stop_words_path, 'r', encoding='utf-8') as f:stop_words = set(f.read().splitlines())
filtered_words = [word for word in words if word not in stop_words and len(word) > 1]

三、词典与语料库构建

利用gensim库,创建词典和语料库,为后续主题模型训练做好准备。

代码实现:

dictionary = corpora.Dictionary(processed_texts)
corpus = [dictionary.doc2bow(text) for text in processed_texts]

四、主题数目的选择

一致性评分计算

通过CoherenceModel计算不同主题数目下的一致性评分。

代码实现:

coherence_model = CoherenceModel(model=lda_model, texts=processed_texts, dictionary=dictionary, coherence='c_v')

最佳主题数目确定

绘制一致性评分图表,选择评分最高的主题数目。

代码实现:

plt.plot(topic_range, coherence_scores)
plt.xlabel('Number of Topics')
plt.ylabel('Coherence Score')
plt.title('Coherence Score for Different Topic Numbers')
plt.show()

五、LDA主题模型训练

使用最佳主题数目训练LDA模型,并提取每个主题的关键词。

代码实现:

lda_model = models.LdaModel(corpus, num_topics=selected_num_topics, id2word=dictionary, passes=10, random_state=42)

关键词提取

打印每个主题的关键词,并保存到Excel文件。

代码实现:

topics = []
for idx, topic in lda_model.print_topics(-1):topics.append([f"主题 {idx + 1}", topic])
df_topics = pd.DataFrame(topics, columns=["主题", "关键词"])
df_topics.to_excel("主题关键词.xlsx", index=False)

六、主题词云生成

为每个主题生成词云图,展示关键词的相对重要性。

代码实现:

words = dict(lda_model.show_topic(idx, topn=30))
wordcloud = WordCloud(font_path="msyh.ttc", background_color='white', width=800, height=400).generate_from_frequencies(words)

七、PyLDAvis主题可视化

利用pyLDAvis库可视化主题分布和词项关联,并保存为HTML文件。

代码实现:

lda_vis = pyLDAvis.gensim_models.prepare(lda_model, corpus, dictionary)
pyLDAvis.save_html(lda_vis, "lda.html")

八、总结与展望

通过本项目,系统地展示了利用LDA主题模型进行文本数据分析的全过程。首先,对原始数据进行了清洗、分词和停用词过滤等预处理操作,确保输入模型的文本质量。接着,通过构建词典与语料库,结合一致性评分确定了最佳主题数目,确保模型的结果具有较高的可解释性。在主题建模阶段,提取了每个主题的关键词,并通过词云直观展示了各主题的核心词汇分布。此外,利用PyLDAvis实现了主题与词项关联的动态可视化,有效提升了分析结果的可读性。

本项目成果表明,LDA模型是一种强大的文本分析工具,尤其在挖掘大规模文本数据的潜在主题方面具有显著优势。然而,该模型对参数设置敏感,未来可以进一步优化参数,如主题数目和训练次数。同时,可尝试引入动态主题模型(DTM)或结合深度学习方法,处理随时间变化的主题结构,从而提升分析的深度与广度。

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

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

相关文章

4.JoranConfigurator解析logbak.xml

文章目录 一、前言二、源码解析GenericXMLConfiguratorlogback.xml解析通过SaxEvent构建节点model解析model节点DefaultProcessor解析model 三、总结 一、前言 上一篇介绍了logback模块解析logback.mxl文件的入口, 我们可以手动指定logback.xml文件的位置, 也可以使用其它的名…

直连EDI与VAN:如何选择更适合企业的数据交换方式

在推进EDI项目时,企业通常会面临两种主要的数据交换方式选择:直连EDI(Direct EDI)和增值网络VAN(Value Added Network)。那么,它们之间有什么区别?为什么我们更推荐企业使用直连EDI而…

用户中心项目教程(五)---MyBatis-Plus完成后端初始化+测试方法

文章目录 1.数据库的链接和创建2.建库建表语句3.引入依赖4.yml配置文件5.添加相对路径6.实体类的书写7.Mapper接口的定义8.启动类的指定9.单元测试10运行时的bug 1.数据库的链接和创建 下面的这个就是使用的我们的IDEA链接这个里面的数据库: 接下来就是输入这个用户…

如何使用MaskerLogger防止敏感数据发生泄露

关于MaskerLogger MaskerLogger是一款功能强大的记录工具,该工具可以有效防止敏感数据泄露的发生。 MaskerLogger旨在保护目标系统的日子安全,此格式化程序可确保你的日志安全并防止敏感数据泄露。例如使用此格式化程序,打印下列数据&#x…

boss直聘 __zp_stoken__ 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 py代码 import execjs imp…

2024-春秋杯冬季赛

Misc 简单算术 题目提示异或,直接把开头字符 y 与 f 异或,得到的是不可见字符,base64 编码一下得到异或的字符,将给出的每一个字符与编码后的结果异或即可得到 flag import base64result chr((ord("y") ^ ord("…

SparkSQL函数

文章目录 1. SparkSQL函数概述2. SparkSQL内置函数2.1 常用内置函数分类2.2 常用数组函数2.2.1 array()函数1. 定义2. 语法3. 示例 2.3 常用日期与时间戳函数2.4 常见聚合函数2.5 常见窗口函数 3. SparkSQL自定义函数3.1 自定义函数分类3.2 自定义函数案例演示3.2.1 定义自定义…

Tomcat下载配置

目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…

ent.SetDatabaseDefaults()

在 AutoCAD 的 .NET API 中,ent.SetDatabaseDefaults() 这句代码通常用于将一个实体(Entity)对象的属性设置为与其所在的数据库(Database)的默认设置相匹配。这意味着,该实体将采用数据库级别的默认颜色、图…

【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Spring bean加载的顺序探究

目录 前言例子代码和bean顺序改变全注解类加载顺序bean 的依赖关系改变,被依赖的先加载自定义BeanFactoryPostProssort 提前获取某个bean按照refresh的finishBeanFactoryInitialization方法改变beanBeanDefinitionRegistryPostProcessor改变beanDefinitionsConfigur…

React 中hooks之useDeferredValue用法总结

目录 概述基本用法与防抖节流的区别使用场景区分过时内容最佳实践 概述 什么是 useDeferredValue? useDeferredValue 是 React 18 引入的新 Hook,用于延迟更新某个不那么重要的部分。它接收一个值并返回该值的新副本,新副本会延迟更新。这种延迟是有…

【博客之星2024年度总评选】年度回望:我的博客之路与星光熠熠

【个人主页】Francek Chen 【人生格言】征途漫漫,惟有奋斗! 【热门专栏】大数据技术基础 | 数据仓库与数据挖掘 | Python机器学习 文章目录 前言一、个人成长与盘点(一)机缘与开端(二)收获与分享 二、年度创…

R 语言科研绘图第 20 期 --- 箱线图-配对

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…

支持向量机SVM的应用案例

支持向量机(Support Vector Machine,SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。 基本原理 SVM的主要目标是周到一个最优的超平面,该超平面能够将不同类别的数据点尽可能分开,并且使离该超平面最近的数…

Ubuntu 24.04 LTS 更改软件源

Ubuntu 24.04 LTS 修改软件源

wps数据分析000002

目录 一、快速定位技巧 二、快速选中技巧 全选 选中部分区域 选中部分区域(升级版) 三、快速移动技巧 四、快速录入技巧 五、总结 一、快速定位技巧 ctrl→(上下左右)快速定位光标对准单元格的上下部分双击名称单元格中…

[gdb调试] gdb调试基础实践gdb指令汇总

​ 一. 参考资料 《C/C代码调试的艺术》 二. 调试过程 1. 编译: 使用Debug模式编译,或者使用Release模式编译加入-g参数,-g选项会在可执行文件中加入调试信息,这些信息包含了程序中的变量名、函数名、行号等,能让…

风吹字符起,诗意Linux:一场指令与自由的浪漫邂逅(上)

文章目录 前言一. 知识过渡文件的属性与类型路径 二. 基本指令ls:风起草长,窥见世界的全貌cd:穿梭路径间,漫步荒原的远方pwd:定位自我,荒原上的坐标mkdir:种下希望,创建属于自己的世…

知识图谱中的word2vec 技术是做什么的?

Word2Vec 是一种将单词转换为向量表示的技术,由 Google 在 2013 年提出。这项技术的核心思想是通过大规模文本数据训练神经网络模型,从而将单词映射到低维稠密的向量空间中。这些向量能够捕捉到单词之间的语义和语法关系,使得相似或相关的单词…