专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

用Python解析古籍史记(一)

  文本数据挖掘,分析,信息可视化等学科的作用是通过对文本数据的整理和研究,从各种角度全方位探索文本中的信息,从中提取出有价值的东西,特别是有些隐藏的,不易被普通阅读方式发现的信息模式。
  当我们面对海量的文本大数据,无法通过普通的逐字阅读的方式来探索时,这些计算机信息技术和方法就可辅助人们完成曾经不可能完成的任务。
  众所周知,这种方法已经被人们大量用于各个领域,工商业,科研,医疗,教育,等等,它的用处就不必多言。
  今天,我也想用这种方法来探索一下古籍,先选一本比较有名的古书《史记》来做一下实验。
  古人说:工欲善其事,必先利其器。技术工具的选用上可以有很多种,对我来说,Python系的工具是我目前最熟悉的,而且它除了支持所有基本的数据科学功能以外,还方便用来对文本进行进行人工智能处理,所以我把它当作首选利器,以下是我的实验计划:工作台的搭建,文本数据的获取。文本预处理,去标点,空行,分割,融合,数据结构化,等等。对文本进行总览分析,信息可视化。探索文本各方面的细节,信息可视化。
  首先,工作台的搭建,我选用云工作台,上面自带有网盘和PythonJupyterNotebook虚拟运行环境,这样比较方便我切换电脑,无论在哪台电脑上,只要有浏览器,我就可以登录到云工作台上,进行研究,保存数据,不需要重新搭建一番工作台。
  当然,个人有各自的偏好,也可以在本地搭建工作台。工具库我选择比较通用的Python数据科学三件套,Pandas用于结构化数据处理,Numpy用于矩阵运算,Matplotlib用于信息可视化制图,这三样是必备的,当然还有其他的工具包,等使用到的时候才来介绍一下。
  然后我从网上找到《史记》文本的,用任意文本编辑器打开,如下。
  先大体看看文本结构,这是一个单文本的《史记》文件,包括十二本纪,十表,八书,三十世家,七十列传,一共有一百三十卷内容。
  全文字数有505056字,没有进行文本校对,所以,这不一定是准确的字数,因为网上的文本资料可能是不全的或者有错漏的。但还是非常感谢那些免费发放电子文本的人和机构,让我们有大量的古籍资料唾手可得。
  为了便于分析,我打算先进行文本分割,把它分成130份单独的文本。
  对于古文的文本分割,我目前所知有几种方法,一是根据关键字,比如史记卷第xxx这样的字眼来作为分隔符,把整个文本读入程序中的字符串,再用分割函数,从选定的分隔符入手,自动分割成不同的子字符串,再把每一个子字符串重新存储为单独的文本,就达到了基本能的分割效果。
  但并不是每一个原始文本都自带有这样合适的关键字,在这种情况下,还可以手动加入自定义的分隔符,然后用同样的原理来分割。
  对于不讲究章节目录的原始文本,还可以进行等量分割,按长度或者文件大小进行等量分割。
  我用的是手动加入分隔符的方法,在每一卷后面加入一个自定义的分割符来处理,如下:
  然后,我用Python写了一个程序,如下,这不一定是最好,最优雅的程序,但目前够用就行:def用分隔符分割(path,fileName,bianhao):os。chdir(path)withopen(fileName。htm,r,encodingutf8)asfile:contentfile。read()ifcontent。find(SEP)1:print(Skip)returnduanluocontent。split(SEP)ifos。path。exists(fileName):shutil。rmtree(fileName)ifnotos。path。exists(fileName):os。makedirs(fileName)os。chdir(pathfileName)index1print(len(duanluo))forduaninduanluo:duanhao数字转汉字(index)ifbianhao3:prefixstr({:03}。format(index))elifbianhao2:prefixstr({:02}。format(index))withopen(prefixfileName卷duanhao。htm,w,encodingutf8)asjuan:juan。write(duan)index1os。chdir(path)
  这个函数需要用到一个子函数,来进行数字转汉字,以便于给子文件命名为史记卷一,史记卷二。。。,的汉字序列,如下:def数字转汉字(num):numdict{1:一,2:二,3:三,4:四,5:五,6:六,7:七,8:八,9:九,0:零,}indexdict{1:,2:十,3:百,4:千,5:万,6:十,7:百,8:千,9:亿}numslist(f{num})numsindex〔xforxinrange(1,len(nums)1)〕〔1::1〕strforindex,iteminenumerate(nums):str。join((str,numdict〔item〕,indexdict〔numsindex〔index〕〕))strre。sub(零〔十百千零〕,零,str)strre。sub(零万,万,str)strre。sub(亿万,亿零,str)strre。sub(零零,零,str)strre。sub(零b,,str)returnstr
  在传入文本参数执行以上函数后,便得到了以下的分割结果,我的文本是以。htm结尾的,这不重要,这种格式是方便我的古籍网站(http:xinyige。cool)的需要,各人可以根据自己的情况而改变。
  我在分割文本时,特意在文件名上加了序号001,002等,不然文本排列的顺序会乱,因为操作系统不会按照汉字的卷一,卷二的顺序来排列,所以在文件名上加上数字序号,操作系统才会识别出文本的顺序来显示。
  然后再用一段代码把文本去除掉标点和空行,以及非汉字字符(多是乱码),再把所有子文件转化为一个Pandas数据结构表,以方便结构化处理数据,为了增加代码的中文可读性,我用中文写下了以下代码。def去除标点(文句):标点集,。;?‘’:!,。;:!()、《》,()无标点文句〔xforxin文句ifxnotin标点集〕无标点文句。join(无标点文句)return无标点文句def去除空行(文句):无空行文句〔xforxin文句ifx。split()〕无空行文句。join(无空行文句)return无空行文句def去除非汉字字符(文句):字符集abcdefghijklmnopqrstuvwxyz汉字字符〔xforxin文句ifxnotin字符集〕汉字字符。join(汉字字符)return汉字字符文档GujiCoolGujiLib心一阁藏史藏正史史记os。chdir(文档)文表{}卷目〔〕卷文〔〕卷字数〔〕全文字数0for路径,,文本inos。walk(文档):文本。sort()for卷in文本:卷目。append(卷。split()〔1〕。split(。)〔0〕)withopen(卷)asfile:文句文具。去除标点(file。read())文句文具。去除空行(文句)文句文具。去除非汉字字符(文句)字数len(文句)全文字数字数卷文。append(文句)卷字数。append(字数)文表{卷目:卷目,卷文:卷文,卷字数:卷字数}史记文表pd。DataFrame(文表)
  再用了另一段代码加入预先手工提取出来的卷名(自动提取太麻烦,就直接从文本的目录里拷贝出来,用代码插入Pandas数据表)史记文表。insert(loc1,column卷名,value卷名)史记文表。head()
  处理的结果如下(只显示前5行),这样就形成了一个便于进一步分析的结构化数据,为什么选择使用Pandas的数据结构呢?因为学过数据科学的都知道,这是一个很强大的数据分析工具,后面大家会看到一些效果。
  到此,数据预处理便初步完成了,接下来可以对这样的结构化数据进行一些总览性的探索,以下代码可以用来展示《史记》中每一卷的字数对比图。tu史记文表。plot(x卷名,y卷字数,kindbarh,figsize(16,50),color5fba34)forpintu。patches:tu。annotate(p。getwidth(),(p。getx()p。getwidth(),p。gety()),size15)tu。legend(fancyboxTrue,shadowTrue,fontsize15)plt。xlabel(卷字数,fontsize20)plt。ylabel(卷名,fontsize20)plt。xticks(fontsize20)plt。yticks(fontsize20)plt。tightlayout()plt。show()tu。figure。savefig(GujiCool文表史记文表。png)
  可以看出,在一百三十多卷《史记》文本中,它们各自的篇幅差别还是挺大的,篇幅最长的是《秦始皇本纪》,还有几篇字数上万的篇章如下:
  而字数最少的篇章只有几十个,上百个字,应该是原始的文本资料不全。
  查看一下原始数据,果然,这是《史记》十表的内容,原始文件把表的内容省略了,估计是因为原始文本是OCR识别得出的结果,可能因为那时的OCR技术识别不出古籍影印图片中的这部分内容。
  我特意查了一下《史记》的古籍影音资料,表是确实存在的,只是文本资料省略去了。看来,古籍数字化的工作还任重道远啊。不过我们比起古人来说,这样已经好太多了。许多古人一辈子可能都看不到一本完整的书。
  接下来我想做一下文字的统计,看整部《史记》中用到的单字的频率分布,看那些单字用得最多,通过这样的分布,可以惊鸿一瞥,大概了解一下整部《史记》的文字面貌。
  当然,除了单字,最好是看词汇分布,但是古文词汇分词是一个很困难的事情,不像单字分词那么容易,即使是最先进的人工智能模型,也不能够好好解决这个问题。所以,古文的词汇分词我留到下一篇文章再来讨论,那是人工智能自然语言处理科目中一个很基础,很重要的话题。
  下面代码用来把史记Pandas文表中的卷文融合在一起,装到一个字符串中,由此可以得到全文的所有单字字符串。史记全文。join(史记文表〔卷文〕。tolist())print(全文字数:,len(史记全文))print(前50个字:,史记全文〔:50〕)
  运行结果如下:
  再来看看无重复的单字与全文单字的对比情况,可见无重复的单字只占很少的比例,中文只需要用少量的单字排列组合就可以书写很多内容。有多少无重复的单字?无重复单字set(史记全文)print(无重复单字的数量:,len(无重复单字))print(无重复单字与全文单字的比例:,{:。00}。format(len(无重复单字)len(史记全文)))print(前30个无重复的单字:,sorted(无重复单字)〔:30〕)
  再来去除一些停词,也就是助词以及一些常用但可以忽略的词语,如,之乎者也之类的词。可以看出停词占的比例有13左右。除去停词(助词以及一些常用的但可以忽略的词)停词〔之,乎,者,也,哉,矣,而,不,其,于,曰,以,有,故,则〕无停词史记全文〔tfortin史记全文iftnotin停词〕print(无停词史记全文〔:10〕)print(史记全文字数:,len(史记全文))print(去停词史记全文字数:,len(无停词史记全文))print(无停词文占全文的比例:,{:。00}。format(len(无停词史记全文)len(史记全文)))
  然后可以通过nltk工具包来查看一下《史记》全文单字的频率分布,看哪些字出现的频率最高,来看看排名前十的单字都是些什么(要查看更多的内容,也随时可以查,但是这里篇幅有限,就不一一列出了)。我们可以看出出现最多的是王字,有8000多次。查看词频分布史记词频分布FreqDist(无停词史记全文)首十个字FreqDist(dict(史记词频分布。mostcommon(10)))plt。figure(figsize(25,10))plt。xticks(fontsize20)plt。yticks(fontsize20)plt。tightlayout()首十个字。plot()
  对于陌生的文本,这些单字或词汇,甚至重复句子的出现频率等,这些信息可以有助于我们了解文本的大体内容是什么,还有作者的行文风格,等等,从而得出一些初步的评估。
  我记得有人通过这样的方式,来研究《红楼梦》前八十回和后续的四十回章节是否是同一个作者写的,研究发现,似乎两者的行文风格,用词确实存在着一些隐藏的差别,所以有人估计确实不是同一个人写的。以后我有空也来做一篇《红楼梦》的文本分析,看看有什么发现。
  对于词频的分布,除了图表的展示,还有一种特别的可视化方式,叫做词云,我们来做一个史记全文的词云看看是什么效果:词云分布plt。figure(figsize(25,10))wcfdWordCloud(backgroundcolorwhite,fontpathcontentgdriveMyDriveGujiCoolGujiLibmsyh。ttf)wcfd。generatefromfrequencies(史记词频分布)plt。imshow(wcfd,interpolationbilinear)plt。axis(off)plt。show()
  可以看出来,这种频率分布的效果更加显著了,字面越大代表它出现的频率越多,这样更加能够认识到全文的风貌了。
  今天就到这里吧,这篇主要集中在全文的单字分析上,下一篇尝试进行词汇分析,以及对单个章节进行更详细的细节分析,了解一下不同章节各自的具体情况。
  喜欢的话,请关注与点赞哦!

