龙空技术网

基于互联网思维和技术实现的民国史研究

包建强的历史和编程区 181

前言:

如今各位老铁们对“mysql技术简介怎么把它写到论文中过查重”大概比较重视,朋友们都需要了解一些“mysql技术简介怎么把它写到论文中过查重”的相关知识。那么小编在网摘上网罗了一些对于“mysql技术简介怎么把它写到论文中过查重””的相关文章,希望你们能喜欢,你们快快来学习一下吧!

(一)从列女传说起

做这件事情的初衷,其实是我父亲。老爷子是在东北待了八年的下乡知青,回城后做了工人。一辈子手不释卷,现在70多了又迷上使用iPad看书了,比如《红楼梦》,比如蔡东藩的《历代通俗演义》,比如关于抗日战争、解放战争和抗美援朝的各种历史书和影视剧。

我受老爷子影响,从小也喜欢看历史文学诸子百家的书籍,高中的时候扩展到世界名著,大学的时候扩展到现当代文学。

在这期间,我就发现,民国这区区38年的历史,要比历朝历代都要精彩。有辛亥革命、有军阀割据、有热血沸腾的抗日战争、有气势磅礴的长征和解放战争、有凄婉缠绵的爱情故事、有荡气回肠的刑场诀别、有军人、政客、文人、学者大师、商人、刺客、艺人、黑社会、少数民族人物、外国友人,当然也有汉奸、卖国贼。相当于把中国三千年来的历史,又在民国38年间快速演绎了一遍。

这其中,有很多有趣的历史和人物,是我父亲不知道的,每年春节回家的时候,我都和父亲攀谈这段历史,给他讲一些有趣的片段。

当知识积累到一定阶段,就要将其汇总成册。所以在2018年的时候,我就筹划从一个群体做起,那就是民国期间的杰出女性。

古代史学著作中也有烈女传。其实一开始是列女传,这个列是众多的意思,不带有感情色彩,一般记载通才卓识,奇节异行的女性,但后来就慢慢变了味,记载那些遵守儒家礼法三从四德的贞洁烈女了,列也改为了烈字。

民国伊始,主张男女平等,妇女不再受这些条条框框的束缚。三十八年间涌现出众多杰出女性。我花了2个月时间,整理出600多位民国女性。划分为革命家,刺客、教育家、科学家、学者大师、烈士、记者、特工、名妓、交际花、名媛、影星、歌星、艺人、土匪、黑社会,共计72卷,我称之为《民国列女传》。

这期间,我使用excel来进行人物分类。并把网上关于这个人的传记文章,黏贴复制到Word文档中保存。如下图所示,这并没有什么技术含量,纯粹是体力活。而且人物遗漏了很多,按照现在统计到的2.8万民国人物中,女性大约占了2000人。

因为没有什么技术含量,而且把网络上的文章复制到word中导致格式变化很大,所以这本《民国列女传》整理出来后,就没有再碰过它。

期间我找过出版社,他们评估后否定了这个课题,因为介绍民国女性的书籍也有很多种,但都是三四十人、300页左右的篇幅。对于涉及600人的大部头书籍,市场上会无人问津。

(二)准备工作

时间转到2020年。

因为疫情,我的企业内部IT技术培训工作受到了很大影响,所以我就有整段时间做一些自己喜欢的事情——比如说,在《民国列女传》的基础上,整理一部从1911年到1982年的纪传体通史,其中以1949年之前新中国成立之前的历史为主。但因为有半数以上的人物在1949年之后仍然有可圈可点的事迹,以及那让国人扬眉吐气的抗美援朝,所以也一概收入,但不超过1982年。

纪传体史书分为本纪、列传、表、志等几种题材。因为从1911年起就不再有皇帝了,所以本纪这种题材就消亡了,改为编年了。

志和表不是我擅长的领域。我看二十四史的时候,志都是跳过去的,因为看不懂,比如说食货志,讲经济的,比如说天文志,地理志。这都是给专业领域的人才看的。

这次我的重点是列传,我花了整整4个月的时间,编写工具,整理了1万1千人的传记,并对其进行分类,当然,这个数据还不够,最终完成,应该是1万5千人左右。

筛选人物的标准是有事迹。对于只有各种职务罗列而无鲜明特性、具体事例的人物,不入传。

盘点一下在开始做这件事情之前,我掌握的技术:

使用C#和winform,开发Windows上的桌面工具Android、iOS、ReactNative等前端技术后台服务:Node数据库:MySQL,Redis服务器:在VMWare上搭建CentOS7虚拟机脚本工具:Python

(三)设计一个快速添加民国人物的工具

工欲善其事,必先利其器。从2018年整理完《民国列女传》,我都在思考,如果写一个好用的软件,能够在短时间内快速搜集到大量民国人物历史。

1)民国历史人物的增删改查功能。

这是最基本的功能,单笔数据的录入和后期维护,如下图所示:

在上图的红色区域,输入姓名,点击新增,就可以快速录入一个历史人物。系统会进行判断,如果系统已有同名的历史人物,会弹出框询问是否仍然添加。

录入成功后,就可以在系统的左侧,搜索到这个人物。这里采用的是模糊查询,输入用户名的一部分,如“之”字,就可以搜索到所有名字中带有之的历史人物。显示在左下方的表格中。

点击左下方搜索结果的某一个历史人物,中间的详情页,会显示他的详细信息。同时右侧,会自动跳转到百度搜索引擎主界面,自动在百度搜索框中输入这个历史人物的姓名,自动点击百度网页的“搜索”按钮,然后网页自动跳转到搜索结果页面。

在录入一个历史人物后,还需要为这个人关联网上介绍他的传记网页,一个人可能会有多个这样的介绍页面。

此外,还可以为这个历史人物,打标签(Tag)。一个人可以有多个Tag,比如阚朝玺,就有“新奉系”、“汉奸”等多个标签。

2)快速添加链接的功能

在为历史人物添加相关网页链接的时候,我就发现,要在输入框中输入url,是一件很不方便的事情。

观察系统右侧窗体显示的网页,再点击一个历史人物后,系统会自动跳转到百度搜索这位历史人物的结果页面,点击我感兴趣的那个链接,进入到一个传记页面,当我觉得这个页面合适,就点击系统中间的“新增”按钮,如下图所示,系统会自动把当前页面的URL链接加入到表格中,这就非常方便了。

3)检查去重的功能

在录入人物的过程中,发现就在这短短的几十年间,就有大量的同名历史人物。为了避免张冠李戴,或者重复添加历史人物,就做了一个查重功能,如下所示:

4)批量插入人物的功能

在录入人物的时候,找到类似于《国民党九千将领》的书籍,逐条录入这些人物,是非常花费时间的。

可以分两步来快速完成这个工作。

首先是用一个叫夸克的App,它提供发免费的OCR功能,把图片中的人名提取出来,生成一个txt文件,名字之间用空格或者换行分隔开。准确度还可以——取决于拍照角度。把提取的结果稍作修订,就可以使用了。

其次,是做一个工具,把这个生成的txt文件导入进来,然后批量插入到数据库中,如下所示:

注意到,txt文件中可能会有重复的数据,有可能这个人已经录入到数据库了,也有可能是同名的历史人物,这时候,不着急把这样的数据录入,而是暂存到一个duplicate.txt文件中,后期再进行甄别处理。

5)在浏览网页的同时,快速录入人物的功能

经常遇到这样一种情况,就是在系统中,查看一个历史人物的网页时,网页中会出现很多相关的民国历史人物。他们可能已经录入到系统中了,也可能在历史上不重要而没有详细的传记,仅仅是一个人名,这时候就需要有一种快捷方式,能够随手把这些人物先暂存下来。等阅读完当前这篇文章,再去处理新增的这些历史人物。选中网站中的这个历史人物,按照ctrl+C,会把这个名字,添加到系统中间位置的列表中,如下所示:

可以点击这个列表中的人物,系统右侧的网页会切换到该人物的网页搜索结果;如果觉得合适,就新增这个人物;如果觉得不合适,就点击图片中的“删”按钮,就把该人物从表格中删除了。

6)对于历史人物没有网上传记的解决方案

处理这一类人物是最耗费时间的。

对于比较常见的名字,如王文,会因为历史上太多的同名人物,而很难找到。此外,如果这个名字还同时是一位高流量的人气演员,百度搜索会发现铺天盖地都是他的新闻,而把同名的民国历史人物淹没在浩瀚的搜索结果之中,难以查找。很多不知名的民国历史人物,在民国人物词典中会有记载,而网上没有。对于这类人物,先把他标记出来,即可。以后再处理。或直接把实体书中的记载,手动输入到系统中。l对于一些民国历史人物,只能搜集到他的出生年月和履历,而没有显著的人物事迹。对此则一概删除之。

7)对历史人物的简介

每天都要录入大量历史人物。为了以后再看到这些人物时还有印象,所以有必要在“简介”这个输入框中录入对这个历史人物的一句话描述,如下图所示:

8)对民国历史人物的评论

对于史书而言,史料往往是前人写好的。史书作者,更多的是辨别这些史料的真伪,对其进行修订,汇编成册。

体现一个史书编撰者的史学思想的地方,其实是在每篇人物传记的评论,也就是司马迁流传下来的“太史公曰”。

于是我在这个工具的中间部分的最下方,有一个评论的输入框,如下图所示,点击输入框,这个输入框的高度会拉长,从而能让我输入大篇幅的评论文字。

(四)设计一个对民国人物分类的工具

1)使用树状结构对历史人物进行分类

在录入了5000个民国历史人物之后,我就在思考,该怎么把这些历史人物分门别类地展示出来,类似于《史记》那样,五大刺客放在《刺客列传》,屈原和贾谊因为经历相似而放在同一篇传记之中。

树是一种比较好的组织形式,如下所示。一级子节点是分类,比如说筹安会。二级子节点是筹安会的历史人物。

此外,二十四史中往往有附传,也就是一个人的记载很少,就把他放在和他相关的另一个知名历史人物之下。比如说,夏侯惇传,附有朱灵的传,就是如此。在树状结构中,这其实就是一级子节点和二级子节点,如下所示:

2)随着录入越来越多的民国历史人物的,并对其进行分类,我需要建立上百个分类,每次想要把一个历史人物放到某个分类中,都有查找半天,于是我把这三百多个分类,重写划分成10个大类,如下所示:

这10大类分别是:民国早期、北洋政府、国民政府、我党早期、民主党派、文化界、女性、新中国、抗战、其它。

这样就很容易定位了。

3)显示未分类的人物列表

在分类程序窗体的左侧,是没有分类的历史人物列表。程序刚启动到时候是不显示的,需要按一下旁边的“加载”按钮,才能显示出来,如下图所示:

这样设计是因为,加载这些未分类的人物列表会很慢,因为要遍历所有的树,会导致程序启动很慢,用户体验很不好,而我们在这个程序界面的重点是那些树的操作。

4)对人物进行分组

对人物进行分类的操作,由三步组成:先选中软件界面左侧的历史人物,再选中软件界面右侧的某一个分组,最后点击软件界面中间的“同级”按钮,如下图所示:

5)子节点

把一个人物A放到另一个人物B的附传,和上面的操作也类似。先选中软件界面左侧的历史人物A,再选中软件界面右侧的某一个分组下的人物B,最后点击软件界面中间的“子节点”按钮,如下图所示:

6)删除分组下的人物

当发现把人物放到一个错误的分组时,可以点击这个分组下的这个人,然后点击软件界面中间的“删除节点”按钮,即可完成删除操作,被删除的人物会出现在软件界面左侧的历史人物列表中,如果没有,点击软件界面中间的“刷新”按钮即可看到,如下图所示:

7)搜索数据库

软件左侧的人物列表,数量很多。而我经常会去里面找一个人物,然后对其进行分组操作。靠肉眼去找,会很耗时,所以就有了搜索数据库这个功能。如下图所示,在输入框输入内容,点击搜索框下方的“加载”按钮,就可以模糊匹配到相关的历史人物。

8)定位

上面介绍的是怎么在左侧的人物列表中找人,这里介绍的是怎么在300多个分组中找人。

在软件中间有一个“搜索节点”区域。在输入框中输入“陈其美”,点击旁边的“搜索”按钮,就可以在下方显示出陈其美在分组“列传18:同盟会政治人物”。

目前是全字匹配,必须输入人物的完整姓名,才能搜索到结果。此外,只显示搜索到的第一个人。如果是同名人物,就只能看到第一个人。这里可以扩展为搜索出多个人并显示出来,只是我自己在处理这些数据的时候没有这样的需求。

9)新增分组

所有的分组都是从0到1,逐个创建出来的。

先选中一个分组,比如“清末四大家”,然后点击软件界面中间的“组的处理”的“新增组”,就会在所选分组下方,创建一个新的分组“列传X: 占位文字”。

双击分组,可以修改组的名称。

10)删除分组

如果错误创建了一个分组,可以选中这个分组,然后点击软件界面中间的“组的处理”的“删除组”,就会将其删除。

如果要删除的分组下面有历史人物,那么删除后,该分组下的所有历史人物,都会显示在软件界面的左侧,等待重新对其进行分组。

11)转移分组

我们前面介绍过,300多个分组,划分到10个大类别中,比如“民国早期”、“抗战”等。

在分组人物的时候,经常会做的一件事情,是把一个组从一个大类别转移到另一个大类别中。与此同时,这个组下的所有历史人物,都跟着一起转移过去。

这个操作分为3步:先选中组,然后点击软件界面中间的“组的处理”的“选择分类”下拉框,里面有tv1、tv2直到tv10,分别代表软件界面上的10个大类别,最后点击软件界面中间的“组的处理”的“转移组”,即可完成转移分组的操作。

12)移动节点到一个新的分组

在进行人物分组都操作中,经常会发现一个历史人物分错组了,不应该放在A组,而应该放在B组。

点击分组中要转移的历史人物,比如说师子敬,在软件界面中间的“节点移动到组”区域,就会显示师子敬。然后点击下方的下拉列表,如下图所示,会列出10个大分类下的300多个分组,选择一个组,点击下方的“移动”按钮,就把师子敬这个历史人物移动到新的分组了。

在“节点移动到组”区域,还有一个“刷新列表”按钮。这是因为我会经常新增分组,而不会通知这个下拉列表跟着刷新。点击“刷新列表”按钮,会强制刷新,让我新增的分组,显示在下拉列表中。

13)移动节点到“不好分类”

在为历史人物分类的过程中,很多历史人物不好分类,可能要等到几天之后,这样的同类型历史人物数量多了,才可以新建一个分组,然后把之前发现的这些历史人物放到这个分组中。

于是便有了软件界面中间区域的“转移到不好分类”功能。

选中软件界面左侧的历史人物,在“不好分类”的输入框中输入一些备忘录,然后点击“转移到不好分类”按钮,就可以把这个历史人物暂时存放在软件界面左下角的一个树中的“不好分类”这个分组中。

对“不好分类”分组下的历史人物,以后可以通过前面介绍的“节点转移到组”的功能,将其放到合适的分组中。

14)上移和下移

我在操作人物分组的时候,经常会需要调整一个分组下的历史人物的先后顺序,在树的存储结构中,就是上移和下移子节点,如下所示,先选中师子敬,然后点击“下移”按钮,就会发现,师子敬在“蒲案”这个分组中,位置从第一个下移到了第二个。

上移和下移操作对分组也适用。选中“蒲案”这个分组,然后点击“上移”按钮,就会发现,“蒲案”这个分组移动到了“孙中山卫士”分组之上。

15)保存

在这个软件界面的任何操作,比如分组、转移分组,最后都需要点击软件界面中间区域的“保存”按钮才能生效,如下图所示。否则下次再打开这个软件,仍然是操作之前的数据。

当然,也不用每次操作都点击保存。可以在一系列多个操作之后,执行一次保存操作。

16)点击人物节点,让“录入工具”界面显示他的传记

在点击软件界面中的历史人物的时候,有时候我希望看到他的历史传记。因为我这个软件有两个界面,一个是“录入工具”,另一个是“分类工具”。其实二者之间是可以联动的。点击“分类工具”的人物节点,“录入工具”中会自动展示这个人物的信息,并自动在百度中搜索这个人物,并显示搜索结果。

但有时候,我希望点击人物的时候,是为了对其进行操作,比如转移组。这时候就不需要页面联动,所以就有了“跳转”这个勾选框。默认是勾选的,也就是支持联动。如果不勾选,就不会联动。

17)点击人物节点,查看人物简介

在对历史人物进行分类的时候,会经常忘记他们是做什么的,毕竟有一万多人啊。

于是便做了一个功能,点击历史人物,在当前软件界面的顶部,显示这个人的标签。如下所示:

这个简介是我在“录入工具”软件界面中,新增历史人物的时候,输入的标签,如下所示:

18)把分组及其历史人物,导出为excel

点击软件界面中间区域的“导出”按钮,就会把10个大分类下的所有分组,都导出到一个excel文件中,如下图所示:

其中,每个大分类是excel中的一个sheet,每个sheet中会自上而下列出所有分组和分组下的所有历史人物。

这只是这些数据的一种展现形式。用来做一本史书的目录是很好的。缺点是看不到每个历史人物的传记。所以需要一个更好展现这些数据的形式,那就只有App了。

(五)对历史人物关系的梳理

从一位历史人物的传记中,找到出现的其他人物。他们之间可能是夫妻关系、父子关系或敌对关系,一共是六种关系,要用到NLP技术。

首先在文章中把这些人找到,然后再使用PyTorch训练数据,进而判断人物之间关系。

当我们手动或自动把这些关系添加完,就可以灌入到Neo4j数据库中,展现出关系图,如下所示:

(六)App展现平台

最终把这些数据以什么样的形式展示,是曾经困扰我的一个问题。把人名按分类打印成excel,其实就是一本书的详细目录,并不能展现人物的传记信息。所以最好的展现形式是App,毕竟智能手机是人手一台。

因为就我一个人在开发App,所以我选择跨平台的开发框架,一次编写,多端适用。备选方案有3个,Hybrid,Flutter和ReactNative。有2个考核点:一是性能;二是热修复能力。

Hybrid首先被淘汰,因为性能问题。

其次Flutter被淘汰,因为Flutter不支持iOS的热修复。

选定了ReactNative后,就开始准备工作。

首先是采购一台搭载了centos7的云服务器,在初期用户量不大的情况下,1Mbps 2G内存+50G硬盘的配置足够了。

然后是使用本地的XShell,直连到这台云服务器上。

接下来,进入云服务器安装软件。使用Docker安装Redis和Mysql是一种简单可行的方案。

此外,还要安装node express,提供Restful服务,把Redis和Mysql上的数据转发给App。此外node express还担当着静态h5页面和静态图片的服务器。这里我走了一段弯路。先是用原生的nodejs搭建RestFul服务器,后来发现数据量很大需要开启gzip,这时候就必须要迁移到node express了。

其实也可以使用SpringBoot那一套来搭建RestFul服务,只是我个人习惯node的原因,写起来快一些。

此外,还要搭建Grafana,监控nodejs提供的这个API,不能运行了要及时报警。

App端是以一本史书的体例来设计的,包括编年、表、志、列传。当然,我目前收集到的数据,只包括1万多人的传记。所以编年、表、志,只有目录,而没有详细内容。

此外,结合App的特点,还做了一个首页,有轮播图,播放每天主推的热点人物和事件,还有十个热门专题。这些都需要人在后台每天维护,更新内容。每个专题都需要一个灵巧的icon图标,目前我准备的图片还太丑,毕竟不是设计师出身。

再往前走一步,就是登录了。为了便于管理,集成微信登录,这样就确保了实名认证。有了用户的概念,登录后就能收藏文章、点赞、评论。当然也就需要额外大量的人力成本去维护,这就是另外的故事了。

此外,还需要做开屏页,从而解决App启动时的白屏等待时间。需要准备各种分辨率的App图标;需要申请软件著作权,从而能在Android市场上架;需要购买AppStore开发者账号,才能在AppStore上架。

为了能快速修复线上bug,需要集成ReactNative的热更新技术。需要准备ReactNative的离线包,并编写一个后台增量包发布平台,需要搭建一个增量包下载服务。需要压力测试,看这个服务能抗多少qps。

以上就是App的全套流程。因为我的主业就是Android和iOS,所以这一部分的技术在我看来都很简单,轻车熟路,所以写的也比较简单。晒几张图:

(七)在其它领域的扩展

就在我用了六个月收集并分类这2.5万名民国历史人物之后,我发现这个工具可以快速收集并分类信息。可以适用于各个领域。

首先是中国历朝历代的历史人物。这些历史人物主要取材于二十四史,以及野史杂谈、笔记小说、地方志。

比如两晋十六国,如下图所示,是分类好的样子:

这些数据基本取材于《晋书》和《十六国春秋》。。因为距离现在比较久远了,史料就是这么多。区别于正史记载的,是现代人对其中历史人物的重新解读,这部分内容是精髓,是吸引人的地方。

同理,可以制作24史其他朝代的内容,以及扩展到港台明星、数学家、成语大全,菜谱,疾病基本常识、世界各国历史,甚至冯梦龙的《智囊》里面的几千个小故事,以及很多自媒体对《雍正王朝》这部神剧的逐句解读。

其次,是古今中外著名文学家及作品的合集。

如果一个人的作品极其丰富,思想极其丰富,则单独成册,如鲁迅。

第三,是中国近现代的老照片。

第四,是世界各国的历史、地理、风土人情、著名历史人物、民族宗教介绍。

第五,是全唐诗宋词元曲、散文八大家的文章、古文观止、文选、魏晋六朝诗等著作的汇总。因为每个部分都卷帙浩繁,所以各自单独成册。

补充以诗话、词话。

第六,是成语典故的出处。

第七,是中国古代短篇小说的汇总。包括先秦魏晋小说,唐宋传奇,唐宋笔记,三言二拍、聊斋志异。

第八,是史评。

包括史通、文史通义、藏书、焚书、十七史商榷、廿二史考异、廿二史札记、古史辨。

第九,是说文解字。

好了,就写这么多。有兴趣的朋友欢迎留言讨论,多多交流。

标签: #mysql技术简介怎么把它写到论文中过查重