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) # 【有时需要单独运行才有效】