摘 要: 随着计算机技术的飞速发展,数据和信息以各种文件格式被组织并存储在计算机系统中。为了提高对数据和信息的共享效率,需要进行文件格式转换,支持不同软件的处理和应用需要。采用经典的软件开发方法和技术,设计和实现一种文件格式转换器,支持将一种专用的文本格式文件转换到关系数据库文件。
1 ARFF-DB转换器的应用背景
ARFF-DB转换器的应用背景来自于机器学习领域的Weka系统[1]。Weka把ARFF格式的文本文件转换为数据库的记录格式,形成由实例(Instance)和属性(Attribute)组成的关系,再通过机器学习,发现规则或者概念。
ARFF(Attribute-Relation File Format)是Weka使用的数据文件输入格式,其样例如下。
%1.Title:Iris Plants Database
%
%2.Sources:
%(a)Creator:R.A.Fisher
%(b)Donor:Michael Marshall(MARSHALL%PLU@io.arc.nasa.gov)
%(c)Date:July,1988
%
@RELATION iris
@ATTRIBUTE sepallength NUMERIC
@ATTRIBUTE sepalwidth NUMERIC
@ATTRIBUTE petallength NUMERIC
@ATTRIBUTE petalwidth NUMERIC
@ATTRIBUTE class{Iris-setosa,Iris-versicolor,Iris-virginica}
@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
文件由两部分组成,第一部分被称作文件头(header),第二部分被称作数据(data)。Header部分是由@RELATION和@ATTRIBUTE组成,其中,@RELATION声明了数据实例所在的关系名称,例如:iris(鸢尾花);@ATTRIBUTE声明了数据中属性的名称及其类型,例如:属性名sepallength(花萼长度),属性的类型是numeric(数值型)。属性类型除了numeric,还包括real、integer、nominal、string和date,其中,real和integer均被视为numeric;nominal型属性值属于离散值,可以通过枚举方式给出所有属性值(例如:class属性,其值在{}中列出,属于名词型属性,具有离散特性);date属性值应符合ISO-8601,格式为YYYY-MM-DD。Data部分由@DATA导出,每个实例的相关属性值为一行,上例中每个实例的属性值均与@ATTRIBUTE部分定义的属性一一对应,还可以由其他表示实例属性值的方法[1]表示。本例中给出了10个实例数据,每个实例都有5个属性值。更多ARFF文件格式的内容请参见参考文献[1]。
2 软件开发方法
随着软件开发需求的增加,各种软件开发方法和技术层出不穷。各类驱动式[2]、敏捷编程[3]软件开发方法不仅被广泛应用,而且其变体和扩展也被深入研究[4-5],以期提高软件开发效率和软件质量。在开发文件转换器中,同样使用了用例驱动开发方法实现主界面、基于GUI的开发方法实现程序主题框架。尽管如此,开发使用的核心和基本方法仍然是经典的逐步求精软件开发方法,需求分析和设计主要采用自顶向下方法,实现阶段则采用自底向上方法。
自顶向下的程序设计思想,就是在系统分析与设计中,采用不断分解的方式,把一个大问题逐步分解为若干个小问题,直到所有的小问题都只具有简单的逻辑功能,可以用程序语言直接实现,而不需要再分解。
自顶向下的程序设计思想既可以采用自顶向下的实现方法,也可以采用自底向上的实现方法。自顶向下的实现方法指在程序实现时,先实现上层功能较复杂的程序逻辑功能,其中所需要的下层功能较简单的程序逻辑功能可以以一个空体代替(即stub)。自底向上的程序实现方法指在程序实现时,按照分析的结果,先从下层代表简单小问题的逻辑开始实现,逐步向上,依次实现由各个小问题模块支撑的较大问题模块,直至整个程序功能实现。
在ARFF-DB转换器实现中,采用自顶向下的分析和设计方法、自底向上的程序实现方法,这种分析和解决问题的方式,符合人们的思维和实践习惯。
3 系统分析与设计
按照软件工程的观点,程序开发过程最基本的步骤包括:系统分析、系统设计和系统实现。本文按照这一步骤进行ARFF-DB转换器设计与开发。
3.1 系统基本功能分析
系统分析是通过分析系统的功能,搞清系统“做什么”。最简单、最基本的一种分析方法就是通过说明目标系统的输入I(input)、处理P(process)和输出O(output),反映系统的功能。通过分析,ARFF-DB转换器的IPO如图1所示。
3.2 系统功能设计:自顶向下,逐步求精
系统设计考虑如何实现系统分析中明确的系统功能,即:系统“如何做”才能实现ARFF文件到DB文件的转换。要使用自顶向下的设计方法,把大问题分解为小问题,直到每个小问题都有了明确的解决方案,设计过程即告完成。因为自顶向下的设计过程会把大问题、较大问题逐步分解为较小的、更接近系统实现的问题,所以这个过程也被称为逐步求精。
在系统分析的IPO中,要从输入的ARFF文件处理“文件解析”模块开始考虑。首先,系统读入一个ARFF文件;然后对ARFF文件的内容进行解析,把@RELATION中的关系名字、@ATTRIBUTE中的属性名字和类型作为创建数据库表结构的依据,能够把@DATA中的每一行实例数据作为一个记录添加到数据库文件中。“文件解析”和相应的输出部分就是对顶层的“转换处理”向下的一步求精。进一步向下求精出“形成文件对象”子模块。
“文件解析”子模块的输出,将其转换为相应的数据库,需要以解析的三个结果为输入,创建数据库表,并将实例数据作为记录写到数据库中,然后得到相应的数据库文件。这一部分可以定义为“创建数据库”子模块。它也是对顶层的“转换处理”向下的一步求精。同样地,对于“创建数据库表”子模块,可以进一步向下求精地设计为“建立数据库连接”和“访问数据库”。
综上所述,通过自顶向下的逐步求精设计过程后,得到的设计结果如图2所示。
到此为止,自顶向下的设计基本上将“转换处理”的问题逐步求精、分解到可以通过程序直接处理的若干子问题。然后将根据这个设计结果,使用具体的程序设计语言和工具来实现ARFF-DB转换器。
4 程序设计与实现
根据系统分析和设计结果,开始进行系统的程序实现,这时的问题就是程序设计语言和开发工具(平台)的选择。因为笔者对Java语言较熟悉,所以使用Java作为程序设计语言,选用jdk1.6.0_02。数据库系统使用MySQL[6]。另外,对于开发平台和工具,这里使用的是命令行,编辑器使用textpad。
4.1 程序组织和结构设计
转换器程序使用了包的结构。程序的结构由包和其中的类形成,用树的形式表示如表1。
4.2 界面的程序设计与实现
ARFF-DB转换器的主界面效果如图3所示。
4.3 ARFF文件及其解析的设计与实现
依据系统分析和设计的结果,程序设计实现了ARFF文件的封装和读入。程序定义ARFFFile类,用于封装ARFF文件,并支持对arff方法文件的读入。设计ARFFFileAnanlysis类,定义analyze方法,用于实现ARFF文本的解析逻辑。
4.4 数据库的创建与读写
在“文件解析”的过程中,输入ARFF文件,输出中给出数据库的相关信息,包括数据库关系名称、数据库属性名称和属性值类型、数据库关系中的记录。转换器设计实现了ArffDbCreator类,把解析出的数据关系名称和数据属性名称以及值类型作为输入,创建数据库,输出得到一个数据库表;然后,将数据记录信息读入到该数据库表中,并通过读出记录,测试数据库的建立和读写操作是否成功。这部分功能的实现主要涉及到从Java通过JDBC连接,访问相应的数据库。
4.5 主逻辑设计、实现以及程序的整合
本文在实现阶段采用自底向上的实现方法,即首先实现下层的程序逻辑(子功能),然后再通过整合各个子功能,实现较高层次的程序逻辑,直至实现程序的整体逻辑功能。
目前已经设计实现了“文件解析”逻辑和“数据库创建及写入”逻辑,现在要设计一个程序主逻辑,以便将上述两个底层逻辑整合到一起,完成转换器程序的整体功能,即:从ARFF文件到数据库表的转换。
主逻辑设计主要考虑的是用户使用“转换器”系统的方式以及要求的系统功能。这里,用户使用的是GUI,通过GUI设定的菜单进行功能选择。这个过程可以通过用例及用例图来描述[5]。如图4所示。
5 总结
ARFF-DB转换器实现了从ARFF文件到数据库文件的基本转换功能。本文采用自顶向下方法完成了ARFF-DB转换器的系统分析和设计,采用自底向上方法完成了程序实现。今后要对处理arff文件中的残缺值问题给出更好的解决方案。还要在ARFF-DB转换器基础上实现DB-ARFF转换器,使得转换器功能更完善。
参考文献
[1] WITTEN I H, FRANK E.数据挖掘:实用机器学习技术[M].北京:机械工业出版社,2007.
[2] 彭顺顺,周传生.基于数据驱动的图形界面开发方案[J].微型机与应用,2013,32(19):1-3.
[3] 王刚,程建平.面向业务的敏捷界面定制构件的设计[J].微型机与应用,2012,31(7):11-13.
[4] 王飞,郭渊博,郝耀辉,等.面向用例安全关键系统开发方法研究[J].计算机应用与软件,2013,30(8):134-138.
[5] 谢东强.敏捷软件开发的双迭代模型[J].计算机应用与软件,2012,29(6):176-178.
[6] LARMAN C.UML和模式应用[M].北京:北京机械工业出版社,2006.