2

考虑这样一个句子:

约翰史密斯前往华盛顿。

姓名标注员会在天气好的时候将“John Smith”识别为一个人,将“Washington”识别为一个地方。然而,如果没有其他证据,它无法判断世界上所有可能的“约翰·史密斯”中的哪一个,甚至是各种“华盛顿”中的哪一个。

最终,一些解决过程可能会根据其他证据做出决定。然而,在此之前,在 RDF 中表示这些引用的良好做法是什么?在某个命名空间中为它们分配组成的唯一标识符?制作空白元组(例如,“文档 d 中引用了某个名叫 John Smith 的人”。)?其他的选择?我的一本书给出了一个涉及匿名气象站的例子,但我并没有完全理解他们的例子是如何与其他关于 RDF 的描述相适应的。

4

4 回答 4

3

在您自己的命名空间中为它们分配唯一标识符。如果您后来发现这个“华盛顿”与http://dbpedia.org/resource/Washington,_D.C . 或其他任何内容相同,您可以添加一个 owl:sameAs 来断言。

于 2010-07-17T20:45:37.217 回答
2

首先,您可以使用现有的良好服务进行实体识别,例如OpenCalaisZemantaAlchemy

更具体地说,是的,只需为每件事“铸造”您自己的 URI(标识符),然后谈论它们 - 以在 turtle 中提供此信息的表示

@prefix : <http://yourdomain.com/data/> .
@prefix myont: <http://yourdomain.com/ontology/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dbpedia-owl: <http://dbpedia.org/ontology/Place>.
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

:John_Smith#d rdf:type foaf:Person ;
  foaf:name "John Smith"@en .

:Washington#d rdf:type dbpedia-owl:Place ;
  rdfs:label "Washington"@en .

:John_Smith#d myont:travelled_to :Washington#d .

<http://yourdomain.com/some-doc#this> rdf:type foaf:Document ;
  dcterms:references :John_Smith#d, :Washington#d .

如果您稍后将它们匹配,那么您可以使用 owl:sameAs 就像 glenn mcdonald 提到的那样。

于 2010-07-19T01:52:32.467 回答
1

可能与您阅读 Apache Stanbol 的工作方式相关:http ://stanbol.apache.org/docs/trunk/components/enhancer/enhancementstructure.html

于 2013-06-10T09:30:01.570 回答
0

您可以如上所述创建自己的 URI,也可以使用空白节点。两种方法各有利弊:

URI 具有外部标识,因此您可以在以后的查询中明确引用您的概念,这可以使某些查询更加简单;但是,你他们有一个外部身份,所以你用来构造 URI 的算法成为你的基础设施的关键部分,你必须保证它们既稳定又独特。起初这可能是微不足道的,但是当您开始处理在不同时间重新处理的多个文档时,通常是并行的,并且在分布式系统上,它很快就不再是直截了当的。

空白节点被专门用来解决这个问题,它们的唯一性由它们的作用域来保证;但是,如果您需要在查询中明确引用空白节点,您将需要使用非标准扩展,或者找到某种方式来表征节点。

在这两种情况下,但特别是如果您使用空白节点,您应该包括出处声明来表征它。

@nathan 的例子是一个很好的例子。

因此,使用空白节点的示例可能是:

@prefix my: <http://yourdomain.com/2010/07/20/conceptmap#> 。
@prefix proc: <http://yourdomain.com/2010/07/20/processing#> 。
@prefix prg: <http://yourdomain.com/processors#> 。

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 。
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 。
@prefix xsd: <http://www.example.org/> 。
@prefix dcterms: <http://purl.org/dc/terms/> 。
@prefix foaf: <http://xmlns.com/foaf/0.1/> 。
@前缀文档: <http://yourdomain.com/doc-path/> 。

_:1 rdf:type proc:ProcessRun ;
    proc:parser prg:tagger ;
    过程:版本“1.0.2”;
    proc:time "2010-07-03 20:35:45"^^<xsd:Timestamp> ;
    proc:host prg:hostname-of-processing-node ;
    proc:file doc:some-doc#line=1,;md5=md5_sum_goes_here,mime-charset_goes_here ;

