摘 要:立足于XML技术,以数据挖掘为应用背景,研究、探讨了面向XML数据库的挖掘技术。基本出发点是充分发挥传统数据挖掘中成熟丰富的技术优势,兼顾XML数据库的特点,实现二者的紧密结合,最终达到能够对以XML数据库为挖掘源进行简便、有效的挖掘这一目的。在全面介绍XML及其相关技术的基础上,针对提取关联规则这一数据挖掘目的,给出了基于XML数据库的关联规则挖掘方法,旨在探索出一种面向XML数据较好的挖掘方法,解决从XML这种半结构化数据中挖掘知识的问题。
关键词:数据库;数据挖掘;研究分析
1 前沿
近年来,随着数据挖掘技术的蓬勃发展,面向以结构化数据为主的数据挖掘技术的得到了长足的发展,并日益走向成熟。它已被越来越多的领域所采用,并取得了较好的效果,在数据挖掘领域积累了大量经验。但是面向结构化数据的挖掘技术很少有处理Web上的异质、非结构化信息的工作。所以,面对XML这类半结构化的文本数据,并不能将传统的数据挖掘技术完全照搬过来。要实现面向XML数据库的数据挖掘研究就必须将传统的面向结构化数据的数据挖掘经验技术和XML特有的技术规范相结合。由于XML规范发布至今不过短短几年的时间,尽管其应用前景非常广阔,但就总体而言,XML相关技术及其应用仍然处于研究、探索阶段,对其进行挖掘的研究更是如此。
2 总体结构
传统的数据挖掘将分为三个主要部分:数据准备、数据挖掘和知识的确认与提炼。本文在构建结构时也基本继承了这几个主要部分,不过因为XML数据库是针对XML文档的特殊数据库,与其它关系型数据库的存储方式有些不同,所以在其中加了XML数据库存储这个部分。新的结构包括四个部分:数据预处理、XML数据库存储、XML数据挖掘和知识表示。基于XML数据库的数据挖掘过程如图1所示。
数据挖掘过程是数据挖掘的核心步骤,不同的挖掘目标采用的挖掘方法和技术都不相同。在XML数据库环境下进行关联规则挖掘就可用到XML数据库提供的特有的技术。XQuery是XML的查询标准,提供了丰富强大的查询功能,用它可以实现传统的关联规则挖掘算法来直接对XML文档进行挖掘分析。使用这种方法不需要对XML文档进行预处理及挖掘后处理,实现起来简单快捷。
3 XML数据挖掘
3.1挖掘方案选取
对XML的挖掘包括对XML结构上的挖掘和对XML内容上的挖掘两种[2-5]。XML的内容指的是文档中每个开始标记和结束标记之间的文本部分,对其内容的挖掘其实也就是对标记的值的挖掘。目前,XML结构挖掘研究相对较多,内容挖掘研究较少,这里主要研究的是XML内容挖掘:包括单个XML文档挖掘和群组XML文档挖掘。
XML的内容挖掘主要有三类方案:
第一种是通过一些专门为XML数据或半结构化数据开发的查询语言,如XML-QL,XML-GL,XQuery等,利用其查询功能,嵌入到其他应用程序中,从而获得数据集进行挖掘。这种方法的优点是能够将XML技术与数据挖掘技术紧密结合,且实现起来简便。
第二种是将XML文档的数据结构化,映射到现有的关系模型或对象模型中,从而可以使用较成熟的数据挖掘方法对其进行挖掘。但是XML本身的一些半结构化特点可能会导致在映射过程中产生一些问题。
最后一种解决方法是将XML文档看作是一个文本,进而使用传统文本挖掘技术进行挖掘。如使用矢量空间模型(VSM)将文档空间看作是由一组正交词条矢量所组成的矢量空间,通过统计词频、缩减维数等步骤,达到机器学习、获得知识的目的。但这种方法并没有考虑到XML文档仍存在一些结构化的特征。此外,数据量大、数据过于详细也会导致文档的特征向量巨大,造成挖掘困难。
在XML数据库环境下进行关联规则挖掘就可用到XML数据库提供的对XQuery技术的支持。将XML的查询语言与传统数据挖掘方法相结合来提取XML文档中的关联规则,也就是通过用XQuery来汇总数据集,进而实现挖掘算法。
3.2 XML挖掘实现
选用XQuery实现关联挖掘算法来进行挖掘,不需要对XML文档进行预处理及挖掘后处理,实现起来简单快捷。只需要调用XML数据库提供的XQuery引擎,执行相应的XQuery就可以直接得到挖掘出的关联规则。
在X-Hive数据库中提供两种方式来执行XQuery。
方式一:用XhiveNodeIf对象的executeXQuery(String query)方法来执行XQuery语句,它将返回iterator。结果集的每个元素都是XhiveXQueryValueIf对象,还可以将它转换成DOM的节点来进行进一步操作。
方式二:用XhiveXQueryQueryIf对象调用execute()来执行XQuery语句。这种方式可以引入外部参数,通过setVariable方法来绑定参数。
用XQuery实现挖掘算法来挖掘关联规则需要传递参数,这里选用了第二种方式来执行XQuery。调用接口执行XQuery完成数据挖掘的代码如下所示:
Procedure XQueryXMLMining(String fileXQueryName,float minSup,float minConf)
{
db=GetConnect(userName,userPassword,databaseName)
transaction=db.get(libraryName)
strXQuery=ReadFile(fileXQueryName)
XhiveXQueryQueryIf Query=Transaction.createXQuery(strXQuery)
mineFilenames=GetFilenames(Transaction)
Query.setVariable("filenames",filenamesInLibrary)
Query.setVariable("minSup",minSup)
Query.setVariable("minConf",minConf)
Return Query.execute();
};
输入参数是保存XQuery挖掘算法的文本文件名、最小支持度和最小可信度。为了增强程序的灵活性,方便XQuery的修改,以及不同XQuery实现算法的替换,将XQuery代码存放在文本文件中。要从文件中提取出XQuery代码,需要传递XQuery所在的文件名。通过GetConnect函数与XML数据库建立连接。由于待挖掘的XML存放在transaction文档集合中,创建文档集合对象transaction与transaction文档集合进行关联。ReadFile函数读取保存在文件中的XQuery代码,并赋值给变量strXQuery。X-Hive数据库通过调用XhiveXQueryQueryIf对象来执行XQuery代码,这里建立一个XhiveXQueryQueryIf对象Query。GetFilenames函数从transaction文档集合中提取待挖掘的XML文档名,用XQuery可直接从XML数据库中读取文档只需要将待挖掘的XML文档名传递给它。通过setVariable方法将待挖掘的XML文档文件名、最小支持度和最小可信度与XQuery代码中的参数绑定。最后,通过调用Query的execute方法执行XQuery代码,并将执行结果返回。
XML挖掘
的最核心的部分是用XQuery实现有效的关联规则挖掘算法。Jacky等人已经使用XQuery实现了经典的Apriori算法,并成功的从单个XML文档中提取出了关联规则,证实了用XQuery来直接进行数据挖掘的可行性。使用这种方法不需要对XML文档进行预处理及挖掘后处理相对其他方法要简单实用。但是仅用XQuery实现Apriori算法还存在一些不足。首先,只能对单个XML文档适用,不能处理多XML文档的挖掘;其次,需要多次扫描数据库,要挖掘频繁k项集就需要扫描k次,效率相对低下。针对这些问题,将用XQuery实现传统的Partition算法来进行挖掘。Partition算法将数据库从逻辑上划分为多个块,然后挖掘多个划分块中的关联规则,将划分等同于XML文档就可以进行群组XML文档的挖掘。又由于这种算法只需要扫描数据库两次,减少了数据库扫描次数提高了时间效率。选用这种算法将从挖掘范围和挖掘效率上都得到提高。
结束语
详细描述了基于XML数据库的数据挖掘过程。在预处理过程中运用DOM和Schema技术对数据进行XML规范性处理;在存储过程中分析了各种XML数据存储方案,并通过XML数据库提供的存储接口将符合规范的数据存储到XML数据库中;在挖掘过程中用XQuery实现挖掘算法直接对XML数据挖掘。
参考文献:
[1] 卫金茂,王石,伊卫国.基于XML的数据挖掘.计算机工程与设计,2003,24(10):106~108,125
[2] 李由,黄凯歌.XML的数据库存储技术研究.计算机应用研究,2002,19(4):60~62
[3] 曹亮,王茜.XML数据在关系数据库中存储和检索的研究与实现.东南大学学报,2002,32(1):124~127
[4] 刘刚,喻成.Native XML数据库的研究与应用.微机发展,2005,15(8):65~67
[5] 潘有能,邓三鸿.基于XML和关联规则的Web挖掘研究.现代图书情报技术,2004,7:30~34