上一篇:《Using OpenRefine》翻译~14
•点3-增加解析服务
本小点中,你应该已经安装好了RDF扩展包。如果没有请参考上一点。如果已经装好了,那么你可能会对RDF 和SPARQL代表什么意思感到疑惑,因为这两个词汇一只出现,现在让我们解释一下:
Resource Description Framework (RDF) 是一种可以被机器读取的数据模型。因为人类能读懂互联网上的HTML格式,而机器却不能,所以需要为机器准备其能够读懂的格式。不会引起歧义是很重要的一方面;比如Washington是个城市还是人名,或者究竟是哪个人?为了解决这个问题,RDF使用URL或者URI来唯一确定。就如我们在OpenRefine进行解析一样。这就是为什么用RDF进行解析比较有用的原因。
SPARQL Protocol and RDF Query Language (简称SPARQL),是一种查询RDF数据源的语言。传统的关系型数据库试用SQL为查询语言;RDF数据库解析通讯就使用SPARQL语言。
如果你想将你的数据与一个RDF数据源进行解析,那么你就必须告诉OpenRefine与这个数据源的通讯方式。当你安装好RDF扩展包后,你就已经给OpenRefine添加了SPARQL语言支持。但是,在我们可以将单元格值解析成URL前,我们必须配置好数据源。单击右侧顶部的RDF按钮,选择Add reconciliation service| Based on SPARQL endpoint…. ,你也可以使用本地RDF文件进行解析,这样当然更加便捷。OpenRefine 会显示Add SPARQL-based reconciliation service对话框:
这个对话框首先让你选择SPARQL服务端点的名称,服务端点的细节(位置及工作模式),以及什么样的信息用来匹配单元格值与URL。你可以使用自己的SPARQL服务端点或者http://www.w3.org/wiki/SparqlEndpoints.中列出的公开服务端点。
在本例中,我们将使用我们已经建立的服务端点。这包含了Library of Congress SubjectHeadings(LCSH) 数据集的最新公开版本。为了使用这个服务端点,我们按如下参数设置:
• Name: LCSH
• Endpoint URL: http://sparql.freeyourmetadata.org/
• Graph URI: http://sparql.freeyourmetadata.org/authoritiesprocessed/
• Type: Virtuoso
• Label properties:只勾选 skos:prefLabel
Endpoint URL 是服务端点具体的位置, Graph URI指明了究竟是用该服务端点中哪个数据集。Type 指明服务端点所使用的软件。这并不需要一定指明,但是知道这些细节能够极大提升底层解析速度。最后, Label properties指明了用那些字段来解析单元格值。在RDF中,这些属性一般有一个通用的名称(事实上一般就是URL地址),一旦设置完毕,点击OK确定。
现在并没有发生什么变化,你可能会疑惑我们该如何知道这个新的解析是否正确添加好了。你可以通过在Categories 列下拉菜单中选择Reconcile | Start reconciling…. 来验证。在弹出对话框左侧应该将看到新的服务名称。现在让我们进入下一点学习,你一定迫不及待了。
•点4-与关联数据进行解析
在上一小点 中 ,我们简单介绍了RDF 和 SPARQL,但是并没有深入。所以本小点我们将深入介绍。大概2000年左右,互联网研究者和工程师发现人类并不是互联网唯一的使用者;越来越多的机器客户端以及软件基于不同目的开始使用互联网。但是,每个软件必须为了某个特定的任务进行编码,软件也无法理解互联网中用自然语言写成的文档。因此,一种Semantic Web(语义网)的概念形成了,这是一种可以被机器解析的网络。这就是RDF 和 SPARQL的开端。
但是,这个概念实在对于大多数人太过抽象。很多概念是基于本体论和推理学的。互联网发明者以及Semantic Web概念提出者之一的Tim Berners-Lee发现了这个问题,所以发起了数据链接准则(http://www.w3.org/DesignIssues/LinkedData.html),这些准则关注于基于语义网络的数据集互联。其主要的准则如下:
1、 使用URI作为名称
2、 使用HTTP URI,使得用户能够查询这些名称
3、 当某人查询一个URI时,使用标准化的方式(RDF, SPARQL)提供有用信息。
4、 包含链接到其他URI,这样我们可以发现更多的东西。
第一条准则要求使用无歧义的标识符来表示内容,第二条准则明确了URL来对应HTTP URI。我们对数据集进行解析都将用到这些准则。第三条准则明确了数据集发布的准则。事实上,RDF扩展包能够让我们导出数据集为RDF格式。第四条准则是关于数据集互联的,这也是数据解析所要做到的东西。
闲话少说,让我们开始解析。就像点1-使用FREEBASE解析值一样,选择Categories列下拉菜单:Reconcile | Start reconciling…, 这将打开解析对话框,这次我们选择左侧LCSH reconciliation service,上一小点中我们已经安装完毕了。OpenRefine 会猜测单元格值类型。几秒以后,其会提示建议值为skos:Concept.这是正确的,因为Category列确实是一些事实内容。你可以让其他的设置保持默认然后点击Start Reconciling.
就像前面所介绍的,你可以使用数据子集才尝试上述步骤以节省时间。或者,你可以在其处理时休息一下。 |
当解析结束后,你会发现三处情况。首先,OpenRefine创建了透视图包含两项透视项,一项是匹配到的行,另一项是未匹配到的行。第二,你可以在Category列顶部看到一个绿色指示条,这指示了有多少数据被成功解析。第三,单元格值内容会显示不同;某些是蓝色,另一些有新的选项。
让我们首先关注显示为蓝色的已解析项。这些项越多表示解析的越成功(顶部绿色条越长)。显示为蓝色是因为它们是链接项;如果你点击这些链接,你会打开该URL对应的页面。比如,你点击链接Specimens,我们就会打开http://id.loc.gov/authorities/subjects/sh87006764.html此链接,所以这就是我们创建的链接数据。对于电脑来说,现在不再是面对一个单独的字符串Specimens,而是被OpenRefine解析好的一个URL地址。这个地址能够被机器所解析,因为这个URL地址链接到了其他地址,所以机器能够很好的理解其意义。
你看见的黑色的值表示未被解析项,表示这些项目未被找到。这些值不是链接,所以OpenRefine并未自动找到一个URL匹配项。未解析有两个方面问题;首先,找到了多个建议项,但是OpenRefine无法确定究竟是哪个,这时其会列出一些可选项给你,如果某一项是正确的,那么你就可以单击该项,这样该项内容就会替换当前值,也可以双击该项,那么所有具有相同内容的项都会被替换成该项内容。这需要很仔细,因为很有可能某些项其实是指向其他链接条目的。记得可以点击这个建议项的链接,这样会打开相应页面以方便确认信息。
未解析项的产生还有一个原因,那就是OpenRefine没有找到匹配项。这种情况,我们只能说是运气不好。可能是你的数据中的条目并没有在解析数据库中,或者是名字上有区别导致匹配不到。这种情况下,你只能手工给其指定一个URL。可以点击search for match链接,打开的对话框可以帮助你找到正确的匹配。
最后一个可选动作是点击Create new topic 链接(或者在Search for Match对话框中选择New Topic)为单元格值创建一个新的主题,这并不是在LCSH 数据库中创建一个新的URL(本身你也没有权限这么做),其只不过将这些单元格值标成new.这样你就可以在judgement透视界面进行其他操作,比如,你可以使用其他的数据集对这些值重新解析,以看看是否能够找打匹配。
我们如何才能获取解析结果中的URL地址?同时,如何保留原始category列内容。正确的做法是基于Categories列创建一个新列,就像我们以前曾经做过的一样,点击Categories列下拉菜单: Edit Column | Add column based on this column…. 我们将这一列命名为Category URLs. 输入URL转换表达式cell.recon.match.id.这段GREL代码将单元格解析后的信息中的ID(这里就是URL)抽取出来。那些没有匹配到的项会出现错误提示,所以请确保勾选set to blank(对于错误项),点击OK后,你将看到包含对应URL地址的新列。
当你做完解析过程及抽取到需要的URL后,你可能想将Categories列恢复原貌。毕竟,解析数据还在那里,可能对我们产生干扰。为了清除它们,再次点击Categories 列下拉菜单: Reconcile| Actions| Clear reconciliation data. 这样categories 列就会恢复原貌。当然,你还可以通过点击左侧透视窗口顶部的Remove All按钮恢复原貌。