python笔记:gensim进行LDA

2024-04-28 15:28
文章标签 python 进行 笔记 lda gensim

本文主要是介绍python笔记:gensim进行LDA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

理论部分:NLP 笔记:Latent Dirichlet Allocation (介绍篇)-CSDN博客

参考内容:DengYangyong/LDA_gensim: 用gensim训练LDA模型,进行新闻文本主题分析 (github.com)

1 导入库

import jieba,os,re
from gensim import corpora, models, similarities

2 创建停用词列表

stopwords = [line.strip() for line in open('./stopwords.txt',encoding='UTF-8').readlines()]
stopwords

3 对句子进行中文分词(的函数)

def seg_depart(sentence):sentence_depart = jieba.cut(sentence.strip())#使用jieba进行中文分词stopwords = stopwordslist()outstr = ''for word in sentence_depart:if word not in stopwords:#如果不在停用词里面,则将分的词写入输入字符串中outstr += wordoutstr += " "    return outstr

4 对文档进行分词

原文档(cnews.train.txt):

"""如果文档还没分词,就进行分词"""
if not os.path.exists('./cnews.train_jieba.txt'):# 给出文档路径filename = "./cnews.train.txt"outfilename = "./cnews.train_jieba.txt"inputs = open(filename, 'r', encoding='UTF-8')outputs = open(outfilename, 'w', encoding='UTF-8')for line in inputs:line = line.split('\t')[1]'''使用制表符分割行,并取第二部分第一部分是新闻的主题'''line = re.sub(r'[^\u4e00-\u9fa5]+','',line)#使用正则表达式删除所有非中文字符,只保留中文line_seg = seg_depart(line.strip())#对剩下的中文行进行分词outputs.write(line_seg.strip() + '\n')#写入文档中outputs.close()inputs.close()

output file是:

5 准备训练语料库

"""准备好训练语料,整理成gensim需要的输入格式"""
fr = open('./cnews.train_jieba.txt', 'r',encoding='utf-8')
train = []
for line in fr.readlines():line = [word.strip() for word in line.split(' ')]train.append(line)
train

dictionary = corpora.Dictionary(train)
'''
使用 train 数据来创建一个 Dictionary 对象这个词典是一个从单词到单词ID的映射,每个单词都会被赋予一个唯一的ID
'''corpus = [dictionary.doc2bow(text) for text in train]
'''
遍历 train 数据集中的每个文档使用 doc2bow 方法将每条新闻转换为词袋模型(Bag-of-Words)每个元素是新闻中的每个词语,在字典中的ID和频率'''
corpus

6 创建LDA

lda = models.LdaModel(corpus=corpus, id2word=dictionary, num_topics=10)
'''
创建了一个 LdaModel 对象
使用前面生成的语料库 corpus 和词典 dictionary 进行训练
num_topics=10 表示要从数据中提取的主题数量
'''

7 获取topic list

topic_list = lda.print_topics(10)
topic_list
'''
[(0,'0.073*"基金" + 0.015*"公司" + 0.013*"投资" + 0.011*"市场" + 0.010*"中" + 0.009*"股票" + 0.006*"行业" + 0.006*"经理" + 0.006*"经济" + 0.006*"中国"'),(1,'0.008*"基金" + 0.007*"数码相机" + 0.006*"市场" + 0.006*"中" + 0.005*"产品" + 0.005*"元" + 0.004*"万" + 0.004*"信息" + 0.004*"账户" + 0.004*"性能"'),(2,'0.005*"活动" + 0.005*"设计" + 0.005*"中" + 0.004*"拍摄" + 0.003*"市场" + 0.003*"中国" + 0.003*"公司" + 0.003*"数码" + 0.003*"商家" + 0.003*"视频"'),(3,'0.016*"分红" + 0.015*"机身" + 0.012*"考试" + 0.006*"市场" + 0.006*"中" + 0.006*"英寸" + 0.004*"元" + 0.004*"采用" + 0.004*"公司" + 0.004*"基金"'),(4,'0.004*"中" + 0.003*"搭配" + 0.003*"设计" + 0.002*"比赛" + 0.002*"小巧" + 0.002*"时尚" + 0.002*"元" + 0.002*"房地产" + 0.002*"黑色" + 0.002*"市场"'),(5,'0.056*"基金" + 0.012*"赎回" + 0.007*"分红" + 0.005*"市场" + 0.005*"中" + 0.005*"元" + 0.004*"收益" + 0.004*"影像" + 0.004*"投资者" + 0.004*"公司"'),(6,'0.007*"中" + 0.006*"拍摄" + 0.004*"功能" + 0.004*"中国" + 0.004*"支持" + 0.003*"能力" + 0.003*"照片" + 0.003*"发展" + 0.003*"快门" + 0.003*"四级"'),(7,'0.005*"搭配" + 0.004*"中" + 0.004*"纽曼" + 0.004*"时尚" + 0.003*"穿" + 0.003*"中国" + 0.002*"市场" + 0.002*"性感" + 0.002*"黑色" + 0.002*"拍摄"'),(8,'0.011*"功能" + 0.009*"中" + 0.008*"采用" + 0.008*"玩家" + 0.008*"拍摄" + 0.007*"相机" + 0.006*"万" + 0.006*"支持" + 0.005*"镜头" + 0.005*"新"'),(9,'0.007*"说" + 0.006*"英语" + 0.006*"中" + 0.006*"时间" + 0.005*"做" + 0.004*"四级" + 0.003*"句子" + 0.003*"设计" + 0.002*"题" + 0.002*"信息"')]
'''

8 每个新闻的主题分布和主要主题

for document in corpus:#print(document)doc_topics = lda.get_document_topics(document)print(doc_topics)most_probable_topic = max(doc_topics, key=lambda x: x[1])print("Most Probable Topic: Topic ID:", most_probable_topic[0], "with probability", most_probable_topic[1])
'''
[(4, 0.9862377)]
Most Probable Topic: Topic ID: 4 with probability 0.9862377
[(2, 0.17439426), (3, 0.11908359), (4, 0.1178159), (6, 0.243781), (9, 0.342713)]
Most Probable Topic: Topic ID: 9 with probability 0.342713
[(3, 0.043999113), (4, 0.80878687), (6, 0.023567822), (9, 0.12172426)]
Most Probable Topic: Topic ID: 4 with probability 0.80878687
[(1, 0.40913466), (7, 0.33063287), (8, 0.25087485)]
Most Probable Topic: Topic ID: 1 with probability 0.40913466
[(3, 0.5576278), (7, 0.06341313), (9, 0.3749383)]
'''

这篇关于python笔记:gensim进行LDA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943597

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert