“李杜文章在,光焰万丈长”,唐诗无疑是中国古代文学最灿烂的篇章之一。现代人发表论文,会互相引用,喝酒吃饭,也经常会谈及谁谁谁是我哥们。作为当时最重要的文学形式,唐代的诗人也经常会在诗文中提及自己的好朋友。杜甫比李白小十一岁,二者相识于杜甫父亲杜闲家中,彼时正是李白因触怒权贵放归山林之时。两人一见,杜秒变小迷弟。杜在《与李十二白同寻范十隐居》中描绘了两人的亲密关系:”余亦东蒙客,怜君如兄弟。醉眠秋共被,携手日同行”。不仅如此,在两人各奔东西后,杜甫压抑不住对李白的思念,写了多首提及李白的诗。例如《梦李白》中云:”三夜频梦君,情亲见君意”。能连续三个晚上做梦都梦到李白,可见交情不浅。

通过分析全唐诗中各位诗人之间的“引用”关系,可以描绘出当时诗坛的大致朋友圈图景:谁跟谁熟?谁是圈子里的带头大哥?全唐诗有4万多首,人工一首一首地筛查费时费力,这种重复的统计性质的工作正是计算机最擅长的。

本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔 叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频

23. 数据分析 - 唐代诗人的朋友圈

同类相比,同声相应,固天理也。——庄子

本章的代码和数据整合在一个名为C23_PoetsNetwork的文件夹中。注意,本章节所依赖的全唐诗文本以及《中国历代人物传记资料库》使用了繁体中文,所以读者在运行代码查询时,如果使用简体中文输入诗人姓名,结果将与预期不符。

本章内容受开源项目poetry_analyzer的启发。为方便读者理解,作者整理了相关数据并重写了代码。

本章的代码实现依赖于Qt平台的专有特性,只能通过Qt Creator集成开发环境来编写和构建。

23.1 创建程序框架

请读者按照22.1及22.3节所介绍的方法,在Qt Creator中创建一个名为PoetsNetwork的项目,该项目的主窗口如图23-1所示,作者在该图上人工标注了各关键部件的名称。表23-1列出了该项目创建过程中的一些注意事项,以及其主窗口中部分部件的用途。

表23-1 创建PoetsNetwork项目的注意事项及主窗口的主要部件

名目 说明
项目模板 Application(Qt)/Qt Widgets Application (Qt窗体应用程序)。
主窗口 类名:MainWidget;基类:QWidget。
pbParseQTS 类型:QPushButton;文字:全唐诗数据整理;用途:将全唐诗文本数据整理并写入到数据库。
pbConstructNetwork 类型:QPushButton;文字:构建关系网络;用途:对数据库中的全唐诗文本正行分析,找出诗人与诗人之间的引用关系并写入数据库。
leRefPoet1,leRefPoet2 类型:QLineEdit,单行输入框;用途:“引用查询”时输入第一/二个诗人的姓名。
pbQueryReference 类型:QPushButton;文字:引用查询;用途:查询两个诗人之间的引用数量以及相互之间的引用诗文。
textBrowser 类型:QTextBrowser,简单的文字型HTML浏览器;用途:显示程序的部分执行结果。
lePoetFriendCycle 类型:QLineEdit;用途:查询“朋友圈”时输入诗人的姓名。
pbFriendCycle 类型:QPushButton;用途:查询单个诗人的朋友圈,即找出与指定诗人存在引用关系的全部诗人,生成关系网络图,并用浏览器显示。
pbNetWork50/100/200/500 类型:QPushButton;用途:导出引用数量的前50/100/200/500行引用关系,将由相关诗人姓名及引用箭头组成的关系网络生成出来,并用浏览器显示。

图23-2则展示MainWidget主窗口的对象结构以及窗口组件之间的布局关系。如图所示,主窗口自身呈现竖向布局,其内包含4个横向布局以及textBrowser。为了构造出期望的界面效果,读者可能需要:(1) 调整布局的layoutSpacing(布局间隔);(2) 修改按钮、单行输入框的minimumSize(最小尺寸)。此外,在图23-2中,我们还看到了类型为Spacer的部件,这种类型的部件仅用于占据布局空间,其在最终的结果页面上不会有任何显示,它可以把别的部件“挤”到期望的位置。

23.2 数据整理与准备

23.2.1 sqlite数据库

为了便于统计分析以及向读者简单介绍数据库的入门知识和C++访问数据库的方法,本章使用sqlite数据库来存储相关数据。

对于结构化的数据,如个人的身份信息、银行的交易流水、图书馆的借还记录等,通常都存储在数据库系统中。数据库系统通常运行在一个服务器或者由多个服务器构成的集群中,软件使用者的计算机或者终端直接或者间接地透过TCP/IP访问数据库、查询或存储数据。大型的数据库系统软件有阿里蚂蚁金服的OceanBase、华为的GaussDB、开源的MySql以及私有的Oracle。

本章使用的sqlite是一个超级mini版的数据库系统,它本质上是一个运行于软件内部的C语言包。在本章的代码中,数据库的存储文件为C22_PoetsNetwork/data子目录下的data.db。

