https://colab.research.google.com/drive/1F-1Ej7T2xnUKXSmDPjjOChNbBTvQlpnM?usp=sharing

考试

https://colab.research.google.com/drive/1hSRxzFL9cx7PYrHYZeEnT3jRSn8LmQcx?usp=sharing

第一题要求

  1. 聚类选定的新闻数据。此时,请考虑以下事项。(2分:每项0.5分)
  • 创建并应用您自己的停用词处理列表。(0.5 分)
  • 执行内聚聚类时,请使用 Ward 技术以外的技术。(0.5 分)
  • 使用轮廓分数来确定理想的簇数。(0.5 分)
  • 使用散点图可视化聚类结果。(PCA 或 TSNE)(0.5 分)

你今天会学到什么

1.文档聚类

2.主题建模

2.主题建模

主题建模是使用表示文档中潜在主题的词。

它是一种自然语言处理技术,可以自动选择和呈现文档中的文档。

给定大量文档,很难找出这些文档涵盖的主题。

这是一个有用的技能。

但是,需要一个人在分析时判断目标文档分为多少个主题

另外,主题模型呈现的主题并没有作为完美主题提供,

由于它是从文档中提取的关键词,因此主题的解释留给了人类。

主题建模基于长文档而不是短文档(句子),例如推文或评论。

他们往往会给出有意义的结果。

主题模型也对应词袋模型,因为它不考虑词的顺序。

在刚刚学习的聚类中,一个文档被归为一个簇。

在主题建模中,一个文档可以有多个主题。

在这种实践中,各种主题建模技术之一

让我们看看一种称为Latent Dirichlet Allocation (LDA)的技术

为此,使用了一个名为gensim的主题建模 Python 库,

为了可视化结果,我们将使用一个名为pyLDAvis的库。

  • gensim:用于构建主题模型的 Python 库

models.ldamodel – Latent Dirichlet Allocation — gensim

  • pyLDAvis:用于可视化主题模型结果的 Python 库

Welcome to pyLDAvis’s documentation! — pyLDAvis 2.1.2 documentation

在主题建模实践中,对200篇经济文章进行韩文预处理后,

让我们创建一个主题模型并可视化结果是什么。

您还将学习如何确定主题的数量。

代码解析

import warnings
warnings.filterwarnings("ignore")
warnings.filterwarnings("ignore", category=DeprecationWarning)

import glob
news_file = []
for file in glob.glob('/content/econ_news/*NewsData.txt'):
# print(file)
news_file.append(file)
news_file.sort()
news_file

from konlpy.tag import Okt
okt = Okt()
stopwords = ['가가', '가지', '각각', '거나', '게다가', '경우', '관련', '그동안', '기자', '다른',
'다만', '다시', '다음', '당시', '대상', '대신', '대해', '더욱', '따라서', '때문',
'또한', '라며', '로부터', '로서', '만약', '만큼', '면서', '모두', '모든', '반면',
'별로', '사이', '생각', '앞서', '앵커', '얘기', '여기', '여부', '우리', '위해',
'이란', '이번', '이후', '일부', '작년', '정도', '지금', '지난', '지난달', '지난해',
'최근', '통해', '현재']
news_raw_texts = [] # 뉴스 기시 본문을 담는 리스트
news_nouns = [] # 명사 리스트 획득
news_data = [] # tfidf.vectorizer에 입력할 데이터
for file in news_file:
with open(file, 'r') as f:
news_text = f.read()
news_raw_texts.append(news_text)
noun_list = okt.nouns(news_text)
cleaned_nouns = [n for n in noun_list if (len(n) > 1) and (n not in stopwords)] # 한 글자로 된 명사를 제거 & stopwords 제거
news_data.append(' '.join(cleaned_nouns))
news_nouns.append(cleaned_nouns)
len(news_nouns)

import glob

news_file = [] # 存储经济新闻文本文件名的列表
for file in glob.glob('/content/econ_news/*NewsData.txt'): # 获取所有以 "NewsData.txt"结尾的文件的文件名
news_file.append(file)

#---

from konlpy.tag import Okt

okt = Okt() # 初始化Konlpy的Okt分词器

