LDA_Python_demo

import pandas as pd 
import numpy as np 
import gensim
import jieba 
import pyLDAvis 
import pyLDAvis.gensim_models
from cntext.dictionary import STOPWORDS_zh 
import os 

# os.chdir('path') # 设定默认需要保存文件夹

texts = [
        '详细了解园区规划,走访入驻企业项目,现场察看产品研发和产业化情况。他强调,',
        '要坚持规划先行,立足高起点、高标准、高质量,科学规划园区组团,提升公共服务水平,',
        '注重产城融合发展。要增强集聚功能,集聚产业、人才、技术、资本,加快构建从基础研究、',
        '技术研发、临床实验到药品生产的完整产业链条,完善支撑产业发展的研发孵化、成果转化、',
        '生产制造平台等功能配套,推动产学研用协同创新,做大做强生物医药产业集群。唐良智在调研',
        '中指出,我市生物医药产业具有良好基础,但与高质量发展的要求相比,在规模、结构、创新能力',
        '等方面还存在不足。推动生物医药产业高质量发展,努力培育新兴支柱产业,必须紧紧依靠创新创业',
        '创造,着力营造良好发展环境。要向改革开放要动力,纵深推进“放管服”改革,用好国际国内创新资源,',
        '大力引进科技领军人才、高水平创新团队。要坚持问题导向,聚焦企业面临的困难和问题,把握生物医药产业',
        '发展特点,精准谋划、不断完善产业支持政策,切实增强企业获得感。要精准服务企业,构建亲清新型政商关系,',
        '以高效优质服务助力企业发展',
        '2018年我省软件和信息服务业发展指数为67.09,']

# 分词
def cut_words(string):
    cuts = [w for w in jieba.cut(string) if len(w) > 1]
    cuts = [w for w in cuts if w not in STOPWORDS_zh]
    return cuts


# 创建词袋向量(bag of words)
def create_bow(text_cut):
    dictionary = gensim.corpora.Dictionary(text_cut)
    corpus = [dictionary.doc2bow(text) for text in text_cut]
    return dictionary, corpus


if __name__ == '__main__':
    # *****************【此部分需要修改】
    # 读取数据
    df = pd.DataFrame({'texts': texts, 'id': range(0, 12)}, index=range(0, 12))
    print("语料库样本Size:", df.shape)
    # 文档所在的列名
    text = 'texts'  
    # 设定主题数目
    topic_num = 3  
    
    # *****************【这部分无需修改】
    # 分词
    df['text_cut'] = df[text].apply(cut_words)
    # 创建词袋向量
    text_cut = df['text_cut'].tolist()  # 将列转化为数组形式
    dictionary, corpus = create_bow(text_cut)
    # 训练LDA模型
    lda_model = gensim.models.ldamodel.LdaModel(corpus, id2word=dictionary, num_topics=topic_num, passes=10)
    # 保存LDA模型
    lda_model.save('lda_model.model')
    # 加载保存的LDA模型
    lda_model = gensim.models.ldamodel.LdaModel.load('lda_model.model')
    
    # *****************【这部分根据需要修改】
    # 输出模型
    print(lda_model.print_topics(num_topics=3, num_words=4))  # 输出3个主题,每个主题4个词汇
    print(lda_model.print_topic(0, topn=5)) # 输出第0个主题,排名前十的关键词
        
    # 主题可视化
    pyLDAvis.enable_notebook(local=False)
    plot = pyLDAvis.gensim_models.prepare(lda_model, corpus, dictionary)
    # 保存主题可视化为网页,但是由于网页依赖的第三方插件存在问题,打开前使用TXT打开并将文本中的“cdn”替换为“fastly”,然后关闭再用浏览器打开
    pyLDAvis.save_html(plot, 'LDAvis.html')
    pyLDAvis.display(plot, local=True)  # 【有时需要单独运行才有效】
posted @ 2022-06-04 18:07  EconCoder  阅读(5)  评论(0)    收藏  举报