【大数据】JSON文件解析,对其文本聚类/情感分析

目录

引言

JSON(JavaScript Object Notation)

文本聚类K-means

基本步骤

优点

缺点

实际应用

情感分析

核心任务与应用场景

算法原理与技术

json数据集

情感分析实现

文本聚类实现


引言

JSON(JavaScript Object Notation)

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON简洁和清晰的层次结构使其易于人阅读和编写,同时也便于机器解析和生成,从而有效地提升了网络传输效率。JSON作为数据传输的格式,具有以下几个显著的优点:

  • 轻量级:JSON使用文本表示数据,其体积相较于其他数据格式(如XML)更小,因此更节省带宽和存储空间。
  • 易于阅读:JSON的格式清晰,易于理解,即便不是程序员也能看懂其结构。
  • 易于解析:JSON的数据格式与JavaScript中的对象和数组相似,因此可以很方便地在JavaScript中被解析和使用。
  • 广泛支持:JSON已经被多种编程语言所支持,包括Java、Python、C#、JavaScript等,这使得它成为数据交换的通用语言。

文本聚类K-means

K-means 聚类是一种非常流行的聚类算法,它属于无监督学习算法的一种。无监督学习意味着算法在训练过程中不依赖于数据的标签或类别信息,而是根据数据本身的特征来发现数据中的结构或模式。K-means 聚类算法的主要目的是将数据点划分为 K 个簇(Cluster),使得每个簇内的点尽可能相似,而不同簇之间的点尽可能不同。

基本步骤
  1. 初始化
    • 选择 K 个点作为初始的簇中心(Centroid)。这些点可以是随机选择的,也可以是根据某种启发式方法选择的。
  2. 分配簇
    • 对于数据集中的每一个点,根据其与各个簇中心的距离,将该点分配给最近的簇中心所属的簇。这通常是通过计算欧氏距离来完成的。
  3. 更新簇中心
    • 对于每个簇,重新计算其簇中心。新的簇中心通常是该簇内所有点的均值(对于欧氏距离而言)。
  4. 重复迭代
    • 重复步骤 2 和步骤 3,直到簇中心不再发生显著变化,或者达到预设的迭代次数。
  5. 输出结果
    • 算法结束后,每个点都被分配到了一个簇,同时我们也得到了 K 个簇中心。
优点
  • 原理简单,易于实现。
  • 收敛速度快,适用于大规模数据集。
  • 聚类效果通常较好,尤其是在簇内数据分布比较紧密、簇间差异较大的情况下。
缺点
  • 需要预先指定簇的数量 K,这个值的选择往往依赖于经验或多次试验。
  • 对初始簇中心的选择敏感,不同的初始簇中心可能导致不同的聚类结果。
  • 对于非球形簇或大小差异很大的簇,聚类效果可能不佳。
  • 对于异常值(Outlier)和噪声数据敏感。
实际应用

K-means 聚类算法广泛应用于数据挖掘、图像处理、市场细分、文档聚类等领域。例如,在市场营销中,可以使用 K-means 算法对客户进行聚类,以便更好地理解客户需求,制定更有针对性的营销策略。在图像处理中,K-means 算法可以用于图像分割,将图像中的像素点聚类成不同的区域,从而实现图像的简化或特征提取。


情感分析

情感分析,也被称为情感检测或情感识别,是一种自然语言处理(NLP)技术,旨在从文本数据中自动解释和分类情感倾向,通常是积极、消极或中立。以下是情感分析的详细介绍:

  • 定义:情感分析根据文本数据(如书面评论、社交媒体帖子等)自动解释和分类情感基调。它是NLP的一个分支,利用机器学习或深度学习技术来分析和分类文本数据的情感倾向。
  • 背景:随着社交媒体和在线评论的普及,人们越来越依赖这些渠道来表达对产品、服务或事件的情感。情感分析技术应运而生,帮助企业、组织和个人更好地理解公众的情感倾向。
