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版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数