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

news2024/9/19 7:36:44

目录

引言

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 0
    s = SnowNLP(text)
    # 返回情感倾向分数,范围在[0, 1]之间,0表示消极,1表示积极
    return s.sentiments

def 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.coloradmin.cn/o/1937550.html

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

相关文章

AIoTedge 智能边缘物联网平台

AIoTedge智能边缘物联网平台是一个创新的边云协同架构,它为智能设备和系统提供了强大的数据处理和智能决策能力。这个平台的核心优势在于其边云协同架构设计,它优化了数据处理速度,提高了系统的可靠性和灵活性,适用于多种场景&…

华为OD机考题(HJ61 放苹果)

前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。 描述 把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? 注意:如果有7个苹果和3…

uniapp bug解决:uniapp文件查找失败:‘uview-ui‘ at main.js:14

文章目录 报错内容解决方法main.js 文件中 uView 主 JS 库引入 uView 的全局 SCSS 主题文件内容修改引入 uView 基础样式内容修改配置 easycom 内容修改 报错内容 10:50:51.795 文件查找失败:uview-ui at main.js:14 10:59:39.570 正在差量编译... 10:59:43.213 文…

【Jmeter】记录一次Jmeter实战测试

Jmeter实战 1、需求2、实现2.1、新建线程组2.2、导入参数2.3、新建HTTP请求2.4、添加监听器2.5、结果 1、需求 查询某个接口在高并发场景下的响应时间(loadtime),需求需要响应在50ms以内,接下来用Jmeter测试一下 Jmeter安装见文章《Jemeter安装教程&am…

[集成学习]基于python的Stacking分类模型的客户购买意愿分类预测

1 导入必要的库 import pandas as pd import numpy as np import missingno as msno import matplotlib.pyplot as plt from matplotlib import rcParams import seaborn as sns from sklearn.metrics import roc_curve, auc from sklearn.linear_model import LogisticRegres…

C++ | Leetcode C++题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m matrix.size(), n matrix[0].size();int x 0, y n - 1;while (x < m && y > 0) {if (matrix[x][y] targ…

Linux--实现线程池(万字详解)

目录 1.概念 2.封装原生线程方便使用 3.线程池工作日志 4.线程池需要处理的任务 5.进程池的实现 6.线程池运行测试 7.优化线程池&#xff08;单例模式 &#xff09; 单例模式概念 优化后的代码 8.测试单例模式 1.概念 线程池:* 一种线程使用模式。线程过多会带来调度…

QT--事件(丰富操作,高级功能)

一、事件 1.事件与信号的区别 事件来自外部&#xff0c;是随机发生的。信号来自内部&#xff0c;是主动发生的。有点像外中断和内中断的区别。事件&#xff1a;适用于处理系统级别的输入和状态变化&#xff0c;种类繁多&#xff0c;能够应对复杂的交互需求。信号/槽&#xff…

学习并测试SqlSugar的单库事务功能

SqlSugar支持单库事务、多租户事务、多库事务&#xff0c;本文学习并测试单库事务的基本用法。   使用SqlSugarClient类、ISqlSugarClient接口都可以创建SqlSugarClient数据库操作实例&#xff0c;其区别在于&#xff0c;针对单库而言&#xff0c;SqlSugarClient类支持调用Be…

硬件开发笔记(二十七):AD21导入DC座子原理图库、封装库,然后单独下载其3D模型融合为3D封装

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140541464 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

睿考网:2024年城乡规划师考试时间

2024年城乡规划师报名时间已经结束&#xff0c;考试时间以及考试科目为&#xff1a; 2024年9月7日&#xff1a; 9.00-11.30&#xff0c;城乡规划原理(客观题) 14.00-16.30&#xff0c;城乡规划相关知识(客观题) 2024年9月8日&#xff1a; 9.00-11.30&#xff0c;城乡规划管…

AV1技术学习:Intra Prediction

对于帧内预测模式编码块&#xff0c;亮度分量的预测模式和色度分量的预测模式在比特流中分别发出信号。亮度预测模式是基于相邻左侧和上侧两个编码块预测上下文的概率模型进行熵编码的。色度预测模式的熵编码取决于色度预测模式的状态。帧内预测以变换块为单位&#xff0c;并使…

PyTorch张量拼接方式【附维度拼接/叠加的数学推导】

文章目录 1、简介2、torch.cat3、torch.stack4、数学过程4.1、维度拼接4.1.1、二维张量4.1.2、三维张量4.1.3、具体实例 4.2、维度叠加4.2.1、0维叠加4.2.2、1维叠加4.2.3、2维叠加&#xff08;非常重要⭐&#xff09; &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专…

Android14之调试广播实例(二百二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Linux的热插拔UDEV机制和守护进程

目录 一、Linux的热插拔UDEV机制 二、守护进程 2.1 守护进程概念和基本特点&#xff1a; 2.2 显示进程信息&#xff1a; 2.3 守护进程和后台进程的区别&#xff1a; 2.4 创建守护进程的步骤和守护进程的特征&#xff1a; 2.4.1 创建守护进程的步骤&#xff1a; 2.4.2 守…

京东Android一面凉经(2024)

京东Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《京东Android一面凉经(2024)》。 面试职位: Android开发工程师 技术一面 面试时长: 50…

Plant simulation 中快速创建相同属性轨道的方法

问题&#xff1a;默认的轨道宽度是0.3m&#xff0c;默认轨道是水平的。如果要创建大量宽度1m&#xff0c;竖着的轨道有没有效率的方法呢&#xff1f;答案肯定是有的&#xff0c;按下面方法操作即可。 1、复制两个轨道模型到用户对象中&#xff0c;命名为水平轨道和竖直轨道。 …

开源免费的一个企业级商城系统

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 系统简介 ShopXO&#xff1a; 是一款企业级免费开源商城系统&#xff0c;具备可视化DIY拖拽装修功能&#xff0…

[240720] X-CMD 发布 v0.4.1:新增 OpenAI GPT-4o mini 模型|优化 df ip dns ...

目录 X-CMD 发布 v0.4.1✨ openai✨ chat✨ df✨ ip✨ kev✨ dns✨ shodan✨ pick✨ theme X-CMD 发布 v0.4.1 ✨ openai 更新 X-CMD 现已支持 OpenAI 最新模型 GPT-4o mini&#xff01; &#x1f389; 用户只需使用 gpt4om 即可直接调用这款强大的模型。gpt 的默认模型由 g…

PyTorch张量数值计算

文章目录 1、张量基本运算2、阿达玛积3、点积运算4、指定运算设备⭐5、解决在GPU运行PyTorch的问题 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&am…