基于Python的微博用户分析系统设计与实现

2022-09-13 版权声明 我要投稿

近年来, 随着Web2.0时代的全面到来, 以社交网络与社交媒体为代表的UGC内容在互联网中的比重日益上升, 几乎每个互联网用户都有一个以上的社交网络账号, 并且持续生产海量文本及多媒体内容。对于大量社交网络数据的分析和利用主要有以下两个方向:

社交网络分析技术:社交网络用户直接互相关注, 互动的关系可以建模为图结构, 而对社交网络的分析可以使用图论中针对网络结构的算法, 如关系度量和图的划分, 网络搜索排名, 中心性算法, 社区发现算法等。这类技术的应用可以在营销[1], 异常行为检测[2]等领域。

用户分析和画像技术:相对于社交网络分析, 这类技术关注的是单个社交网络用户数据, 主要采用自然语言处理和机器学习技术, 通过用户在社交网络发布的内容分析用户的行为, 兴趣, 主题, 人格与情绪等, 并对用户进行画像。此类技术可以应用于群体发现[3], 特殊用户发现[4]等领域。

本文主要关注用户分析技术, 实现了一个社交网络用户分析系统, 分为数据采集模块, 数据存储模块, 和分析展示模块, 系统使用Flask作为Web容器, 采用了结巴分词, snowNLP, face_recognition等三方库, 可以实现对单个微博账号进行主题词提取, 人脸检测等信息挖掘。

一、数据采集模块

一般情况下, 可以获取到的单个用户的微博数据包括以下几个方面:

(1) 用户基础数据:如用户名, 昵称, 注册时间, 个人信息, 隐私设置等;

(2) UGC文本数据:如微博POST, 评论等;

(3) UGC非文本数据:如POST中的图片, 位置信息, 音频, 视频等;

(4) 关系数据:如关注关系, 评论关系, 点赞等。

基础数据的获取, 以微博为例, 可以调用微博API实现, 一般社交网络对于开发者都开放了此类API[5], 微博的API为users/show, 可以根据用户ID获取用户信息。表1显示了返回JSON数据中的部分字段。当然, 使用爬虫也可抓取这些数据, 但因为本文讨论的是单个用户的分析, 不会出现大量级的用户信息的获取, 使用API更方便且更完善。

微博内容主要通过爬虫实现, 比较主流的框架如Scrapy等可以自动化、模块化地完成爬虫任务。对于微博的爬虫, 目前主流的方式是通过微博移动端 (m.weibo.com) 的ajax请求API进行爬取。例如如果要爬取uid为{uid}的用户, 可以通过API https://m.weibo.cn/api/container/getIndex?-type=uid&value={uid}来获取数据。API返回的是json格式的数据, 用户的微博信息都在cards列表里每条数据的mblog数组里面, 包括微博正文、图片、来源与时间等, 其中card_type标识的是微博类型, 例如:文字微博、图片微博、视频微博、转发等。

二、数据存储

(一) 文本数据的存储

以微博为例, 用户的微博POST都是文本格式且不超过140个字符, 如果只关注文本信息, 可以采用文件存储这类非常简单的方式, 文件可以使用纯文本文件或csv文件。文件存储的优点在于实现简单, 并且非常方便在分析过程中使用分词工具来处理, 缺点是增删查改操作不如数据库高效, 兼容性也不如数据库。

(二) 数据库存储

POST数据库的设计可以参考API的字段。因此数据库存储可以包括发布时间, 评论/转发次数, 地理位置信息, 图片地址等, 当需要分析的数据较多时, 使用数据库存储是必要的。

(三) 图片存储

图片只能选择单独存储, 需要注意的是上传微博的图片都经过sha1处理重命名, 部分exif信息也会丢失。本文实现的系统仅保存用户微博POST图片, 不录入数据库, 在后续更新中可以考虑存储头像图片, 提取exif信息, 并录入数据库方便查询。

(四) 数据库设计

数据库设置Basic、Posts、两张表, 分别用来存储用户基本信息和博文信息。Basic表基本参照表1的字段设计, Posts表字段如下:

三、数据处理与分析

(一) 文本数据的处理与分析

对文本的处理属于自然语言处理方向, 一般可以采用机器学习技术对文本进行分类聚类, 而在处理之前, 分词是第一步, 目前主流的分词方法是基于统计的分词算法, 如n-gram, HMM, CRF等。NLP领域有大量的开源分词库可以用于研究和应用, 常见的如表2所示。

本文选用了结巴分词[6]来对待分析数据进行分词。结巴分词结合了词典和新词发现算法来进行分词, 采用HMM模型与维特比算法发现新词。维特比算法是一种动态规划算法。它用于在HMM模型寻找产生观测事件序列的维特比路径即隐含状态序列, 在分词中则是最有可能的词组合。

