代码拉取完成,页面将自动刷新
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import jieba
# 读取dat文件方法,用于读取停止词
def read_dat(file_name):
fp = open(file_name, "r", encoding="utf-8")
content_lines = fp.readlines()
fp.close()
# 去除行末的换行符,否则会在停用词匹配的过程中产生干扰
for i in range(len(content_lines)):
content_lines[i] = content_lines[i].rstrip("\n")
return content_lines
# 按行读取样本文件
with open(r'comment.txt') as f1:
documents = f1.readlines()
# 写死的测试样本
# documents = ["舆情监测的作用,舆情监测是指整合互联网信息采集技术及信息智能处理技术,通过对互联网海量信息自动抓取、自动分类聚类、主题检测、专题聚焦",
# "实现用户的网络舆情监测和新闻专题追踪等信息需求,形成简报、报告、图表等分析结果",
# "公共危机事件爆发时,犹如以石击水,相关信息在短时间内迅速传播,引起群众的广泛关注",
# "甚至影响到群众对党和政府的信任,影响到消费者对某一企业品牌的认同"]
# 读取停止词文件,分词过程遇到停止词会过滤
stopword_file = 'stopwords.dat'
stopwords = read_dat(stopword_file)
# 使用jieba进行分词TfidfVectorizer
sent_words = [list(jieba.cut(sent0, cut_all=False)) for sent0 in documents if sent0 not in stopwords]
splitDocuments = [" ".join(sent0) for sent0 in sent_words]
print(splitDocuments)
# 使用TfidfVectorizer矢量化器进行建模
vectorizer = TfidfVectorizer(token_pattern=r"(?u)\b\w+\b", max_df=0.6)
data = vectorizer.fit_transform(splitDocuments)
# 训练集分类的数量
true_k = 5
# 使用kmeans进行样本训练,max_iter和n_init的参数可调
# n_init : int, default=10 使用不同质心种子运行 k-means 算法的次数。就惯性而言,最终结果将是 n_init 连续运行的最佳输出。
# max_iter : int, default=300 k-means 算法单次运行的最大迭代次数。
clustering_model = KMeans(n_clusters=true_k,
init='k-means++',
max_iter=300, n_init=1)
clustering_model.fit(data)
# 输出结果
print("每个集群的热门词:")
# 集群词排序
sorted_centroids = clustering_model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
print("Cluster %d:" % i, end='')
count = 0
for ind in sorted_centroids[i, :100]:
# 过滤掉长度为1的集群词,以提高预测精确度
if len(terms[ind]) == 2:
print(' %s' % terms[ind], end='')
count = count + 1
if count > 10:
break
print()
# 样本倾向性预测,可以根据建模进行后续样本的预测
# print()
# print("预测:")
# new_doc = ["“既然奋斗无出路,干脆躺平做咸鱼”,近年来以三和大神和“窃格瓦拉”的走红为代表,一部分人妄图通过逃避工作来实现逃避剥削、走出内卷的目的。"]
# sent_words = [list(jieba.cut(sent0)) for sent0 in new_doc]
# splitDocuments = [" ".join(sent0) for sent0 in sent_words]
# print(splitDocuments)
# Y = vectorizer.transform(splitDocuments)
# prediction = clustering_model.predict(Y)
# print(prediction)
#
# new_doc = ["内卷的首要条件,就是有足够多相同目标的人。资本家对内卷最大的贡献,就是靠扩大欲望,把很多人集中到鄙视链的上升路径中。"]
# sent_words = [list(jieba.cut(sent0)) for sent0 in new_doc]
# splitDocuments = [" ".join(sent0) for sent0 in sent_words]
# print(splitDocuments)
# Y = vectorizer.transform(splitDocuments)
# prediction = clustering_model.predict(Y)
# print(prediction)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。