核心任务与应用场景
  • 核心任务
    • 情感标记:将文本分为积极、消极或中性。
    • 情感强度:评估情感强度,如轻度积极、中度积极、轻度消极、中度消极等。
    • 情感目标:识别文本中的情感目标,如对人、对品牌、对事件等。
    • 情感搭配:识别文本中的情感搭配,如“非常好”、“很棒”、“太糟糕”等。
  • 应用场景
    • 社交媒体:分析用户在社交媒体上的评论,了解用户对品牌、产品或服务的情感倾向。
    • 电子邮件:分析用户的电子邮件,了解用户对产品或服务的满意度。
    • 评论与反馈:分析用户对电影、书籍、游戏等的评论,了解用户的喜好和情感反应。
    • 市场调查:分析用户对新产品或服务的反馈,了解市场需求和情感倾向。
    • 政治运动:分析公众对政治政策和候选人的情感反应,了解公众的需求和期望。
算法原理与技术
  • 文本处理:包括文本清洗、分词、标记化和词性标注等步骤,以减少噪声和提取有效特征。
  • 特征提取:将文本转换为机器可以理解的格式,主要方法包括词袋模型(Bag of Words)、TF-IDF(Term Frequency-Inverse Document Frequency)、词嵌入(Word Embeddings)等。
  • 模型训练:使用训练数据集训练机器学习模型,常见的模型包括逻辑回归(Logistic Regression)、支持向量机(SVM)、决策树(Decision Trees)、随机森林(Random Forests)以及深度学习模型(如CNN、RNN、Transformer等)。
  • 模型评估:使用准确率、精度、召回率、F1分数等指标评估模型性能,并根据评估结果进行模型优化和调参。

json数据集

微博评论数据weibo_comment.json,包含微博上的评论及其回复的详细信息,包括评论者和回复者的个人信息、评论和回复的内容、时间戳等。


情感分析实现

总结来说,main 函数通过加载停用词、读取JSON文件、解析评论内容、过滤停用词、重组文本以及进行情感分析,实现了对一系列评论的情感倾向评估,并将评估结果以分数的形式打印出来。这一过程有助于理解和分析大量文本数据的情感倾向,对于舆情监测、产品反馈分析等领域具有重要的应用价值。

def analyze_sentiment(text):if not text:return 0s = SnowNLP(text)# 返回情感倾向分数,范围在[0, 1]之间,0表示消极,1表示积极return s.sentimentsdef main(json_filepath, stopwords_filepath):# 加载停用词stopwords = load_stopwords(stopwords_filepath)# 读取JSON文件,逐行解析with open(json_filepath, 'r', encoding='utf-8') as f:for line in f:if not line.strip():continue# 解析每一行为一个JSON对象item = json.loads(line)# 评论内容在'comment'键下comment_text = item.get('text', '')# 分词并过滤停用词filtered_words = tokenize_and_filter(comment_text, stopwords)combined_text = ' '.join(filtered_words)# 进行情感分析sentiment_score = analyze_sentiment(combined_text)# 根据sentiment_score决定评论的情感倾向print(f"Sentiment Score: {sentiment_score}")

结果


文本聚类实现

加载数据、处理文本、构建TF-IDF矩阵、进行聚类以及可视化聚类结果。

完整代码

