上一篇:《Using OpenRefine》翻译~13
第四章:数据集关联
数据集之间并不是互相独立的。总在某些时候,可能在你预想不到的地方,数据之间互相关联,比如,如果你的数据集有一列是关于国家的数据,那么这列就和国家地理数据库有关联。一个书籍数据库中关于作者的列就和人物传记数据库有关联。所有的数据集都有这种联系,但是可能你并没有觉察到,有时候计算机也没有。举个例子,书籍数据库中某条关于The Picture of Dorian Gray的记录可能列出作者是Wilde, O,但是人物传记数据库中可能只有一条关于Oscar Wilde的记录。虽然它们都指向同一个人,但是具体表达式是不同的,这也导致很难对它们进行关联。另外,确实很难对所有数据集进行关联,因为实在数据量太大了。
所以,我们的目的是找到单元格值得唯一标识符。这里就是URL(统一资源定位符)。我们这里不再用名称Oscar Wilde来唯一标识,而是使用URL地址 http://en.wikipedia.org/wiki/Oscar_Wilde.来代替 。这样不光 我们 能够使用URL来 唯一标识作家Oscar Wilde(不会与碰巧叫同一个名字的人搞混),而且还可以通过点击链接来访问更多的信息。因此,URL可以使得我们能够把不同的数据集互联起来。在本章中,我们将学习如何把 与URL进行关联,具体的内容有以下几点:
•点1-使用Freebase解析值
•点2-安装扩展包
•点3-增加解析服务
•点4-与关联数据进行解析
•点5-抽取单名称项
和以前一样,你也可以直接阅读你感兴趣的点。但是请确保在学习后三点前学会如何安装OpenRefine扩展包。学习每一点前请使用原始的Powerhouse Museum数据集,其中Categories列已经扩展成了多行。
•点1-使用Freebase解析值
当你想将单元格值从一串简单字符串转换成URL时,你有很多的选择,因为一个确定的内容可以被很多URL所解析,这些不同的URL指向同一个主题。只要每个URL都清晰无误的指向一个单一的内容就没有什么大的问题。但是,我们还是得确定一个我们所要使用的URL。在互联网上,有很多关于内容的数据库,最出名的是Wikipedia。对于人类来说有很多这样的数据库,当然对于电脑来说也有很多。有一个例子是Freebase。这是一个共创知识集,基于对机器可读的特性,基本上覆盖了现有大部分主题。
在openRefine以前叫做Google Refine的时候,其是被Freebase创建者MetaWeb拥有的,并且它的名称叫做Freebase Gridworks。作为一个处理大数据集的工具,其天生就和Freebase结构化数据相契合。 |
因此,我们将把单元格值解析成Freebase URL。因为Freebase 解析是OpenRefine内置的,所以我们可以直接尝试。记得我们在对Powerhouse数据集进行处理的时候Categories列已经被分割成多行。这很重要,我们必须确保每个单元格包含单个值,这个值将于一个Freebase主体匹配。多内容字段比如Description就不合适用来直接解析。(对于这种情况,可以使用本章最后一点:抽取单名称项来解决)
点击Categories 列下拉菜单:Reconcile|Start reconciling…. 开始对单元格进行解析。OpenRefine 会弹出解析对话框。在对话框左侧你可以看到解析服务项,有两个Freebase解析项是内置的:
• Freebase Query-based Reconciliation: 当列值已经是Freebase IDs (比如 /en/solar_system) 或者 GUIDs(十六进制标识符)时特别有用。
• Freebase Reconciliation Service:此项不要求严格与Freebase标识符对应,用来应对更加一般的情况。
很显然我们需要选择第二项:Freebase Reconciliation Service.进过一会,OpenRefine会在右侧显示服务参数配置界面:
你的OpenRefine打开界面可能和上图略有不同,因为你可以自己安装解析服务,我们将在下一点中介绍 |
有三个选项可以用来设置。首先,你需要确定什么类型的记录需要解析。这个能够限制只搜索特定的主题,这在你的列只包含城市或者人名时十分高效。这样设置的话解析会很快,并且发生错误解析的可能性较低。在你选择解析服务并开始解析后,OpenRefine会与解析服务器你选择的部分数据进行交互,并且尝试猜测你列的数据类型。这里恰恰不凑巧,这里提供的Categories列的两个选项:人名和地址并不与该列明显相关。当然我们也可以选择Reconcile against type.来自己设定,但是这里我们并不能确定是否数据集中的categories列是否属于某个特定的类型,所以我们只选择Reconcile against no particular type.
第二个可以选择的选项是Auto-match candidates with high confidence。解析服务会返回一个匹配分数,这个分数来指示匹配的程度。这个选项默认是选中的,这表明如果分数足够高,OpenRefine会假设这个选择正确并且申明这个匹配。对于其他单元格(如果你去掉了该选项勾选),那么你就得手工确认匹配项。我们的建议是你还是保留勾选,因为这能够节省大量的时间。
第三个也是最后一个选项能够让我们发送额外列数据到解析服务器。这不同于匹配单列值,这个选项可以让我们考虑多个列内容。你需要指定某个合适的列。对于Powerhouse Museum数据集,并没有这样相关的列存在。但是如果你有一个数据集,包含国家名称和国家码,那么将它们同时发送到解析服务会比较好。
选中Reconcile against no particular type ,点击Start Reconciling.解析进程需要一段时间完成,因为OpenRefine需要对每一个单元格值进行解析以找到一个URL。顶部黄色的提示条会告诉你进度。
解析过程需要时间,你可以休息一下或者干其他工作,而让解析过程在后台运行。解析结束后,你会发现OpenRefine自动创建了一列:judgement并且显示了best candidate's score透视图。
judgement 透视图将数据集中的行分成“已解析到”和“未解析到”,另外还有Categories列中的空值单元格(这些本来就无法解析)。你可能会感到奇怪,这里只有 (blank)和none ,那已解析到的行呢?
很不幸运,这表明,用Freebase解析的结果是没有找到匹配项。是不是意味着我们做错了呢?不是,这只是表面我们的数据Freebase并没有涉及到。那是不是以为这Freebase不是一个好的解析方式呢?当然不是,这只不过碰巧不适合我们的数据。你可能在其他数据集中得到结果,所以值得一试。
让我们撤销透视,点击RemoveAll 按钮,或者通过Undo / Redo菜单撤销(你可以通过Categories下拉菜单| Reconcile |Facets.重新获得透视图)。下一点我们将介绍如何使用其他的解析服务。
某些时候,你可能仅仅想看下解析服务如何运作。那么是不是意味着每次都需要对全部数据进行解析呢?如果你使用透视功能就不需要!我们可以尝试对一小部分数据进行解析来了解是否需要对所有数据也进行解析。我们可以作下随机选取,比如,我们可以对Record ID列运行文本透视,输入比如4.因为所有ID是按自然数顺序增加的,所以我们大概可以选出10%左右的数据。如果这些数据还是过大,那你可以增加数字位数知道数据量减少到几百左右,比如,413就比较合适。 |
•点2-安装扩展包
虽然OpenRefine能够让你简单的开始解析服务,但是这些服务必须以其规定的方式运行。其实,还有很多不同的解析服务,如果你想使用它们,你就需要以扩展包的方式添加到OpenRefine中。所以在我们介绍如何使用这些解析服务前,我们首先需要学习如何安装这些扩展包。当然并不是所有的扩展包都是用来提供解析服务的,所以这里只介绍一般的安装过程。在写本文时,有许多OpenRefine扩展包可用,比如下面:
• RDF 扩展包( Digital Enterprise Research Institute(DERI)),这个包提供了对RDF导出格式的支持,对SPARQL 终端查询功能的支持,我们将在下一点中介绍。
• Named-Entity Recognition (NER) 扩展包,此包是本书作者之一所写,可以让你从多内容单元格中抽取URL。本章最后一点将会介绍。
和OpenRefine一样,扩展包也是免费的。最新可用扩展包清单可以在https://github.com/OpenRefine/OpenRefine/wiki/Extensions查到,也可以通过此页面的链接下载。因为扩展包多种多样,所以你可能会疑惑如何安装。本点将介绍如何安装它们。
首先,你需要找到扩展包安装的路径。这个取决于你的操作系统,当然OpenRefine能够帮助你找到。在开始界面的底部 ,有一个链接叫做Browse workspace directory
如果你点击这个链接,你会打开OpenRefine的软件安装目录(起码win和mac系统如此,linux的话请看后面)。在这个目录中,如果没有一个文件夹叫做extensions,那么就创建下,这就是你需要安装扩展包的目录。不同的操作系统,可能是下面的不同显示格式:
• Windows:
C:\DocumentsandSettings\(yourusername)\ApplicationData\OpenRefine\extensions 或者可能在 Local Settings 文件夹,那么显示可能是 C:\Documents and Settings\(your username)\LocalSettings\ApplicationData\OpenRefine\extensions
• Mac OS X: /Users/(your username)/Library/Application Support/OpenRefine/extensions 或者根目录下/Users/(your username)/Library/Application Support/OpenRefine/extensions
• Linux: /home/refine/webapp/extensions
下一步是下载一个扩展包并且放到此文件夹中。这里让我们安装RDF扩展包。我们可以到http://refine.deri.ie/下载。下载下来的是ZIP文件。使用你的解压文件解压,会得到一系列的文件夹,我们需要的是rdf-extension。
将这个文件夹我们创建的OpenRefine的 extensions文件夹中,这样在extensions文件夹中我们就会有一个rdf-extension文件夹,里面包含一些其他的文件夹,如images, MOD-INF, scripts和 styles。
现在重启OpenRefine以使扩展包生效。只关闭浏览器是不够的。你必须在屏幕底部图标上点击选择close才行。然后再次打开OpenRefine并且创建一个项目。当项目创建后,右侧顶部会显示RDF按钮 ,这表明 安装 已经成功。
如果你没有看到这个按钮,请检查下,是否扩展包文件夹位置对不对,还有OpenRefine是不是重新启动了。
你可以尝试对其他扩展包进行上述安装步骤。下一点中我们将用到RDF扩展包,所以请先安装。最后一点中,我们还将用到NER扩展包,所以现在也安装好吧。