Python 使用 Jieba 分词和 Gensim LDA 进行文本主题建模与可视化
本教程将介绍如何使用 Python 语言,结合 Jieba 分词库和 Gensim LDA 模型,对文本数据进行主题建模和可视化分析。以下步骤涵盖了从文本预处理到主题可视化,以及主题摘要生成的全过程。/n/n1. 使用 Python 读取 Excel 文件/n/n 可以使用 pandas 库中的 read_excel 函数读取 Excel 文件,具体方法如下:/n/n python/n import pandas as pd/n df = pd.read_excel('file.xlsx')/n /n/n 其中,'file.xlsx' 为 Excel 文件名,df 为 DataFrame 类型的数据。/n/n2. 使用 Jieba 库对 content 列进行分词/n/n 可以使用 Jieba 库中的 cut 函数对 content 列进行分词,具体方法如下:/n/n python/n import jieba/n df['content'] = df['content'].apply(lambda x: ' '.join(jieba.cut(x)))/n /n/n 其中,apply 函数可以对 DataFrame 中的每一行进行操作,lambda 函数中的语句将每一行的文本进行分词,并用空格隔开。/n/n3. 使用正则表达式对分词结果进行数据预处理/n/n 可以使用 re 库中的 sub 函数对分词结果进行预处理,具体方法如下:/n/n python/n import re/n df['content'] = df['content'].apply(lambda x: re.sub('[^/w/s]', '', x.lower()))/n /n/n 其中,sub 函数将分词结果中的非字母数字和空格替换为空字符串,lower 函数将所有字母转换为小写,便于同义词合并。/n/n4. 使用同义词表对分词结果进行同义词合并/n/n 可以使用自定义的同义词表,使用 replace 函数将分词结果中的同义词替换为同一个词,具体方法如下:/n/n python/n synonyms = {'synonym1': 'word1', 'synonym2': 'word1'}/n df['content'] = df['content'].apply(lambda x: ' '.join([synonyms.get(word, word) for word in x.split()]))/n /n/n 其中,synonyms 为同义词表,get 函数将分词结果中的单词与同义词表匹配,如果存在同义词,则替换为同一个词。/n/n5. 使用 gensim 库进行 LDA 主题建模/n/n 可以使用 gensim 库中的 LdaModel 函数进行 LDA 主题建模,具体方法如下:/n/n python/n from gensim import corpora, models/n texts = [doc.split() for doc in df['content'].tolist()]/n dictionary = corpora.Dictionary(texts)/n corpus = [dictionary.doc2bow(text) for text in texts]/n lda = models.LdaModel(corpus, num_topics=8, id2word=dictionary, passes=10)/n /n/n 其中,texts 为分词后的文本列表,dictionary 为 gensim 中的 Dictionary 类型,corpus 为 gensim 中的 Corpus 类型,lda 为 gensim 中的 LdaModel 类型。/n/n6. 显示每个主题下的 5 篇关键文档/n/n 可以使用 lda.show_topics 函数显示每个主题下的关键词,并使用 lda.get_document_topics 函数获取每篇文档的主题分布,具体方法如下:/n/n python/n for i, topic in lda.show_topics():/n print('Topic {}: {}'.format(i+1, topic))/n for j in lda.get_topic_terms(i)[:5]:/n print(dictionary[j[0]], j[1])/n print('Top 5 documents:')/n for j in lda.get_topic_docs(i)[:5]:/n print(df.iloc[j[0]]['document'])/n /n/n 其中,i 为主题编号,j 为关键词或文档编号。/n/n7. 将结果保存至 Excel 表/n/n 可以使用 pandas 库中的 to_excel 函数将结果保存至 Excel 表,具体方法如下:/n/n python/n df.to_excel('result.xlsx')/n /n/n 其中,'result.xlsx' 为结果文件名。/n/n8. 计算主题一致性和主题困惑度/n/n 可以使用 gensim 库中的 CoherenceModel 函数和 LogPerplexityEvaluator 函数分别计算主题一致性和主题困惑度,具体方法如下:/n/n python/n from gensim.models import CoherenceModel/n from gensim.models.ldamodel import LogPerplexityEvaluator/n coherence_model_lda = CoherenceModel(model=lda, texts=texts, dictionary=dictionary, coherence='c_v')/n coherence_lda = coherence_model_lda.get_coherence()/n perplexity = LogPerplexityEvaluator(lda, corpus, coherence='c_v').get_score()/n /n/n 其中,coherence_model_lda 为 CoherenceModel 类型,coherence_lda 为主题一致性值,perplexity 为主题困惑度值。/n/n9. 使用 matplotlib 库绘制主题一致性和困惑度折线图/n/n 可以使用 matplotlib 库中的 plot 函数、xlabel 函数、ylabel 函数和 legend 函数绘制主题一致性和困惑度折线图,具体方法如下:/n/n python/n import matplotlib.pyplot as plt/n x = [8, 15]/n y1 = [coherence_lda_8, coherence_lda_15]/n y2 = [perplexity_8, perplexity_15]/n plt.plot(x, y1, label='Coherence')/n plt.plot(x, y2, label='Perplexity')/n plt.xlabel('Number of Topics')/n plt.ylabel('Value')/n plt.legend()/n plt.show()/n /n/n 其中,x 为主题数列表,y1 为主题一致性值列表,y2 为主题困惑度值列表。/n/n10. 使用 pyLDAvis 库实现 LDA 主题可视化/n/n 可以使用 pyLDAvis 库中的 prepare 函数实现 LDA 主题可视化,并使用 save_html 函数保存至 HTML 形式,具体方法如下:/n/n python/n import pyLDAvis.gensim_models as gensimvis/n vis = gensimvis.prepare(lda, corpus, dictionary)/n pyLDAvis.save_html(vis, 'lda.html')/n /n/n 其中,vis 为 pyLDAvis 中的可视化对象,'lda.html' 为 HTML 文件名。/n/n11. 生成主题摘要/n/n 可以使用 gensim 库中的 get_topic_terms 函数获取每个主题的关键词,并使用 lda.get_document_topics 函数获取每篇文档的主题分布,具体方法如下:/n/n python/n topics = lda.show_topics(num_topics=8)/n for i, topic in topics:/n print('Topic {}: {}'.format(i+1, topic))/n top_words = [dictionary[j[0]] for j in lda.get_topic_terms(i)[:5]]/n print('Top words:', ', '.join(top_words))/n top_docs = lda.get_topic_docs(i)[:5]/n print('Top documents:')/n for j in top_docs:/n print(df.iloc[j[0]]['document'])/n print('Summary:', ', '.join(top_words))/n /n/n 其中,i 为主题编号,j 为关键词或文档编号。/n/n12. 将主题摘要结果保存为 Excel 文件/n/n 可以使用 pandas 库中的 DataFrame 函数将主题摘要结果转换为 DataFrame 类型,并使用 to_excel 函数将结果保存至 Excel 表,具体方法如下:/n/n python/n summary = []/n for i, topic in topics:/n top_words = [dictionary[j[0]] for j in lda.get_topic_terms(i)[:5]]/n top_docs = lda.get_topic_docs(i)[:5]/n docs = [df.iloc[j[0]]['document'] for j in top_docs]/n summary.append({'Topic': i+1, 'Top words': ', '.join(top_words), 'Top documents': '//n'.join(docs)})/n df_summary = pd.DataFrame(summary)/n df_summary.to_excel('summary.xlsx')/n /n/n 其中,df_summary 为 DataFrame 类型的主题摘要结果,'summary.xlsx' 为结果文件名。/n/n13. 对每个主题进行主题强度计算,绘制热力图/n/n 可以使用 pyLDAvis 库中的 prepare 函数和 show 函数实现主题强度计算和热力图绘制,具体方法如下:/n/n python/n import pyLDAvis.gensim_models as gensimvis/n vis_data = gensimvis.prepare(lda, corpus, dictionary)/n vis_data = vis_data.topic_coordinates/n vis_data['size'] = vis_data['Freq'] / vis_data['Freq'].sum()/n vis_data = vis_data[['Category', 'x', 'y', 'size']]/n vis_data = vis_data.pivot(index='y', columns='x', values='size')/n plt.imshow(vis_data, cmap='Reds', interpolation='nearest')/n plt.xticks(range(8), range(1, 9))/n plt.yticks(range(8), range(1, 9))/n plt.colorbar()/n plt.show()/n /n/n 其中,vis_data 为 pyLDAvis 中的可视化数据,size 为主题强度值,x 和 y 为主题坐标,Category 为主题编号。/n/n以上步骤详细介绍了使用 Python 进行文本主题建模和可视化的过程,涵盖了分词、同义词合并、LDA 模型训练、主题一致性与困惑度计算、主题可视化、主题摘要生成等内容。您可以根据自己的实际需求对代码进行调整和修改。/n/n注意:/n/n* 本教程仅供参考,具体的代码实现可能需要根据您的实际数据和需求进行调整。/n* 请确保您已经安装了所有必要的库,例如 pandas、jieba、gensim、pyLDAvis 和 matplotlib。/n* 在运行代码之前,请将 'file.xlsx' 替换为您的实际 Excel 文件名。/n* 主题建模和可视化的效果取决于数据质量和模型参数,您可以尝试调整模型参数,例如主题数量、迭代次数等,以获得最佳结果。/n/n祝您成功!
原文地址: https://www.cveoy.top/t/topic/nE7C 著作权归作者所有。请勿转载和采集!