数字史学 ‖ 文本挖掘
Posted 新古史辨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字史学 ‖ 文本挖掘相关的知识,希望对你有一定的参考价值。
传承古史辨派科学求真精神,促成传统文化现代转型
编者按:这是王涛老师第三讲,欢迎继续关注。
如果一切历史学都是史料学的话,那么以文本形态存在的史料,是历史学者需要处理的最重要的文献。历史研究的功夫在很大程度上取决于对史料的解读能力,传统的研习方式,我们可以将其概括为“细读”(close reading)。
毫无疑问,细读的方式能够对文本史料的意义有深度的把握。不过,一个显著的挑战在于,在许多历史研究领域,我们真正所要面临的难题,不再是史料不够,而是史料读不完的问题。
细读的方式无助于问题的解决。据说普通人的正常阅读速度是每分钟300字左右;换句话说,一个小时大约可以读完一篇学术论文。当然,如果是一位有学术积淀的学者,用速读的方式,应该能够在一个小时内对一部学术专著有比较全面和准确的梳理。但这还仅仅是使用母语的速读,如果你是一位研究英国史、法国史的学者,纵使外语水平极高,也很难达到母语的熟练程度,阅读速度肯定会有所打折。在这样的现实处境下,一个学者一天工作8个小时,在不吃不喝的情况下,大约能够完成对160万字的梳理。
但这样的速度,就远远谈不上是“细读”了。因为细读的要求远比“浏览”高很多,还需要对阅读的文本进行必要的记录、分类和整理,都是比较花时间的工作。
列举这个假想案例的目的其实很简单,传统的阅读方式存在极限,如果不是用时间换取数量的话,人文学者对文本的掌握情况其实极其有限。
出路在于“遥读”(distant reading)的理念和方法。我们可以把遥读理解为基于自然语言处理技术开展的文本挖掘方案。
遥读能够帮助学者获得对大量文本的某些特质的快速认识。
我们在这里其实有3个限定语:
大量
基于遥读的理念,文本在“算法”的视域下变成一种结构化的数据,电脑的算力在通常的任务场景下具有“大数据”的处理能力;
某些特质
针对文本处理的方式有很多程式化的算法,可以对文献的特征进行提取,但对文本的内在逻辑梳理或许无能为力;
快速
只要我们对文本处理的目标明确,算法运用得当,获得结果的时间成本极低。
在研究实战中,遥读具有很多思路和方法,其实都是在“自然语言处理”(Natural Language Processing,简称NLP)这个专业学科的框架下进行的。NLP被认为是人工智能领域的一颗明珠,功能强大,应用场景多元,但对于人文学者的研究任务而言,并不是通吃的工具。另外,NLP的技术路线颇为精深,各种术语和公式足以让人文学者望而生畏。所以,我们主张“最小计算”的原则,而且始终服务终端用户的立场,只讲方法和思路,不谈公式和算法,让人文学者将技术手段用起来而不必知道黑箱里面的生产过程。
文本处理有简单的方式,也有稍微复杂的方式。我们在这章先介绍简单的方式,让大家体会到遥读的有用性。
一、文本处理的准备和原理
当然,我们在对文本进行处理之前,需要对文本做一些清洗的工作,或者叫文本预处理。这个工作流程可以用下图表达:
(图1:文本处理的工作流)
需要解释下面几个概念:
标准化(Normalization) 将文本中的大小写、标点符号、特殊字符等进行处理的过程;
分词(Tokenization) 将文本拆分为最小的语义单位。在英语、德语等西方语言文本中,由于词与词之间天然存在空格键,可以非常容易实现拆分的动作。而中文没有这种外在的符号特征,让中文分词面临着极其困难的技术难点,有人戏称,如果NLP技术被认为是人工智能领域的一颗明珠的话,那么中文分词技术就是自然语言处理领域的明珠。
移除停用词(Stop words) 是将文本中只有语法价值,没有实质含义的词,比如冠词、系动词(am/is/are)、介词、代词等去除的动作。因为它们往往高频率出现在文本,但并没有提供语义信息,为了减少计算的成本,一般会消除停用词。但需要注意的是,移除停用词的操作只是一个通用的操作,许多处理平台和工具都会自带“停用词表”,它只适用于一般情况,对于具体的文本,可能还需要根据研究的课题自定义停用词(甚至,在某些研究环境下,不需要去除停用词),这个操作需要因研究而异。
词性(Part-of-Speech,简称POS) 是人类理解文本的重要方式,进行文本分析,如果事先对词汇的词性有了解,那么可以在算法的帮助下,帮助我们更好理解文本内容。各种文本分析的平台和软件会使用POS标注器,对每个词返回一个标签。这样做的好处是,我们可以定向对某些词(比如名词、动词)等进行处理,极大降低了运算量。
在POS标注的基础上,我们还可以对文本进行实体项识别(Named entity recognition,简称NER),即对文本中的地名、人名、组织、时间、度量单位等进行标注。
在西方语言的文本中,往往通过词尾的变化来体现词汇的语法功能,比如名词单复数,动词的时态等。这些变化在通常情况下对意义没有实质影响,但会给统计词频带来麻烦。比如tastes、tasting、tasted,本质上是一个词,对这样的情况,有两种处理方式,一个是词干提取,就是将词汇的语法变化还原为相同的词根,对上述案例,词干提取的结果就是tast;另一种方式为异形转化,在词性标注的基础上来确定单词的原形,上述案例的转化结果应该是taste。
从效率来看,词干提取要粗糙一些,有时会生成不是完整单词的词干(将“tasting”转化为“tast”),从而会损失语言信息;而异形转化则是一种更高级的方案。
相对简单的“遥读”方式主要是词频统计。简单来说,就是计算文本当中词汇出现的频率。
这是非常简单的思路,大家会觉得,这样做有什么价值吗?
2017年,曾经有学者在《高等教育纪事报》上发文,强烈质疑用词频统计的方式分析文本是否具有价值;作者举例说,研究者通过算法了解到《白鲸记》的文本中出现“白鲸”的频次假设有1700次,这个事实能说明什么问题吗?
从某种意义上说,这个结果确实不属于很了不起的发现,但我们用遥读的方式呈现了一种客观存在的事实,而且这个事实如果不使用词频统计,我们不会想到,因为它并非一目了然。单独从这个文本出发,这样的发现或许并不重要,但如果结合其他文本,或者其他的问题域,这样的结果就能说明一些问题了。
这种用量化的方式暴露文本特征的方式,以所谓“齐夫定律”(Zipf's Law)最为有趣。基于词频统计,齐夫定律描述的是文本当中词汇的出现频次遵循“幂率分布”的模式。用通俗语言来解释,如果把一段文字中的所有词语按出现频率从高到低排列起来,排名第二的词语出现频率约为排名第一的一半,排第三的词语出现频率约为第一名的三分之一,依次类推。这个规律何其简单,初等数学的基础知识就足以将结果计算出来。然而,令人惊讶的是,这种语言规律普遍存在于各种文体、以至于各种语种的文本,甚至在非文字领域也有类似的分布规律。齐夫定律不能帮文学家了解曹雪芹创作《红楼梦》的内心世界,虽然《红楼梦》的文本也可能遵循这个定律。但是,齐夫定律就在那里,即使我们不用算法将其暴露出来,正如同万有引力定律就在自然界,如果不是牛顿用数学公式将其描绘出来,就不为人知一样。而一旦人类了解了万有引力,整个世界都不同了。跟所有数字人文的方法类似,词频统计有时候就在扮演《皇帝的新装》里那个说出真想的小男孩的角色。
遥读让研究者换一种思路看文献。有一个比较容易进行试验的文本就是美国历届总统的就职演说。演说词是很有代表性的文本,在NLTK软件包中集成了第一任总统华盛顿到第44任总统奥巴马的演说词,合并成一个文件,跨度有200多年。这个文献集从规模上看并不大,总字数不超过15万字。用传统的细读方法也不是一个不可能完成的任务,但传统研究无非是去解读演说词中的修辞手法、象征意义,或者蕴藏的文化现象,比如对《圣经》的引用等。
如果用词频统计的方法来做一番验算,会看到不一样的文本呈现。我们可以统计特定关键词在文本当中出现的位置,从而对其历时性的频率获得形象的认知。
(图2:基于NLTK的词频分布)
上图的X轴代表整个文本,Y轴用蓝色线段表示指定的关键词,颜色越深,表明分布越密集。我们可以看出好几种状态,或者说“模式”(pattern),像citizens或者nation,首尾的分布非常平均,说明美国总统们偏爱这两个词。结合美国政治语境,以及就职演说的文体特征,“公民”、“国家”成为高频词并不意外。但也存在完全不同的关键词分布模式。比如state,在早期演说词中比较经常出现,后期越来越稀疏;而America刚好相反,后期的演说词成了大热门。
这两个词所呈现的状态是个别总统演说的习惯使然,还是有深刻的政治文化背景?都是值得研究者继续挖掘的话题。这个现象是词频统计的方法暴露出来的一种问题意识,传统的细读方法虽然也可以做精细的统计,但未必会有类似的发现。另外,套用技术手段的优势在于,我们可以对各种关键词进行尝试,却没有额外多出来的时间成本和技术成本。
当然,在很多时候,词频统计暴露出来的客观现实,需要研究者结合自己的知识背景进行解读,这样才能有效发挥词频统计的作用。在本案中,America的频率在后期越来越密集,似乎可以把这种现象与总统的政策挂钩,这跟包括奥巴马在内的总统们强调回归美国价值的意愿比较吻合。这样的解读是否合理,还需要结合更多专业知识来完善。而这样的研究路径,正是基于文本挖掘手段所具备的探索性研究的价值所在:在文献中发现了隐匿的信息。
那么问题来了,上述演示的案例,是在python代码中实现的。有没有不用写代码,就能够完成相似的工作呢?
答案是肯定的。文本挖掘是非常成熟的技术领域,既有许多独立的软件包,也有集成的网络平台,都能够在零代码的前提下完成许多文本挖掘的工作。
二、网络平台Voyant
我们推荐使用的文本分析平台为Voyant,其网址为:https://voyant-tools.org/
进入平台后,是一个极简的界面,需要我们将待分析的文本导入平台。
(图3:Voyant的首页)
我们不需要对文本进行任何预处理,就可以上传到Voyant。
平台有两种导入文本的方式:
2. 点击空白框下面的[upload],将存在本地电脑硬盘里的文件上传到平台。它支持批量上传文件,支持的文件格式包括txt、html、PDF、Word等。
[open]将会打开系统平台默认的文本,包括莎士比亚和奥斯汀的文本。它们主要发挥样本文献的作用,跟我们自己的研究关系不大。
我们在这里使用马克斯·韦伯《新教伦理与资本主义精神》的德语文本为例子进行说明。文本可以在百度网盘下载。
不管用哪种方法,文件导入平台后,会自动进入工作界面。
(图4:Voyant的工作界面)
看上去比较复杂。这是因为Voyant自动对文本进行了处理,并将使用不同文本分析工具的结构都呈现在了同一张页面上。每一个小窗口都代表一种文本分析的算法/工具,比如[Cirrus]就是文字云,[Trends]就是我们前述使用美国总统就职演说词统计关键词在文本位置的结果,只是选取了另外一种可视化的效果。
你可能会说,我用不上这么多工具,我有非常明确的目标,只想用一种文本分析的算法看看结果。这个需求很容易被实现,我们只需要调整一下界面的呈现属性。
比如,我们只想做一个基于简单词频统计的文字云。当我们把鼠标移到界面最上方蓝色条时,会发现右侧会多出几个图标出来:
(图5:调整工作界面)
用鼠标点击一下
就会弹出一个菜单,这里包含了Voyant平台所有的文本分析工具。
(图6:Voyant的工具汇总)
我们可以看到,Voyant对工具进行了分类,大家有兴趣的话,可以浏览一下,对Voyant平台的各项功能获得一个整体性的把握。
通过路径[Corpus Tools]→[Cirrus],我们就能够进入文字云的专属界面:
(图7:Voyant制作文字云)
这个基于简单词频统计的文字云,是理想的结果吗?根据前面介绍的文本预处理的流程,我们知道在使用Voyant平台的时候,缺乏几个关键步骤。当然,有一些预处理的工作流已经由Voyant在后台自动完成了。但是,就目前呈现的结果看,至少在去除停用词这个环节并不理想。我们看到了诸如 “überhaupt”、 “gengenüber”、 “gerade”、 “zunächst” 等词汇,这些在德语中发挥语法功能的副词对于我们分析韦伯的思想或许并不重要。
Voyant没有把它们剔除,我们出于研究的目的不需要它们,要如何操作呢?
同样是把鼠标移动到标签为[Cirrus]的灰色条,然后会发现灰条上多出几个按钮:
(图8:调整参数)
我们用鼠标点击
就会出现一个菜单,允许我们对文字云的属性进行设置:
(图9:调整参数)
在[Options]的属性标签之下,有几个参数值得关注:
[Stop words]即可定义“停用词”;系统可根据文本的语言,自动调用相应的停用词表,如果默认的停用词表不完整,还可以点击[Edit List]对默认停用词表进行编辑,允许添加/删除自定义的停用词;在我们的案例中,系统中默认的[German]停用词表并不能直接套用到韦伯的文本,我们可以自主添加一部分停用词,比如gerade、gengenüber、zunächst等,以及由于文本特殊性所具有的干扰词,如z.b等。
注意后面有一个选项[apply globally],建议把它勾选,其含义是使用其他文本分析工具的时候,自定义的停用词表具有通用性。
(图10:自定义停用词表)
与[Stopwords] 的功能刚好相反(想排除的词),[White List]则是自定义需要呈现的关键词,如果保持默认值的话,或者[None],就是严格按照词频的序列进行显示;
[Categories]允许用户对关键词进行分类。
至于[Font family]、[Palette]等参数,则是对可视化的字体,颜色等进行调整。
很多参数都可以选择默认,改变设置结果就会呈现不同的文字云:
(图11:调整后的文字云)
效果比第一次好一些,不过,我们依然发现一个问题。比如在新的文字云里,"gott" 与"gottes", "lebens" 与 "leben" 等,被视作独立的词汇,这样的处理有一点简单粗暴,也就是说,Voyant的系统没有进行“异形转化”的功能。这是Voyant作为一个简单易用的平台,缺乏更多自定义设置的表现。
但如果你能接受这样的缺陷,或者你的文本分析对“异形转化”不是特别敏感,那么一张能够说明问题的词频统计的可视化就完成了。我们要导出这个结果也非常容易。鼠标移动到[Cirrus]的灰色条,选择这个按钮
就会弹出一个对话框,有好几种导出的数据格式:
(图12:导出文字云)
选择PNG格式,根据提示另存为图像文件在自己的本地硬盘。当然,还有一个更简单的方式实现同样的导出功能,就是用截屏工具把生成的可视化结果保存为PNG格式的文件。
如果你以为Voyant只能做一张文字云,那就太小瞧它的价值了。我们在前面已经提到Voyant平台提供了一系列的文本挖掘工具。我们的教程无法一一介绍,只能重点演示几种常用的工具。
如果大家对其他工具的用法感兴趣,可以参考该本平台官方帮助文档,网址为:https://voyant-tools.org/docs/#!/guide
1.Bubblelines
这个功能十分接近图2的效果,用一种更形象的方式将关键词在文本中的位置呈现出来。不同颜色的气泡表示选定的不同关键词,气泡的大小表示文本中关键词的频率。气泡越大,关键词出现的频率越高。
(图13:Voyant的气泡图)
注意页面底部有[Granularity]的参数,其含义是划分文本的颗粒度,即把多少字符作为一个处理单元。其默认值为[50],最大值为[300],最小值为[10]。
2.Links
在文本分析的时候,我们有时特别关注特定关键词上下文的语境,也就是它更经常与那些词共同出现。这个文本属性对于我们理解某个关键词在特定文本中的含义非常有帮助。
(图14:voyant的关键词共现图)
在我们给定的几个关键词中,已经能够大致窥探出韦伯所书写的“资本主义”、“加尔文宗”以及“生活方式”的内涵。特别有趣的是,在"gott"与"beruf"之间,是由"menschen"链接在一起的。这或许是“新教伦理”与“资本主义精神”最直观的体现。
另外,共现词的原理是将在特定语境中出现的两个词视作一个网络,所以两个词汇之间的连线是它们紧密程度的体现,线条越粗,共同出现的频率越高。"kapitalismus"与"geist"之间的高频率显然有目共睹。
Voyant进行了比较友好的界面设计,我们可以在页面上任意拖动关键词,随意调整它们的位置,从而避免词汇的叠加和阻挡,让这张网络图更加美观。
请特别留意页面下方的[Context]这个参数,它将决定关键词上下文的长度。该数值表明关键词前后两侧的单词数,比如我们想了解lenbensführung这个概念的共现词情况,将[Context]的参数设置为5,表明该词前后5个单词,共计10个词将作为考察的范围。默认情况下,上下文设置为左右两边各5个单词,最大值为30。
该工具跟[Document Tools]→[Contexts]的算法原理相同,只是呈现的方式不同,前者用列表的方式呈现,而[Visualization Tools]→[Links]使用的是图像。
3.Scatterplot
在实际的研究工作中,我们常常需要同时处理大批量的文档。比如,如果要研究18世纪剧作家莱辛的各种文本,想了解这位剧作家的文体特征,就需要对每个剧本提取属性(比如词频、共现关系等信息)。从常识判断,属性越多,对文本的描述越准确。但从统计学的意义上看,属性越多,不可避免会有冗余信息,大量冗余信息的存在,会直接导致运算效能的降低。
为了规避这个问题,在统计学上就出现了主成分分析法(Principal Component Analysis,PCA),我们可以简单地理解为对信息进行压缩,只去关注重要的属性。专业术语叫“降维处理”,顾名思义就是对数据进行特征提取,找出最主要的成分来近似地表示所有的变量,以达到缓解计算压力的目的。
降维为什么有用呢?
我们可以打一个比方,警察在追击小偷的时候,最习惯的做法是把小偷逼近死胡同,这样小偷就无路可逃,只得束手就擒。但是,小偷当然很狡猾,他一定会往道路条件更复杂,出口更多的街区逃窜,这样警察要布控的点就多了,抓捕效率也降低了。如果小偷往一间购物中心逃窜,不仅路线更多,出口更多,还有不同的楼层,被抓住的几率就更小了。
在这个类比中,购物中心就是一个三维空间,街区是一个二维空间,而死胡同就是一维空间。不同的场景,耗费的人力物力不尽相同。在文本分析中也一样。如果我们把莱辛的不同文本想象成不同维度,每一个文本、维度都有不同的属性(词频、对应关系),那么要对本文特征进行计算,就意味着极高的运算成本。所以,降维处理一方面是提高了运算效率,另一方面也方便我们对数据进行可视化呈现:如果不做降维处理我们很难在一张平面图上展现莱辛多部剧本的所有特征。
Voyant提供了Scatterplot工具来自动完成文本特征提取和可视化,能够协助我们对多文本文献集进行分析。
(图15:基于PCA的散点图)
我们在这里处理了莱辛的八部剧本,提取的特征为相对词频,然后使用PCA方法进行了可视化。得到的结果能让我们对高频词的聚类情况一目了然。
左侧的工具面板,还提供了多种参数的设置:
其中,[Frequencies]提供特征提取的方法,包括3中词频的统计方式:Raw Frequencies、Relative Frequencies以及TF-IDF,分别对应原始词频、加权词频和词频-逆文档词频。关于TF-IDF我们会在后面再详细介绍。
(图16:散点图的参数)
[Terms]让用户决定在右侧的工作平台上一次显示多少关键词;
[Analysis]下提供了多种分析的方法,最主要的当然是PCA,还包括:
对应分析(Correspondence Analysis),在概念上与PCA类似,但处理数据的方式是分析行和列。换句话说,它会给每个文档一个单词频率表,在可视化结果中将体现文档与词频的关系;
t-SNE,一种比PCA更优秀的算法,规避了PCA的局限性;
文档相似度(Document Similarity),主要分析文档直接的相似程度,不会有关键词出现在可视化结果中。
至于[Clusters]和[Dimensions]则可以定义聚类的数值和维度。
Voyant平台的优势在于,界面简单,操作步骤灵活,功能比较齐全。如果我们只是把文本分析当作一种辅助的研究手段,那么Voyant是比较好的选择。
该平台的劣势也非常明显:在线平台受到网络条件的影响,会直接影响工作的流畅度和运算速度。另外,正如我们在前面已经提到的那样,平台的文本分析工具自由度比较低,很多功能缺失或者无法自定义。这些劣势都是我们在选择该平台进行文本挖掘时需要注意的。
要规避Voyant平台的弱点,我们推荐使用单机版的软件。
三、单机版软件介绍
在NLP处理领域,已经有大量软件被开发出来,有的软件一次只能完成一种文本计算,有的软件集中了多种算法。
Anthony教授开发的软件简单易用,我们介绍一款软件AntConc的用法,大家可以举一反三,掌握其他软件的使用技巧。
从官网下载之后,直接打开软件就可以使用,无须安装。
(图17:AntConc工作界面)
从这个软件的界面可以看到,AntConc并不是一个功能单一的工具,它实际上集成了七种比较常用的文本分析流程:
Concordance:计算“上下文中的关键词”(Keyword in Context,简称KWIC),我们可以观察指定关键词出现的语境;
Concordance Plot:用可视化的方式观察给定关键词在文本中的位置;
File View:对文本进行浏览,更仔细查看文本分析工具的结果;
Clusters/N-Grams:了解词块/词簇/词束的情况,即观察经常在一起出现、能够表达完整意义的组合方式。两者有一定的区别,clusters需要研究者给定关键词检索,后者无需特定的词汇,N的数值可以从2-6不等;
Collocates:分析从统计学意义上词簇的情况;
Word List:提取文本的关键词,并按照词频排列;
Keyword List:与参照文本进行比较,了解低频词,从而对研究对象文本有更深入了解。
AntConc可以处理单一的文本,也可以批量处理文本。我们在导入文本的时候做一个选择就可以,通过路径[File]→[Open File...]或者[Open Dir...]添加待分析文本或者文件夹中的所有文本。
(图18:导入文本)
我们仍然使用韦伯的文本作为例子进行演示。导入文件后,我们可以在[Search Term]下面的空白处键入想要检索的关键词,比如“kapitalismus”点击[Start]之后,就能够得到结果:
(图19:Concordance的结果)
有时,我们想对检索更精准一些,比如我们想了解文本中,kapitalismus与Geist同时出现的频率(前后5个单词之内)。这时,需要打开[Advanced],进行参数设置:
(图20:参数调整)
勾选[Use Context Words and Horizons],然后在[Context Words]下的空白框键入Geist,之后点击[Add]。在[Context Horizon]里设置5L、5R,即搜索前后5个词,最后点击[Apply],返回AntConc的工作界面,重新点击[Start],就会有新的结果呈现。
工作界面有一个选项[Kwic Sort],是为了让以关键词为中心的结果呈现更直观,检索词为“0”,前面2个词就是2L,以此类推,相关的词会用不同的颜色表达。
(图21:参数调整后结果)
KWIC的功能主要让我们观察文本的上下文情况。现在,我们来利用Word List来做一个词频统计。
正常情况下,点击[Word List]标签后进入新的工作界面,单击[Start],就会有一个结果出来。通过前面的学习,我们知道,这个词频统计既没有排除停用词,也没有进行异形转化,效果肯定不好。比voyant强大的地方在于,AntConc非常容易实现上述两项操作。
点击菜单栏上的[Tool Preferences],选择[Word List]进行调整。停用词表需要手动导入,在[Word List Range]里,选择[Use a stoplist below],然后在[Add Words From File]中,从本地硬盘导入停用词表。我们在前面已经介绍过,停用词表可以自行定制。
稍微需要注意的是“异形转化”功能的实现。在AntConc中,原形转化需要有一个词典,告诉系统哪些词需要还原成原形,其格式如下:
gott->gottes, gott
或者
gott->gottes gott
然后将每个词作为一行的格式,保存为一个txt的文件。在[Lemma List]中,将其导入,在我们的案例中是de_lemma.txt这个文件。
(图22:自定义异形转化词表)
在做了上述准备后,我们重新点击[Start]运行,就得到一个更友好的结果。高频率的停用词被剔除了,而且我们注意到系统将词汇的各种变化状态都做了显示,让异形转化的情况一目了然。这个结果还可以导出系统单独保存为文件。在这个词频列表的基础上,我们还可以让AntConc运算词簇的情况。
(图23:word list结果)
最后,我们可以利用[Keyword List]来计算文本的“主题词”。需要强调的是,AntConc采用了统计语言学中“关键性”(keyness)的概念来描述文本的主题:被研究的文本需要与一个目标文本进行对照,通过计算相关性来确定主题性。
我们仍然使用韦伯的文本,对照文本选择维基百科上关于韦伯的词条。在运行[Keyword List]之前,我们要确保已经通过[Word List]提取了文本的所有词频。对照文本添加的路径是[Keyword List]→[Tool Preferences]→[Keyword List],在[Reference Corpus]下,点击[Add Files],将本地硬盘的对照文本上传。注意一定要加载进入系统,即要点击[Load]按钮。
(图24:设置参数)
其他的参数我们都不用理会,点击[Apply]之后,返回工作界面,然后点击[Start],就能顺利获得主题词的列表。
大家一定会发现,AntConc计算出来的主题词非常少。造成这个局面的原因比较复杂。首先,我们之前在[Word List]环节,采取了去除停用词和异形转化两个动作,极大地减少了词频;同时,待处理的韦伯文本内容简洁,总体的字数在35000左右;第三点或许更加重要,我们选取的对照文本来自维基百科词条,跟韦伯的文本不仅在时代上有错位,而且在文体风格上也有差异。这三个因素都影响了主题词的提取。在实际的研究工作中,更通行的方法是从待处理文本中切割一部分出来作为对照文本。只是在我们的例子中,韦伯的文本本来就短,所以就临时找了其他文献作为参考文本。
正是由于这样的原因,有一些学者认为,在对文本计算提取文本特征的时候,停用词不必删除,从而最大限度的保留原始文本的信息。依笔者所见,是否剔除停用词并没有定规,需要根据不同的文本类型以及研究目的进行选择。最简单的办法就是两种情况都尝试一下,看哪种结果更能够说明问题。
(图25:提取关键词列表)
我们在上面介绍的AntConc在若干年前就开发出来了,虽然作者一直在维护升级,但它最大的缺陷是功能比较单一。2018年底,上海外国语大学的一位研究生叶磊在前人的基础之上,开发了一款功能更加集成的软件Wordless。该软件可以从百度网盘免费下载,提供Windows、MacOS以及Linux等多种版本。
网址为:
https://pan.baidu.com/s/1h48UA2roCHD9Bp3EzSoexQ
密码为:k3ny
我们有AntConc的经验在前,Wordless就很容易上手了。Wordless最大的优势是将各种语料资源做了整合,能够自动识别待处理文本的语种,然后自动调用与该语种对应的停用词、异形转化词典等资源。
由于Wordless与AntConc的相似性,我们只通过一个案例来演示Wordless的用法:计算韦伯文本中N-grams。前面已经提到,Wordless可以进行多语种的分析,我们可以充分利用这个优势,同时处理不同的文本,比如我们想对韦伯文本的德语,以及中文、英语的翻译版本进行对照分析,用Wordless将会是比较好的选择。
(图26:计算n-grams)
从上面的截图可以看到,Wordless的界面其实有三个部分:左下显示文件的导入导出,右侧是各种设置的窗口,左上是工作界面。左上有七个标签,是Wordless集成的主要工具,与AntConc有重叠的地方,也有一些细分的功能。
点击N-grams标签,然后在右侧的设置窗口进行参数设定,你可以选择是否进行去除停用词,是否进行异形转化,N的参数设定(在我们的例子中N=2),以及是否连续计算(通过勾选[Allow skipped tokens]来体现)。
(图27:n-grams文字云)
我们不能轻视词频统计的作用,也不能高估它的价值。它在本质上是一种统计算法,需要历史学者在学术理念的框架下进行阐释。在实际的研究工作中,不论是使用voyant平台,还是诸如AntConc这样的软件,我们都需要不断反问自己,基于算法的“遥读”对于文本的理解有什么帮助。我们不能止步于冷冰冰的算法输出,也不希望被技术阻挡了想象力,而要时刻保持清醒,严肃地提出人文学者的真实需求,这样才能在技术的指导下完成饱含人文主义的解读。
文本计算擅长进行重复性和标准化的工作,看似缺乏人文的气质。但套用一下艺术家罗丹的话,生活中并不缺乏美,而是缺少发现美的眼睛;我们稍作改变,文本中并不缺乏问题,而是缺少发现问题的方法。各种文本计算工具,恰好可以扮演发现问题的眼睛,关键在于找到合适的语境。举个例子,圣经研究中有所谓“同观福音”的现象。简言之,研究者可以把不同的文本放置在同一套标准之下检验,能够得出有趣的结论来。而这样的视角,恰好是文本计算最擅长的本领。
我曾经做过一个尝试,将马克斯·韦伯的名著《新教伦理与资本主义精神》一书的德语原版、英译版以及中译版并置在一起,用同样的算法进行文本计算,然后比较结果之异同。这种研究思路异常简单,但它能够帮我们发现翻译过程中的再创造过程,也有利于研究韦伯的思想家找出对韦伯命题误读的状况。所以,谁又能简单地否认,德语版中“Askese”出现57次,而中译版“禁欲主义”出现141次,不是一个值得关注的现象呢?
面对这么多能够实现文本计算的工具,我们要如何选择呢?
实际上,各种工具背后的算法基本相似,对我们的研究结论没有本质影响。唯一的差别是使用的难易程度和自定义的功能。如果你需要处理大量文献资料,在voyant平台可能会有网速的限制;如果你的研究文本以中文为主,那么Wordless可能更加合适,因为它是由中国人开发的,对中文的支持更友好一些。如果你需要处理的文本更多是古代汉语的话,推荐使用CText之下整合的多款文本分析工具,其网址为:http://ctext.org/plugins/texttools/#help;以及台湾大学开发的DocuSky平台,网址为:http://docusky.org.tw/DocuSky/ds-01.home.html。后两个在线平台在其主页上就有相关教程,大家可以自行查阅。
相关软件与数据百度网盘下载链接:
https://pan.baidu.com/s/1wosYvL9ak8k3ByIDqU5avA
提取码: hp95
参考书目:
Steven Bird等著,《Python自然语言处理》,北京:人民邮电出版社,2017年。
Nitin Hardeniya著,《NLTK基础教程》,北京:人民邮电出版社,2017年。
Heather Froehlich, "Corpus Analysis with Antconc," The Programming Historian 4 (2015), https://programminghistorian.org/en/lessons /corpus-analysis-with-antconc.
研究案例:
邱伟云等,中国近代平等观念形成之数字人文研究:以报刊为中心,《清华大学学报》2018年第6期,第1-33页。
王涛,如何用电脑阅读5万份题录——基于大数据的德国史研究的学术史分析,《历史教学问题》2016年第5期,第21-29页。
欢迎扫码关注新古史辨
以上是关于数字史学 ‖ 文本挖掘的主要内容,如果未能解决你的问题,请参考以下文章