为什么有的公务员不选择当处长而当二级调研员?无官一身轻省直机关的处长一般也是二级调研员,处长和二级调研员政治待遇有差别,经济待遇一样。为什么有的公务员宁愿选择二级调研员呢?无非压力大责任重,职务晋升等方面的原因。一是压力大责大众探歌怎么样?最低落地多少?大众探歌这款车型定位是一款紧凑型SUV,主要竞争对手还是日产逍客本田XRV等小型SUV。外观方面主打年轻时尚,采用了大众全新的家族式的设计语言,前脸造型时尚精致,圆形的雾灯显得非常想换电车,我喜欢理想one,我爸却只看中比亚迪,怎么说服他?不用说服谁出钱谁决定最终选项即可本篇简单解析理想ONE和唐DMip的特点,主要讲解混动系统的差异。1。理想ONE这台车应当是3040万区间本期的SUV和中大型SUV的销量冠军了,单怎样才能煮出奶白的骨头汤来?饭馆里的骨头汤里都放了哪些材料?欢迎关注鑫雨霏霏的头条号,更多美食,更详细的做法都在鑫雨霏霏的头条号里。我比较喜欢喝汤,喝纯的老火靓汤,在广州生活喝汤比较容易,在北京喝汤,很多餐厅为了提鲜,都会放大量的味精,喝完怎么测试自己适合哪个dnf的职业?多玩玩就知道了,反正dnf一般都会完好几个号,不管是为了搬砖玩活动还是新奇都会玩好多号,讲讲我玩dnf的经历,已经四年不玩了哈!第一个职业圣骑士忘了什么时候反正dnf公测不久,只记2021新加坡世界杯总决赛,陈梦和孙颖莎谁会取得女子单打冠军?感谢邀请!随着王曼昱提前被爆冷淘汰出局,WTT世界杯女单冠军的争夺,主要是集中在孙颖莎陈梦两个人身上。不过,由于国乒球员经过近期接连大赛征战,每个人的疲劳程度不同,各自的技术实力又未来会不会大规模出现云电脑云手机?云电脑云手机现如今,网络技术不断发展,云计算云存储等云技术早已得到了广泛应用,人们对于云技术早已见惯不怪了。然而,随着5G网络技术的落地,和人们对于个人电脑个人手机的性能要求日益提马云的财富上千亿,那他能去银行取上千亿现金吗?这个里面可能涉及到两个问题。马云是否能够从银行取出来1000亿现金,第二个问题是马云是否会这么做。1是否能够取出来现在马云财富达到了484亿美元,折合人民币大概是3146亿元,这其香港的旅游店卖的瑞士手表是不是真货?一般来说,香港的几样东西确实比大陆便宜得多,比如化妆品世界名牌时尚服装皮具精品手表等(要在大陆没有设厂的品牌,比如雅诗兰黛香奈儿CD等,而在大陆有厂的品牌就比大陆还贵,象美宝莲什么为什么中国的6。9元人民币,才能换1美元,怎么计算的?分三种情况第一,完全由国家规定!稍微有点货币知识的应该知道,最早的货币是天然的黄金和白银,所以最早的由国家发行的货币就是金币和银币(中国古代最广泛使用的是铜币,金银币不多)。后来经重庆涪陵产的榨菜和浙江余姚产的榨菜,哪里的更胜一筹?榨菜是我们餐桌上的调味品,偶尔懒一下,不做菜可以拿榨菜当道小菜,吃面的时候,吃点榨菜会让面的味道立马升华,味道立马不一样,所以普通老百姓的人常生活中还真是离不开榨菜的。国内榨菜产地
冯胜弃地明军与新疆失之交臂,大明恢复汉唐故土的梦想泡汤公元1368年,乞丐出身的农民起义军领袖朱元璋在应天(今南京)建立大明帝国,是为明太祖。随后,朱元璋以徐达常遇春为正副统帅,率领25万明军精锐北伐,半年内,明军就从长江打到长城,兵前蜀异人精通异术预测他人命数奇准术数是中华文化中一套预测命数运势和人事吉凶的理论和技艺。术数是源于中国古代的一种玄奥精深的科学,历朝历代都出现了不少精通阴阳术数的人。他们将五行八卦天文历法中的各种元素进行对应组合苏共亡党苏联解体是一次大进步还是一场历史灾难?20世纪90年代,在人类历史上,发生了这样一件震惊世界的重大事件在没有外敌入侵和特大自然变故的情况下,一个有2240万平方公里横跨欧亚两个洲的超级大国苏联,一夜之间解体覆亡!如何对河北这座城市,曾为300多年的省会,如今没落的无人问津河北这座城市,曾为300多年的省会,如今没落的无人问津,你知道是哪里吗?河北省,古属冀州,燕赵之地,现如今又是京畿重地。由于特殊的地理位置,自古就是兵家必争之地。现如今河北省会城市在古时候有可能掉脑袋的职业,今天却是挤破脑袋都想进的香饽饽杜钟骏是晚清的一名候补知县,宣称拿手医道,被引荐入宫给光绪看病。后来他留下一篇回想文章德宗请脉记,里边说,自己在诊病前已深知慈禧和光绪的忌讳,皇太后伪君子说皇上肝郁,皇上伪君子说自盘点历史上影响中国后退百年的十大人物,你认识几个?第一位赵高他是历史唯一一个以太监身份成为一国丞相的人,凭借一己之力摧毁秦国七代人200多年的努力。第二位贾南风她是西晋时期晋惠帝司马衷的皇后,贾充的女儿。貌丑而性妒,因惠帝懦弱而一豫宛西地方自治领袖彭禹廷彭锡田(1893一1933)字禹廷,河南省镇平县安字营乡七里庄村人。彭禹廷是著名将军彭雪枫的族叔。彭锡田(字禹廷),中国现代历史上从事乡村建设运动的主要代表人物之一,是南阳(宛)西多年隐忍,只为复国,夏朝少康,究竟做了哪些努力?少康,本名姒少康,也可叫作杜康。曾祖父是娰启,祖父是姒仲康,父亲为姒相,母亲为后缗。少康不仅是中兴夏朝的贤王,还是中国历史上首次记载的畜牧官和厨子。启死后,他的儿子太康继位,太康沉21位陕西籍长眠新疆的烈士事迹及陵园位置(本文不是原创,资料宝贵,希望看见的转发,便于烈士亲属后人祭奠)清明节快到了,清明祭英烈,浩气伫乾坤。21位陕西籍长眠新疆的烈士名单事迹及陵园位置等,资料由路客LUCKL提供,感谢孔乙己脱下长衫后变成骆驼祥子,就真的可以脱离困境吗1894年,绍兴鲁镇镇口。一位身材高大脸色青白的中年人走到咸亨酒店当街的曲尺形大柜台前,小声对伙计招呼温两碗酒,要一碟茴香豆。他的皱纹间夹杂着几道细小的伤痕,花白的胡子也乱蓬蓬的。崇祯时期,已有两亿人口的大明朝,为什么会因为缺钱而走向灭亡?明朝为什么会灭亡?其原因很多,但无论哪个原因,都离不开一个钱字。天下西攘,皆为帝王。一个王朝要想运转下去,就得有足够的财富,毕竟军队也是要吃饭的。明朝末期,崇祯就是因为没钱,才导致
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网