鱼C论坛

 找回密码
 立即注册
查看: 2195|回复: 10

有没有哪位好心人有做汉语文本LDA主题分析的代码呀,论坛里有,但是那是英文的。

[复制链接]
发表于 2023-4-1 16:29:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自己用chatgpt做了一个,啥用没有,虽然出了一个结果,但是根本不够看。主体数量确定、拟合度、可视化都不行

import os
import gensim
from gensim import corpora

# 设置文件夹路径
folder_path = 'C:\\Users\\11564\\Desktop\\实战'

# 读取文本文件
documents = []
for filename in os.listdir(folder_path):
    if filename.endswith('滑雪场.txt'):
        with open(os.path.join(folder_path, filename), 'r', encoding='utf-8') as f:
            documents.append(f.read())

# 分词和去除停用词
stopwords = []
with open('C:\\Users\\11564\\Desktop\\实战\\scu_stopwords.txt', 'r', encoding='utf-8') as f:
    stopwords = f.read().splitlines()
texts = [[word for word in document.split() if word not in stopwords] for document in documents]

# 构建词典和语料库
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]

# 执行LDA主题模型分析
lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=10)
lda_model.print_topics(num_topics=10, num_words=10)

# 输出结果到文件
output_file = 'C:\\Users\\11564\\Desktop\\实战\\output.txt'
with open(output_file, 'w', encoding='utf-8') as f:
    f.write(str(lda_model.print_topics(num_topics=10, num_words=10)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-1 16:45:00 | 显示全部楼层
import jieba
from gensim import corpora, models

# 示例文本
documents = [
    "这是一个关于政治的文章。",
    "这是一个关于经济的文章。",
    "这是一个关于科技的文章。",
    "这是一个关于体育的文章。",
    "这是一个关于艺术的文章。"
]

# 对文本进行分词
def tokenize(text):
    return [word for word in jieba.cut(text)]

# 对每个文本进行分词
tokenized_documents = [tokenize(doc) for doc in documents]

# 建立词典
dictionary = corpora.Dictionary(tokenized_documents)

# 建立语料库
corpus = [dictionary.doc2bow(doc) for doc in tokenized_documents]

# LDA主题分析
num_topics = 2  # 设定主题数量
lda_model = models.LdaModel(corpus, num_topics=num_topics, id2word=dictionary, passes=20)

# 输出主题
for i in range(num_topics):
    print(f"主题 {i + 1}:")
    print(lda_model.print_topic(i))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-2 10:36:39 | 显示全部楼层
可视化怎么做呀。我明明安装了pyldavis,在运行的时候一直提示我找不到,尝试了安装新版本的3.2.2也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-2 10:37:43 | 显示全部楼层

谢谢谢谢。可视化pyldavis安装了但是运行时报错找不到是咋回事呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-2 10:39:46 | 显示全部楼层
十里八乡俊后生 发表于 2023-4-2 10:37
谢谢谢谢。可视化pyldavis安装了但是运行时报错找不到是咋回事呢

你在pycharm运行的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-2 17:08:35 | 显示全部楼层
isdkz 发表于 2023-4-2 10:39
你在pycharm运行的?

在jupyter运行的。今天又发现,不光是ypldavis,lda2ve安装了也找不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-2 17:11:10 | 显示全部楼层
十里八乡俊后生 发表于 2023-4-2 17:08
在jupyter运行的。今天又发现,不光是ypldavis,lda2ve安装了也找不到


                               
登录/注册后可看大图


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-2 17:11:48 | 显示全部楼层
十里八乡俊后生 发表于 2023-4-2 17:08
在jupyter运行的。今天又发现,不光是ypldavis,lda2ve安装了也找不到

可能你使用的跟安装了模块的不是同一个python环境
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-2 17:14:43 | 显示全部楼层
十里八乡俊后生 发表于 2023-4-2 17:08
在jupyter运行的。今天又发现,不光是ypldavis,lda2ve安装了也找不到

我尝试按照找到C盘里的路径,复制到D盘朱皮特安装路径下,也不行

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-2 17:15:56 | 显示全部楼层
新代码:

import gensim
import os
from gensim.models import Lda2Vec
from gensim.models.ldamulticore import LdaMulticore
from gensim.models.word2vec import LineSentence
from gensim.utils import simple_preprocess
from gensim.parsing.preprocessing import STOPWORDS
from gensim.corpora import Dictionary
from gensim.models.coherencemodel import CoherenceModel
import pyLDAvis.gensim_models
import logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

# 定义读取文件路径
input_folder = "C:/Users/11564/Desktop/实战/滑雪场"
stopwords_file = "C:/Users/11564/Desktop/实战/scu_stopword.txt"

# 加载停用词表
with open(stopwords_file, 'r', encoding='utf-8') as f:
    stopwords = f.read().splitlines()

# 去除停用词和长度小于3的词语
def preprocess(text):
    result = []
    for token in simple_preprocess(text):
        if token not in stopwords and len(token) > 3:
            result.append(token)
    return result

# 读取文件
class TextIterator:
    def __init__(self, folder_path):
        self.folder_path = folder_path

    def __iter__(self):
        for file_name in os.listdir(self.folder_path):
            file_path = os.path.join(self.folder_path, file_name)
            for line in open(file_path, 'r', encoding='utf-8'):
                yield preprocess(line)

# 构建LDA2Vec模型
sentences = TextIterator(input_folder)
dictionary = Dictionary(sentences)
model = Lda2Vec(
    corpus=[dictionary.doc2bow(sent) for sent in sentences],
    num_topics=50,
    id2word=dictionary,
    chunksize=5000,
    passes=10,
    alpha=0.5,
    eta=0.5,
    iterations=200,
    random_state=42,
    batch_size=128,
    workers=4
)

# 保存模型
model.save("lda2vec.model")

# 计算模型的困惑度和一致性得分
perplexity = model.log_perplexity([dictionary.doc2bow(sent) for sent in sentences])
coh_score = CoherenceModel(model=model, texts=sentences, dictionary=dictionary, coherence='c_v').get_coherence()

# 可视化结果
vis_data = pyLDAvis.gensim_models.prepare(model, [dictionary.doc2bow(sent) for sent in sentences], dictionary)
pyLDAvis.show(vis_data)

# 展示主题和对应的词汇
for topic in model.topic_word_.T:
    words = ", ".join([model.id2word[idx] for idx in topic.argsort()[-5:]])
    print(words)

print("Perplexity: ", perplexity)
print("Coherence score: ", coh_score)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-2 17:33:55 | 显示全部楼层
isdkz 发表于 2023-4-2 17:11
可能你使用的跟安装了模块的不是同一个python环境

我用anaconda的命令安装也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表