_:2 rdf:type foaf:Person ;
    foaf:name "John Smith"@en ;
    proc:identifiedBy _:1 ;
    proc:atLocation doc:some-doc#char=0,9 。


_:3 rdf:type owl:Thing ;
    foaf:name "华盛顿"@en ;
    proc:identifiedBy _:1 ;
    proc:atLocation doc:some-doc#char=24,33 。

<http://yourdomain.com/some-doc#this> rdf:type foaf:Document ;
                                      dcterms:references _:2, _:3 。

请注意使用 rfc5147 文本/纯片段标识符来唯一标识正在处理的文件,这为您提供了如何识别单个运行的灵活性。另一种方法是在文档根的 URI 中捕获所有这些,或者完全放弃出处。

@prefix : <http://yourdomain.com/ProcessRun/parser=tagger/version=1.0.2/time=2010-07-03+20:35:45/host=hostname-of-processing-node/file= http%3A%2F%2Fyourdomain.com%2Fdoc-path%2Fsome-doc%23line%3D1%2C%3Bmd5%3Dmd5_sum_goes_here%2Cmime-charset_goes_here/$gt; .

@prefix my: <http://yourdomain.com/2010/07/20/conceptmap#> 。
@prefix proc: <http://yourdomain.com/2010/07/20/processing#> 。
@prefix prg: <http://yourdomain.com/processors#> 。

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 。
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 。
@prefix xsd: <http://www.example.org/> 。
@prefix dcterms: <http://purl.org/dc/terms/> 。
@prefix foaf: <http://xmlns.com/foaf/0.1/> 。
@prefix 文档: <http://yourdomain.com/doc-path/some-doc#> 。

:1 rdf:type proc:ProcessRun ;
    proc:parser prg:tagger ;
    过程:版本“1.0.2”;
    proc:time "2010-07-03 20:35:45"^^<xsd:Timestamp> ;
    proc:host prg:hostname-of-processing-node ;
    proc:file doc:some-doc#line=1,;md5=md5_sum_goes_here,mime-charset_goes_here ;

:2 rdf:type foaf:Person ;
    foaf:name "John Smith"@en ;
    proc:identifiedBy :1 ;
    proc:atLocation doc:some-doc#char=0,9 。


:3 rdf:type owl:Thing ;
    foaf:name "华盛顿"@en ;
    proc:identifiedBy :1 ;
    proc:atLocation doc:some-doc#char=24,33 。

<http://yourdomain.com/some-doc#this> rdf:type foaf:Document ;
                                      dcterms:references :2, :3 。

你会注意到 foaf:name 有一个 owl:Thing 的范围,所以它可以应用于任何东西。另一种可能是使用 skos:Concept 和 rdfs:label 作为专有名词。

空白节点与 URI 的最后一个考虑因素是,您使用的任何数据存储最终都必须存储您使用的任何 URI,如果您使用非常大的数据集,这可能会对性能产生影响。

最终,如果我要在图表中发布出处信息以及最终的统一实体,我会倾向于使用空白节点并将 URI 分配给我最终统一实体的概念。

但是,如果我不打算跟踪推论的出处,而这只是管道中许多最终将丢弃中间结果的传递,我只会使用某种文档哈希、时间戳和 id 来创建 URI并完成它。

@前缀: <http://yourdomain.com/entities#> 。
@prefix my: <http://yourdomain.com/2010/07/20/conceptmap#> 。

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 。
@prefix dcterms: <http://purl.org/dc/terms/> 。
@prefix foaf: <http://xmlns.com/foaf/0.1/> 。

:filename_timestamp_1 rdf:type foaf:Person ;
                      foaf:name "John Smith"@en 。

:filename_timestamp_2 rdf:type owl:Thing ;
    foaf:name "华盛顿"@en 。

<http://yourdomain.com/some-doc#this> rdf:type foaf:Document ;
                                      dcterms:references :2, :3 。
于 2010-07-22T04:51:41.203 回答