rdf представление ссылок на сущности в тексте - PullRequest
2 голосов
/ 17 июля 2010

Рассмотрим предложение вроде:

Джон Смит отправился в Вашингтон.

В хороший день бирка с именами идентифицирует «Джона Смита» как личность, а «Вашингтон» - как место. Однако без других доказательств он не может сказать, какой из всех возможных «Джона Смита» в мире или даже какой из «Вашингтона» у него есть.

В конце концов, какой-то процесс разрешения может принять решение, основываясь на других доказательствах. Однако до этого момента, что является хорошей практикой для представления этих ссылок в RDF? Назначить им выдуманные уникальные идентификаторы в некотором пространстве имен? Сделать пустые кортежи (например, «Кто-то по имени Джон Смит упоминался в Документе d».)? Какая-то другая альтернатива? В моей книге приведен пример с анонимными метеостанциями, но я не совсем слежу за тем, как их пример согласуется со всем остальным, что описывается в RDF.

Ответы [ 4 ]

3 голосов
/ 18 июля 2010

Назначьте им уникальные идентификаторы в вашем собственном пространстве имен. Если вы позже обнаружите, что этот «Вашингтон» совпадает с http://dbpedia.org/resource/Washington,_D.C., или чем-то еще, вы можете добавить owl: sameAs, чтобы это подтвердить.

2 голосов
/ 19 июля 2010

Прежде всего, существуют существующие хорошие услуги, которые вы можете использовать для распознавания сущностей, такие как OpenCalais , Zemanta и Alchemy .

Чтобы быть более конкретным, да, просто «чеканьте» свои собственные URI (идентификаторы) для каждой вещи, а затем поговорите о них - чтобы предложить представление этой информации в черепахе

@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: same, как упоминает Гленн Макдональд.

1 голос
/ 10 июня 2013

Может быть уместно прочитать, как это делает Apache Stanbol: http://stanbol.apache.org/docs/trunk/components/enhancer/enhancementstructure.html

0 голосов
/ 22 июля 2010

Вы можете либо чинить свой собственный URI, как описано выше, либо использовать пустой узел.У обоих подходов есть свои плюсы и минусы:

URI имеют внешнюю идентичность, поэтому вы можете явно ссылаться на свою концепцию в будущих запросах, что может сделать некоторые запросы намного проще;но у вас есть внешняя идентичность, поэтому алгоритм, который вы используете для создания URI, становится важной частью вашей инфраструктуры, и вы должны гарантировать, что они стабильны и уникальны.Сначала это может быть тривиально, но когда вы начинаете работать с несколькими документами, обрабатываемыми в разное время, часто параллельно, и в распределенных системах, это довольно быстро перестает быть прямым.

Были включены пустые узлыспециально для решения этой проблемы их уникальность гарантируется их областью применения;но если вам нужно явно обратиться к пустому узлу в запросе, вам нужно будет использовать либо нестандартное расширение, либо найти какой-либо способ охарактеризовать узел.

В обоих случаяхслучаях, но особенно если вы используете пустой узел, вы должны в любом случае включать в него операторы провенанса, чтобы охарактеризовать его.

@ Натан - хороший пример, чтобы понять эту идею.

Так что пример с использованиемпустыми узлами могут быть:


@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 doc: <http://yourdomain.com/doc-path/> .

_:1 rdf:type proc:ProcessRun ; 
    proc:parser prg:tagger ;
    proc:version "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 "Washington"@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 doc: <http://yourdomain.com/doc-path/some-doc#> .

:1 rdf:type proc:ProcessRun ; 
    proc:parser prg:tagger ;
    proc:version "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 "Washington"@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 для концепций, с которыми я в конечном итоге объединяю сущности.

Если, однако, я не собираюсь отслеживать происхождение выводов, и это всего лишь один из множества проходов в конвейере, который в конечном итоге отбросит промежуточноеВ результате я просто чеканил бы URI, используя какой-то хэш, метку времени и идентификатор документа, и покончил бы с этим.

@prefix : <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 "Washington"@en .

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