用C++做数据分析 - 唐代诗人的朋友圈相关推荐

  1. 微信上线“好物圈” 做用户推荐商品的“朋友圈”

    [摘要]"好物圈"有助于分担朋友圈的部分功能,让用户在朋友圈中更集中地"分享和记录生活". 腾讯创业讯 近期,微信中原先的"我的购物单"被替 ...

  2. 未来集市是什么做什么的?为什么朋友圈有那么多人在做?邀请码686040

    2019年,越来越多的人关注并加入到社交圈层新电商经济市场中,社交电商持续保持了迅猛的增长势头,预计在2020年社交电商市场规模将会突破3万亿元大关.社交电商迅猛发展的当下,未来集市通过连接社交圈层和 ...

  3. 基于Python的朋友圈关系数据分析与实现

    目录 摘 要 1 Abstract 2 1 绪论 4 1.1 选题背景 4 1.2 研究意义 6 1.3 论文主要研究内容及组织结构 7 1.3.1主要研究内容 7 1.3.2论文组织结构 8 2 关 ...

  4. 关于朋友圈项目的重启。

    在之前羽翼君做过一个高仿朋友圈的开源项目.因为服务器是自己租的阿里云,108一个月呢,所以撑了三个月就没法撑下去了.遂关闭- 近期恰好有空,研究了一下learncloud和bmob,最终选定用bmob ...

  5. 小程序分享到朋友圈功能_小程序开发日记 分享到朋友圈

    贵州 水司楼 图片来自 视频截图 最近微信小程序开始公测小程序分享到朋友圈的功能了.记得前两天刚开始内测时,小程序社区里就不断有人发帖问关于分享到朋友圈的各种问题.很显然大家对这个新特性都特别关心.那 ...

  6. 小程序新爆点,小程序能分享朋友圈了

    小程序分享朋友圈以前只能长按识别,就如微信跳转淘宝一样,之前一直是体验上的痛点,淘宝跳转可行性很低,但今日,微信官方文档2.11.3中,新增了小程序分享到朋友圈的功能,让小程序圈整个都沸腾了,小程序即 ...

  7. 微信朋友圈这样招生,才不会被屏蔽!(附实操案例)

    如何招生,长久以来是众多校长的心病.人力成本的不断上升,让地推逐渐失去了吸引力,而网络营销的费用也是水涨船高.那么是否有更好的招生途径呢?毫无疑问,通过朋友圈招生已经逐渐成为很多校长的新选择.那么,到 ...

  8. 扫地机器人朋友圈文案_装修建材行业如何写一条牛逼的朋友圈文案?

    今天我来分享如何利用知乎这个平台找装修干货,然后做一条优秀的朋友圈文案. "你的家装修成什么样子了?有哪些最实用美观的设计或先见之明?" 这个是知乎装修话题上面的一个提问:你的家装 ...

  9. 朋友圈加粗字体数字_微信新版内测!朋友圈将大变样,图片可变视频

    每一次微信的更新,都是一次大事件,距离上一次微信7.0.4的更新过去已有段时间,最近,微信又有更新的消息传出. 6月13日,腾讯悄悄发布了安卓版微信7.0.5内测版,虽然没有大肆宣传,很多人都不知道, ...

  10. 微商发朋友圈有何技巧?

    微商发朋友圈有何技巧? 如出一辙的微商朋友圈发圈方式,让很多人都不胜厌烦,看得多了也就开始反感了.一旦别人慢慢进入反感状态,跟随而来的有可能就是屏蔽或拉黑你!这也是目前大多微商都存在的一个难点. 那微 ...

最新文章

  1. NetBeans 时事通讯(刊号 # 146 - May 13, 2011)
  2. Android中发送和接收短信
  3. Xilinx ISE 14.7 安装教程
  4. 全球及中国氰化金钾行业需求潜力及供应前景调研报告2022-2027年
  5. Jenkins安装与启动
  6. 中石油训练赛 - Bad Treap(数学)
  7. 【Pytorch神经网络实战案例】01 CIFAR-10数据集:Pytorch使用GPU训练CNN模版-方法①
  8. 案例 解析频道节目单 c# 1614261055
  9. python-循环的入门
  10. 前端如何玩转虚拟机_想运行虚拟机,用win10自带的Hyper-V即可,不用安装其它软件...
  11. tomcat内存优化
  12. python打印不同颜色的字_Python 根据日志级别打印不同颜色的日志的方法示例
  13. Mac安装JDK1.8及环境变量配置
  14. js实现签名功能(vue中使用电子签名)
  15. 美团、饿了么“喜极而泣”,搞定了!外卖骑手终于可以愉快的送餐了
  16. 关于Windows10 VT虚拟化无法开启
  17. java8 stream运行原理之并行流原理详解
  18. 解决vs2013+wdk7 编译nt系统wdm驱动 error C2220: 警告被视为错误 - 没有生成“object”文件
  19. python绘制曲线y=2x+5_Python绘制简易的二维图像
  20. 汉字转16进制 php,php中文汉字与16进制编码转换三种方法

热门文章

  1. Android重力感应器入门介绍
  2. QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
  3. 训练诗词生成模型(GPT2)的一点心得
  4. 12级计算机动画制作专业,计算机专业技术12级是什么意思?
  5. app指纹登录 java后端_Android应用实现指纹登录
  6. 信息系统项目管理师——历年论文题目2012年-2020年
  7. Pwnable.kr collision [Writeup]
  8. 思考(六十四):游戏中的角色ID问题
  9. 服务器系统事件id1001,win10系统玩游戏出现蓝屏事件ID1001的解决方法
  10. [源码阅读]解析Anime(JS动画库)核心(2)