python lda_[python] lda

from sklearn.feature_extraction.text import CountVectorizer

import jieba

import time

'''

【程序主要输入参数】

1. n_topics: 主题个数,将文本聚类成几个类别

2. n_iter:迭代次数

【程序主要输出】

1. doc_topic分布:每篇文本对应的topic的概率分布

2. topic-word分布:每个topic内 词的概率分布

'''

'''

用户和节点的topic组及其概率分布,topic内词及其概率分布

对于用户而言:每行文本是用户的微博拼接而成的长文本

对于节点而言:每个文本是节点的所有文本拼接而成的长文本

'''

# topic_num 默认50,即 n_topics 默认50

# n_iter 默认50

def batching(corpus_lines, topic_num=50):

# 原始语料库中的文本

corpus = []

print("corpus_lines")

print(corpus_lines)

for line in corpus_lines:

# 文本切片得到词组

seg_list = jieba.cut(line, cut_all=True)

# 重新将词组拼接成line,其中,每个词之间用" "间隔开。

line = ""

for seg in seg_list:

line = line + " " + str(seg)

# 手动调试位:line

# print(line)

# strip() 方法 参数为空时去除字符串首尾空格

corpus.append(line.strip())

print(corpus)

# CountVectorizer()方法是 sklearn 中的特征数值计算类

# 将文本中的词语转换为词频矩阵 矩阵元素a[i][j] 表示j词在i文本下的词频

vectorizer = CountVectorizer()

print(vectorizer)

try:

# fit_transform() 的输入格式:["小明 小王","阿猫 阿狗 阿强", ... ,"张三"]

frequency_matrix = vectorizer.fit_transform(corpus) # frequency_matrix 词频矩阵

# 正常操作不会出现下边这种ValueError的情况

except ValueError:

# ValueError 出错记录记入 error.log 日志文件

errorlog = open("error.log", "w")

localtime = time.asctime(time.localtime(time.time()))

# 手动调试位:异常日志记录

# print("%s \n ValueError: corpus = %s \n ----------------" %localtime, corpus)

errorlog.write(str(localtime) + " \n ValueError: corpus = " + str(corpus) + "\n ----------------")

# 修正corpus,重新进行词频矩阵构造

corpus = ["错误: 文本内容为空"]

frequency_matrix = vectorizer.fit_transform(corpus) # frequency_matrix 词频矩阵

# analyzer 用于分词,把带有空格的文本依据空格分成词组

# analyze = vectorizer.build_analyzer()

word = vectorizer.get_feature_names() # 返回文本的所有词汇

# 手动调试位:词频矩阵 frequency_matrix

# print(frequency_matrix)

# 单一文本的词频分布

weight = frequency_matrix.toarray()

# LDA

import numpy as np

import lda

model = lda.LDA(n_topics=topic_num, n_iter=50, random_state=1) # 模型的初始化 n_iter 是 迭代次数

model.fit(np.asarray(weight)) # model.fit_transform(X) is also available, 初始化之后只需要调入文本的词频矩阵

# type(doc_topic) ==

doc_topic = model.doc_topic_ # 一行代表一个doc,记录该doc属于每个topic的概率

# type(topic_word) ==

topic_word = model.topic_word_ # 一行代表一个topic, 记录该topic中每个词的概率分布

# word 文本分词集合

# doc_topic.tolist() topic 在某一 doc 中的概率分布

# topic_word.tolist() word 在某一 topic 中的概率分布

# tolist() ndarray --> 多维 list

return word, doc_topic.tolist(), topic_word.tolist()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值