结构化数据和非结构化数据之间有哪些区别?这些区别如何影响各自的数据挖掘方法?
回答:
我熟悉的术语是结构化和非结构化数据(与您的问题中提到的相同,只是后缀不同)。
我在机器学习中处理这两种类型的数据,我不知道有任何正式的定义;然而,我认为几乎所有需要区分这两种数据类型的人都能轻松区分它们。
结构化数据的例子包括:电子邮件发送的日期/时间;是否有附件,或电子邮件的发送者。非结构化数据的例子是:电子邮件的正文。
是否有一套稳定的规则来区分这两种数据类型?我认为是有的。首先,如果您可以为数据元素构建一个解析器,那么它就是结构化的数据。
另一个经验法则是查看数据库中存储该数据所需的字段的数据类型。如果是文本类型——对于MySQL来说,是Tintext、Text、Mediumtext或Longtext。或者不太可能的是VARCHAR(255)——那么这些数据很可能是非结构化的。
这种区分对于数据挖掘的主要意义可能是:结构化数据一旦从文档中提取并解析后,可以作为统计/机器学习模型中的变量使用。然而,非结构化数据需要进一步解析——即,在您将其用于建模之前,您首先需要将其分解为一组结构化数据元素——例如,单词数量等。
例如,假设您想为一家制作在线MMORPG的公司内的服务器组构建一个知识管理(KM)系统。您可能从该组成员之间交换的大量电子邮件消息开始。
因此,您为这个来源创建一个数据模型——例如,由’sender’(发送者)、’recipient’(接收者)、’date/time sent’(发送日期/时间)、接收者和发送者是否都是服务器组的员工、消息是否被复制给其他人等字段组成。数据库的行是各个电子邮件。
然后,您编写一个由一组解析器组成的脚本,以从每封电子邮件中提取每个字段。对于许多字段来说,这很简单,例如,对于’cc:’字段,您编写一个解析器来扫描电子邮件消息的那部分,并检查它是否为空——如果是,那么该行在数据库中的该字段可能会填入’False’(表示没有抄送任何人),否则填入’True’。同样,日期/时间,可能是某种形式的:16 Mar 2011 18:45:39.0319 (UTC)。提取和解析这些数据同样简单;事实上,您的脚本语言几乎肯定有一个模块来完成这项工作。
但是,当您处理到电子邮件的正文时,虽然从电子邮件的其余部分提取它并不困难,但解析它并不简单。您的数据模型可能有“NumberOfWords”(单词数量)、“Keywords”(关键词)等字段,并且构建一个解析器来填充这些字段很简单。然而,最有用的信息却更难获得——即,电子邮件对接收者是否有帮助?主题是什么?它是否具有权威性?