《声律启蒙》原文文本结构化数据库的设计与实现
黄传连 郭世仁 周志德
摘要:研究了《声律启蒙》原文文本的声韵格律的虚实对应,设计了对应电子数据库的结构化方式,给出了从文本到数据库数据转换的算法流程,得到的数据库为进一步的智能检索系统提供了基础。
关键词:声律启蒙;中文自然语言处理;数据库
0.引言
清朝康熙年间车万育所作的《声律启蒙》是训练儿童应对、掌握声韵格律的启蒙读物。它分为上下卷,按韵分编,包罗天文、地理、花木、鸟兽、人物、器物等的虚实应对。从单字对到双字对,三字对、五字对、七字对到十一字对,声韵协调,琅琅上口,从中可以得到语音、词汇、修辞的训练。
本文研究的主要目的,是以《声律启蒙》原始本为基本参考,利用信息技术和自然语言处理技术全面对其电子化和信息加工,构建一个完整的数据库,为下一步的智能检索和学习辅助系统的设计和开发提供基础。
1.相关背景
对联是我国的一种传统文学,是音形义合一的汉字所特有的艺术。在中国民间,对联已经被广泛的使用超过一千年的时间了。对联和诗一样,使用精练的语言,不过,对联更讲究形式的工整,要求上下联字数相等,断句一致,词性相对,平仄相合。正是因为有了这些严格的形式要求,对对联并非易事,古人因此也常把对对联当作考验才学的一种方式。对现代人来说,由于对传统文学的生疏和缺乏对对联的练习,对对联就更是不容易了。对联写作的困难使得对联这项传统艺术在现代社会被使用得越来越少,除了过年贴在门上的春联,其他地方已经很难再看到人们使用对联。为了使对联写作变得更加容易和有趣,使对联这项传统艺术能够在现代社会发扬光大。微软开发了计算机自动对联系统——“电脑对联”,希望利用计算机快速的计算和强大的记忆能力帮助人们更轻松的完成对联的写作。
虽然如此,微软的工作是针对传统对联进行计算机智能化拟对。而对于一本适合儿童应对和掌握声韵格律的启蒙读物《声律启蒙》的结构化、电子化和智能化工作尚未见公开文献。
本文在数据模型基础上设计了应对电子数据库,基于《声律启蒙》原文文本的分析和研究,对各韵字、韵句格式进行分析,按照其规律通过穷举的方法转换数据到相关数据库中。进而使用程序实现了文本到结构化数据的自动抽取和存储。以此数据库为基础,可以进一步实现对各韵字进行相关对仗词汇的查询以及《声律启蒙》的应对辅助学习系统。
2.数据库的设计
(一)对应《声律启蒙》文本的分析
首先,按照对联中韵字的虚实对应应该建立一个表,其属性应为上联韵字、下联韵字等,为减少系统冗余,应为韵字单位建立一个表。韵字表中应该具有记录韵字出处、出自何句、注释等属性,以便用户在检索时能够更快更准确的得到期望的结果,这便形成了最基本的数据库表。为了扩展韵字中的字所表达的信息,扩展出带有拼音、简码等信息,以此为对搜索功能扩展提供数据基础。最后,考虑到用户在检索得到结果后方便查看结果条目的原文,因此,应为书籍章节及原文提供独立的数据表格。
(二)数据库库关系图
根据上述设计分析,本系统数据库应具有章节、映射、关键字、对仗及原文五大表,各表具有如下关系:一个关键字对应多个映射,一个章节对应多个原文,一个章节对应多个映射,对仗中的上下联均对应不同的映射,数据库全局关系图如图1所示。
(1)章节表(chapter):保存章节名、章节序号信息,具有外键回自身表,以示章节问树形结构关系:
(2)关键字表(KeyWord):用户检索关键字入口,包括关键字、拼音、简码、注音等描述关键字的信息;
(3)映射表(Mapping):将不同章节中包含的关键字与映射表进行关联,与章节表,关键字表进行外键映射,并有出处、注释等属性:
(4)原文表(OriginText):就保存个章节原文的数据表格,与章节表进行外键映射:
(5)对仗表(Parallelism):与映射表进行外键映射,列明个映射间虚实对应关系。
3.《声律启蒙》文本电子化转换程序的设计
(一)程序结构设计
鉴于将《声律启蒙》转化为电子数据库过程的复杂性,本程序设计应以模块化为设计思想对系统进行设计,将复杂问题简单化。因此,将转换过程拆分为4大模块:
(1)对电子文本进行读取;
(2)对读取的电子文本按上下对句进行切分;
(3)分析切分得到的上句与下句,找出所有潜在的虚实对应:
(4)将分析结果及章节、原文等信息保存至数据库进行持久化操作:
其次,考虑到使用本程序结构以对其他与声韵格律有关书籍进行转换以扩展数据库语料及不同文本转换的方式可能存在不可预料的差异,所有模块的设计都针对接口进行编程,使程序模块可以进行可插拨式的替换。
根据以上设计思路,本程序可分为4大模块:文本读取模块(TextReader)、文本切割模块(TextSpliter)、数据分析模块(Analyser)、数据存储模块(Preservable),与此对应的程序结构如图2所示。
下面重点介绍文本阅读器和文本分割器的设计和实现。
(二)文本阅读器(TextReader)的详细设计
文本阅读器的实现用于对原文本电子文本进行读取,并转化为具有一定通用性的原始数据模型,且各书籍原文本段落排列结构存在一定差异,因此除实现本模块的功能外还须对原始文本进行一定程度格式化,以实现无差异读取的能力。《声律启蒙》原始本各章有一单字标题,每章共有三个段落。因此,以《声律启蒙》卷一·东为例,其文本如下图所示:
如上图可见,一段格式化后的问题应包括以下几部分:
(1)章节序号:用于与书本序号及二级序号进行组合得到最终的章节序列号:
(2)章节名:包含在“[]”括号中,与实际章节名称对应;
(3)原文:原文应该以段落为单位,以分隔符“-”为起止标志的一段或以上的列表。
对于按章节为单位文本块,文本阅读器应提供读取单个文本快或读取全部文本块等方法。
DefaultTextReader为对应《声律启蒙》以及对应格式化文本的文本读取类,对相应格式文本文件进行读取。并将读取得到的数据保存为扩展了章节类属性的适配器中,使原始数据得到了保存,为之后的转换及分析步骤提供基础数据。
(三)文本分割器(TextSpliter)详细设计
文本分割器对读取得到的原文按段落进行切割l引,得到过滤多余标点、字符的上下联字串,并确定与之对应的原文单句。
(1)分割算法的设计及算法流程
由于《声律启蒙》原文各段格式具有一定相似性,利用控制符作为过滤段落通配字符串,并对控制符控制的部分在队列中进行排列加以输出,即可实现对《声律启蒙》原文进行分割。
定义控制符以“{”为起始标记,以“}”为结束标记,若读取通配符为控制符,则跟据控制符定义内容对原文进行截取,若为普通字符,原文则跳过对应字符。控制符内容应符合“{fulL][sizel*]}格式,其中[UIL]表示该字符块是上联字符还是下联字符,[sizel*]表示字符长度,“*”表示最大长度,即取字串直到莫字符为标点“,”或“。”
根据上述描述,可与原文段对应的通配符应为:
{U1}对{L1},{U1}对{L1},{U2}对{L2}。{U2}对{L2},{U2}对{L2}。{U3},{L3},{U2}对{L2}。{U5},{L5}。{U7},{L7}。{U*},{U*};{L*},{L*}。
算法流程如图5所示:
(2)文本分割器的对应实现
DefaultTextSpliter实现TextSpliter接口,以《声律启蒙》为算法研究对象实现了对应的文本切割算法。其中,splitParagraph()为实现算法的方法体,splitParagraphList()为对多个段落进行批量分割的内置方法,其类结构如图6所示。
数据分析模块与文本分割器设计结构具有一定相似性,负责对文本分割器分割过后的数据文本进行进一步加工,以穷举的方法得到所有潜在的虚实对应。
4.结语
本文致力于把《声律启蒙》的原始格律文本进行数据库结构化存储这一目标,在分析器原始文本基础上,设计了对应的数据库结构以及文本转换流程。利用实现的转换程序,经对应的文本格式化及数据转换对全文上下2卷共30章进行了处理,得到的数据库包括了潜在关键字13881个,原文映射17562个及虚实对应8781对。这个数据库为下一步的智能检索以及《声律启蒙》学习辅助系统的开发和应用奠定了基础性的工作。