# 设置需要去除的停用词
stopwords = ['가가', '가지', '각각', '거나', '게다가', '경우', '관련', '그동안', '기자', '다른',
'다만', '다시', '다음', '당시', '대상', '대신', '대해', '더욱', '따라서', '때문',
'또한', '라며', '로부터', '로서', '만약', '만큼', '면서', '모두', '모든', '반면',
'별로', '사이', '생각', '앞서', '앵커', '얘기', '여기', '여부', '우리', '위해',
'이란', '이번', '이후', '일부', '작년', '정도', '지금', '지난', '지난달', '지난해',
'최근', '통해', '현재']

news_raw_texts = [] # 存储新闻文本的列表
news_nouns = [] # 存储新闻文本中提取出的名词的列表
news_data = [] # 存储将新闻文本中提取出的名词转化为字符串的列表,以便传递给tfidf.vectorizer

# 遍历每一个新闻文件
for file in news_file:
with open(file, 'r') as f:
news_text = f.read() # 读取新闻文本
news_raw_texts.append(news_text) # 将新闻文本存入news_raw_texts列表中
noun_list = okt.nouns(news_text) # 使用Okt分词器对新闻文本进行分词,并只保留名词
cleaned_nouns = [n for n in noun_list if (len(n) > 1) and (n not in stopwords)] # 去除长度为1的名词和停用词
news_data.append(' '.join(cleaned_nouns)) # 将处理后的名词列表转化为以空格分隔的字符串,以便传递给tfidf.vectorizer
news_nouns.append(cleaned_nouns) # 将处理后的名词列表存入news_nouns列表中

#---

corpora语料库

from gensim import corpora
dictionary = corpora.Dictionary(news_nouns) # 使用gensim库的corpora模块创建一个词典
corpus = [dictionary.doc2bow(text) for text in news_nouns] #
这段代码的作用是使用gensim库的corpora模块将文档中的名词列表news_nouns转换为字典dictionary,然后使用该字典 将语料库corpus创建出来。
在这里,corpus是一个包含每个文档的 单词索引和词频信息的列表的列表。例如,corpus[1]是一个包含第二篇新闻单词索引和词频信息的列表。
因此,print(corpus[1])的代码输出了第二篇新闻的索引和词频信息。在Python中,索引从0开始,因此第一篇文档的索引是0。

PCA进行降维

以下是使用散点图可视化聚类结果的示例代码,其中使用了PCA进行降维:

import matplotlib.pyplot as plt

from sklearn.decomposition import PCA

# 假设有聚类结果的数据集或特征集

cluster_data = ...

# 使用PCA进行降维

pca = PCA(n_components=2)

reduced_features = pca.fit_transform(cluster_data)

# 假设每个数据点对应的聚类标签为labels

labels = ...

# 绘制散点图

plt.scatter(reduced_features[:, 0], reduced_features[:, 1], c=labels)

plt.xlabel("Component 1")

plt.ylabel("Component 2")

plt.title("Clustering Results")

plt.show()

在这段代码中,首先导入matplotlib.pyplotsklearn.decomposition.PCA。然后,假设有一个聚类结果的数据集或特征集存储在cluster_data中。接下来,使用PCA进行降维,将数据集降低到2维。通过创建PCA对象并调用fit_transform方法,将cluster_data转换为降维后的特征矩阵reduced_features

假设每个数据点对应的聚类标签存储在labels中。最后,使用plt.scatter绘制散点图,将降维后的特征矩阵的第一维和第二维作为横纵坐标,通过指定c参数为labels,将不同聚类标签的数据点着色。

请注意,在使用此代码之前,需要根据实际情况提供合适的数据集或特征集,并根据需要选择PCA或TSNE进行降维。

可用于分析舆情主题,自然语言处理,非常高级