定义在t时刻, 状态为i的所有单路径中最大的值为:

在t+1时刻则有:

(二) 机器学习实现文本分类

文本分类在微博文本处理中用途很多, 典型应用如情感分析。在对单个用户的微博分析时, 可将每条微博进行情感正面负面二分类, 而可以从整体上判断被分析用户微博文本的情感倾向。

正负面情感二分类目前一般采用机器学习技术中的分类器即监督学习, 首先是特征提取的粒度问题, 基于微博短文本的特征提取一般有基于词和基于字的, 在文献中对于字和词特征做了对比, 认为字特征比起词特征计算复杂度较低, 效果较好。文本表示还有word2vec这种词向量表示法, 可以进行词与句的相似度计算来进行分类。本文选用了集成化的SnowNLP库来进行情感分析。

SnowNLP进行情感分析的原理是贝叶斯分类器, c1和c2代表正类和负类, 其特征为w1, ⋯, wn, 特征之间是相互独立的, 属于类别c1的贝叶斯模型的基本过程为:

其中:

预测的过程即为:

分类的结果会返回一个概率数值来辅助判断该条微博是正类 (正面情感) 或者负类 (负面情感) 。

(三) 图片数据的处理与分析

本文利用Python face_recognition库实现了人脸识别。face_recognition库是一个基于dlib的简洁人脸识别库, 可以提取、识别、操作人脸。其中batch_face_locations API可用于返回图像中人脸边界框的二维数组。compare_faces可以将面部编码列表与候选编码进行比较, 看它们是否匹配。face_distance可以计算两个面部编码的欧几里得距离。本文使用该库对抓取到的用户图片进行人脸检测, 将含有人脸的图片提取并单独分类, 方便后续分析。

(四) Web界面设计

因本系统大部分库都是基于Python, 出于开发的便利性和接口的一致性, 本系统界面使用Web界面, 基于Flask开发, Flask是一个基于python的轻量级Web框架。

Flask的URL规则基于Werkzeug的路由模块。本系统使用了以下路由:

情感分析界面展示如下:

四、总结与展望

本系统结合了文本分析与图像分析以及位置信息等微博结构化数据信息、对单个用户进行深度分析、不同于社交网络分析中的重视关系、群体的分析、信息采集分析过程全自动、使用用户画像技术、机器学习等技术。本系统作为参赛项目参加了第十二届全国公安院校学生科技创新大赛获二等奖, 在后续开发中, 系统还可以从以下几个方面提升改进:

(1) 基于时间线的分析, 用户的每条微博发布时间整体上构成一个时间序列, 可通过时频统计来分析用户的微博习惯, 识别序列中的频繁模式, 以及对用户的社交网络活动进行时间上的预测。 (2) 计算机视觉新技术的应用, 目标检测, 物体识别等技术在计算机视觉领域也不断成熟, 可以使用相关库对用户图片中的内容进行识别后再进行文本分析, 可以得到更精准的分析结果。 (3) 图片Exif信息的提取, 微博上传的图片中有部分图片仍保留Exif信息, 这些信息也可以导出至系统联合分析。

摘要:本文设计并实现了一个微博用户分析系统, 本系统的开发全部基于Python库及框架, 使用爬虫技术采集用户微博发布内容, 可以对文本内容进行词频统计, 主题词提取, 情感分析, 对图片内容进行人脸检测与提取。通过本系统可以快速展示单个用户微博主题, 兴趣点, 微博情感正负面程度, 以及经常在出现在该用户微博中的人脸, 方便相关人员快速了解微博中一个虚拟身份的基本信息, 可以进一步对用户进行分析和画像。

关键词:微博,爬虫,主题词提取,情感分析,人脸检测

参考文献

[1] 王智囊.基于用户画像的医疗信息精准推荐的研究[D].成都:电子科技大学, 2016.

[2] 赵刚, 姚兴仁.基于用户画像的异常行为检测模型[J].信息网络安全, 2017 (07) :18-24.

[3] 曹文盼.基于用户行为的水军团体阵营发现技术研究[D].杭州:浙江工商大学, 2017.

[4] 唐梓淇.微博网络中隐蔽关键用户发现技术研究[D].郑州:战略支援部队信息工程大学, 2018.

[5] 微博开放平台.微博API[EB/OL].https://open.weibo.com/wiki/API.微博.2011.

[6] fxsjy.结巴中文分词.https://github.com/fxsjy/jieba.2012.

[7] ageitgey.face_recognition.https://github.com/ageitgey/face_recognition.2017.

[8] Flask.Flask.https://pypi.org/project/Flask.2010.

上一篇:刍议血站供血科延伸服务对临床安全输血中产生的作用下一篇:GPS测量技术在工程测绘中的实践与探索