import json
import jieba
from collections import Counter
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA# 加载停用词列表
def load_stopwords(filepath):with open(filepath, 'r', encoding='gb18030') as f:return [line.strip() for line in f.readlines()]def tokenize_and_filter(text, stopwords):words = jieba.cut(text)return ' '.join([word for word in words if word not in stopwords and len(word) > 1])# 构建TF-IDF矩阵
def build_tfidf_matrix(texts, stopwords):vectorizer = TfidfVectorizer(stop_words=stopwords, max_df=0.5, min_df=2, use_idf=False)X = vectorizer.fit_transform(texts)return X, vectorizer# 聚类文本
def cluster_texts(texts, stopwords, n_clusters):X, vectorizer = build_tfidf_matrix(texts, stopwords)kmeans = KMeans(n_clusters=n_clusters, random_state=42).fit(X)return kmeans.labels_, vectorizer# 可视化聚类结果
def visualize_clusters(X, labels, vectorizer):# 使用PCA降维pca = PCA(n_components=2)X_pca = pca.fit_transform(X.toarray())# 绘制聚类结果plt.figure(figsize=(10, 8))colors = ['red', 'blue', 'green', 'yellow', 'purple', 'orange', 'brown', 'gray', 'pink', 'cyan']n_colors = min(len(colors), len(set(labels)))color_map = {i: colors[i % n_colors] for i in set(labels)}for i, color in color_map.items():plt.scatter(X_pca[labels == i, 0], X_pca[labels == i, 1], label=f'Cluster {i}', color=color)plt.title('Visualization of Text Clusters')plt.xlabel('PCA Feature 1')plt.ylabel('PCA Feature 2')plt.legend()plt.show()#主程序
def main(json_filepath, stopwords_filepath, n_clusters):# 加载停用词stopwords = load_stopwords(stopwords_filepath)# 存储所有评论文本all_comments = []# 读取JSON文件,逐行解析with open(json_filepath, 'r', encoding='utf-8') as f:for line in f:# 跳过空行if not line.strip():continue# 解析每一行为一个JSON对象item = json.loads(line)# 评论内容在'text'键下comment_text = item.get('text', '')# 存储评论文本all_comments.append(comment_text)# 分词并过滤停用词,然后将单词列表组合成字符串filtered_comments = [tokenize_and_filter(comment, stopwords) for comment in all_comments]# 聚类评论labels, vectorizer = cluster_texts(filtered_comments, stopwords, n_clusters)# 可视化聚类结果X, _ = build_tfidf_matrix(filtered_comments, stopwords)visualize_clusters(X, labels, vectorizer)# 分成3个聚类
main('weibo_comment.json', 'stopwords.txt', 3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从系统层面认识Linux及mysql中的多表查询

为什么计算机起始时间是1970年1月1日 为什么计算机起始时间是1970年1月1日-CSDN博客https://blog.csdn.net/csdn_kou/article/details/81535452 date "%Y-%m-%d %H:%M:%S" 查看日期 sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 在数据层面 CPU不…

Nacos Derby 远程命令执行漏洞(QVD-2024-26473)

0x01 产品简介 Nacos 是一个功能强大的服务注册与发现、配置管理平台,为微服务架构和云原生应用提供了重要的基础设施支持。 0x02 漏洞概述 由于Alibaba Nacos部分版本中derby数据库默认可以未授权访问,恶意攻击者利用此漏洞可以未授权执行SQL语句,最终导致任意代码执行。…

第三届智能机械与人机交互技术学术会议(IHCIT 2024)

【北航主办丨本届SPIE独立出版丨已确认ISSN号】 第三届智能机械与人机交互技术学术会议(IHCIT 2024) 2024 3rd International Conference on Intelligent Mechanical and Human-Computer Interaction Technology 2024年7月27日----中国杭州&#xff0…

敲详细的springframework-amqp-rabbit源码解析

看源码时将RabbitMQ的springframework-amqp-rabbit和spring-rabbit的一套区分开,springboot是基于RabbitMQ的Java客户端建立了简便易用的框架。 springboot的框架下相对更多地使用消费者Consumer和监听器Listener的概念,这两个概念不注意区分容易混淆。…

Vatee万腾平台:智慧金融的创新引擎,驱动金融服务升级

在数字化浪潮席卷全球的今天,金融行业正经历着前所未有的变革与升级。Vatee万腾平台,作为智慧金融领域的创新先锋,正以其独特的技术优势、前瞻的战略布局和卓越的服务能力,成为推动金融服务升级的重要引擎。 智慧金融:…

一个关于STM32的DAC输出的遗忘点

众所周知熟练使用HAL库可以帮你解决不少stm32的开发难题,但是是谁让你陷入了这些难题,别问。 如上图所示,正常初始化这个模块后生成代码如下图所示; * DAC init function */ void MX_DAC_Init(void) {/* USER CODE BEGIN DAC_Ini…

2024年计算机软考中级【硬件工程师】面试题目汇总(附答案)

硬件工程师面试题汇总分析 1、解释一下同步电路和异步电路 解题思路 同步电路和异步电路是指同步时序电路和异步时序电路。由于存储电路中触发器的动作特点不同,因此可以把时序电路分为同步时序电路和异步时序电路两种。同步时序电路所有的触发器状态的变化都是在同…

【单目3D检测】smoke(1):模型方案详解

纵目发表的这篇单目3D目标检测论文不同于以往用2D预选框建立3D信息,而是采取直接回归3D信息,这种思路简单又高效,并不需要复杂的前后处理,而且是一种one stage方法,对于实际业务部署也很友好。 题目:SMOKE&…

Java 中的异常

异常:就是出现的问题。 在Java中异常被当成对象进行处理,所有的异常类都继承于Throwable类,如果Java提供的异常类并不能满足需求,用户还可以自己定义一个异常类。 下面是异常体系结构: Throwable又分成了Error和Exce…

vmware配置centos+配置静态ip联网+更换镜像

centos7配置参考【实战】VMware17虚拟机以及Centos7详细安装教程-CSDN博客 ip配置步骤: 先更改编辑虚拟网络编辑器中的内容 就按照还原默认设置来,设定后就是以上内容,然后一定要记住子网ip和子网掩码 接下来就是NAT设置: 网关…

PE安装系统

前些天客户的电脑坏了,需要重装系统,我们的恢复光盘安装的时候,由于主板的原因,导致进入windows安装界面,鼠标键盘没有响应,自然也就无法正常安装了. 那我们只能换个方法,PE安装试试看,那么我们需要做哪些准备工作呢? 1.制作PE启动盘,网上很多制作工具,如""U启动,…

关于 Docker Registry (镜像仓库)

什么是镜像仓库 概念 镜像仓库(Docker Registry)负责存储、管理和分发镜像,并提供了登录认证能力,建立了仓库的索引。 镜像仓库管理多个 Repository,Repository 通过命名来区分。每个 Repository 包含一个或多个镜像…

P1-AI产品经理--九五小庞

产品经理的定位 AI基于现有业务挖掘AI应用场景,服务提供商选择及算法定制等,配合已有产品完成整体产品工工资基于从事医疗行业的考虑,我们走的应该是AI产品经理(软件型) AI产品经理(行业型) AI…

Python爬虫(1) --基础知识

爬虫 爬虫是什么? spider 是一种模仿浏览器上网过程的一种程序,可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…

通过HTML/CSS 实现各类进度条的功能。

需求:我们在开发中会遇到使用各式各样的进度条,因为当前插件里面进度条各式各样的,为了方便我们定制化的开发和方便修改样式,我们这里使用HTML和CSS样式来进行开发进度条功能。 通过本文学习我们会明白如何使用 HTML/CSS 创建各种…

复旦微核心板:基于复旦微FMQL45T900 全国产化核心板

近期开发的一款搭载复旦微FMQL45T900的全国产核心板。FMQL45T900这款是一款高度集成的国产化芯片,它在一个单芯片中融合了多种功能,特别强调的是它的国产化特性,即其设计、制造和知识产权完全属于中国。 处理器性能: 处理器架构&a…

Python和C++行人轨迹预推算和空间机器人多传感融合双图算法模型

🎯要点 🎯双图神经网络模型:最大后验推理和线性纠错码解码器 | 🎯重复结构和过约束问题超图推理模型 | 🎯无向图模型变量概率计算、和积消息传播图结构计算、隐马尔可夫模型图结构计算、矩阵图结构计算、图结构学习 |…

QT--多页面、定时器和日期时间数据

多页面 widget.ui 负责实现一个页面; mian.cpp创建窗体对象,并监控上面的事件 窗口的显示和隐藏: 一个窗体,比如logpage widget,继承QWidget QWidget::show(); 显示该窗体 QWidget::hide(); 隐藏该窗体 页面间通信采用在main.cpp中创建connect槽函数。 代码如下 //main.c…

【ML练习】决策树

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、决策树算法概述 二、代码实现 代码目标:我们希望通过鸢尾花数据,训练一个决策树模型,之后应用该模型,可以…

STM32 CAN外设(基于STMF103C8T6)

STM32内置bxCAN外设(CAN控制器),支持CAN2.0A和2.0B,可以自动发送CAN报文和按照过滤器自动接收指定CAN报文,程序只需处理报文数据而无需关注总线的电平细节 波特率最高可达1兆位/秒3个可配置优先级的发送邮箱2个3级深度的接…