主题建模-corpora语料库-PCA进行降维相关推荐

  1. 把蛋糕拍扁:t-SNE降维和文本主题建模可视化实现

    前言 聚类算法的可视化,很美,t-SNE是其中一个很方便的工具,那么关于t-SNE的算法细节内容呢不是本文的重点,如果有需要可以去百度.本文没有选择mnist数据集进行实现,因为sklearn官网已经 ...

  2. 【自然语言处理】主题建模:BERTopic(实战篇)

    主题建模:BERTopic(实战篇) BERTopic 是基于深度学习的一种主题建模方法. 2018 2018 2018 年底, D e v l i n e t a l . Devlin\ et\ a ...

  3. 【自然语言处理】不同策略的主题建模方法比较

    不同策略的主题建模方法比较 本文将介绍利用 LSA.pLSA.LDA.NMF.BERTopic.Top2Vec 这六种策略进行主题建模之间的比较. 1.简介 在自然语言处理(NLP)中,主题建模一词包 ...

  4. 独家 | 使用Python的LDA主题建模(附链接)

    作者:Kamil Polak翻译:刘思婧 校对:孙韬淳本文约2700字,建议阅读5分钟本文为大家介绍了主题建模的概念.LDA算法的原理,示例了如何使用Python建立一个基础的LDA主题模型,并使用p ...

  5. 一文读懂如何用LSA、PSLA、LDA和lda2vec进行主题建模

    选自 Medium,作者:Joyce X,机器之心编译. 本文是一篇关于主题建模及其相关技术的综述.文中介绍了四种最流行的技术,用于探讨主题建模,它们分别是:LSA.pLSA.LDA,以及最新的.基于 ...

  6. 「NLP入门系列」9. 文本摘要和主题建模

    来源 | Natural Language Processing for Beginners 作者 | AI Publishing 翻译 | 悉尼没睡醒 校对 | gongyouliu 编辑 | au ...

  7. 【自然语言处理】主题建模评估:连贯性分数(Coherence Score)

    主题建模评估:连贯性分数(Coherence Score) 1.主题连贯性分数 主题连贯性分数(Coherence Score)是一种客观的衡量标准,它基于语言学的分布假设:具有相似含义的词往往出现在 ...

  8. 如何使用Python对中文文档进行可视化的主题建模?

    主题建模是一种无监督的机器学习方法,它帮助我们发现文档(语料库)中隐藏的语义结构,它使我们能够快速的发现文档中所包含的主题. 主题模型可以应用于推荐系统和论坛中的帖子自动加注标签等这样的应用中.Lat ...

  9. 独家 | 利用Python实现主题建模和LDA 算法(附链接)

    作者:Susan Li翻译:陈之炎校对:陈汉青本文约1900字,建议阅读5分钟在这篇文章,我们将LDA应用于一组文档,并将文档按照主题分类. 标签:LDA 算法 主题建模是一种用于找出文档集合中抽象& ...

最新文章

  1. 这可能是第二好的自定义 View 教程之属性动画
  2. 解决 C3P0 中文乱码问题
  3. CLR查找和加载程序集的方式(二) 流程图
  4. (六)python3 只需3小时带你轻松入门——循环
  5. Kingsoft AntiVirus(金山毒霸) and av-comparatives organization
  6. 虚拟机Linux(Centos)上用户密码忘记了怎么办?
  7. KeyTool生成证书链及使用
  8. synaptics触摸板_使用Dell Synaptics触摸板修复Firefox滚动问题
  9. (据说是)鏼爷和吴凯路爷爷出的NOIP模拟神题集锦
  10. 加个ing是什么意思_ing是什么意思?
  11. 嵌入式UWB定位测距设备开发实战(4)硬件之元器件选型
  12. VPX-M1 3U VPX 刀片计算机产品
  13. cad怎么画立体图形教学_CAD怎么画立体图,手把手教你画三维图形
  14. Xilinx Vitis HLS教程1--Vitis HLS概述[01/12]
  15. 基础语法和变量day2学习内容
  16. 康拓排列的自我总结--以及全排列的递归非递归算法
  17. 数据库原理与应用笔记(一):数据库绪论
  18. 021年全球拉伸薄膜机械收入大约849.9百万美元,预计2028年达到1209.4百万美元
  19. 何谓“超人”?——尼采哲学探讨之二
  20. Kettle Could not initialize class org.apache.batik.bridge.CursorManager

热门文章

  1. java对象转xml文件
  2. SF-60/385/4PY智能浪涌保护器 带遥信功能 四川 重庆项目大力推荐应用 带通讯 上防雷系统平台
  3. drippingblues-靶机渗透
  4. 云服务器修改虚拟内存,云服务器可以设置虚拟内存
  5. php学生考勤管理毕业设计源码080900
  6. RSA加密算法讲解及C++实现
  7. uniapp 添加本地文件日志 并增加防抖(防止重复写入被覆盖)
  8. Leecode101_isSymmetric
  9. 11-有符号数和无符号数
  10. Xshell安装与使用