как извлечь синонимы из онтологии MeSH? - PullRequest
6 голосов
/ 18 мая 2011

На этом уровне моей работы мне нужно извлечь синонимы класса из онтологии MeSH.Я ищу правильный синтаксис для запроса SPARQL: как синонимы хранятся в MeSH?и как их извлечь?

1 Ответ

8 голосов
/ 19 мая 2011

Я не уверен, что вы подразумеваете под синонимами.Но после рассмотрения онтологии MeSH (скачано с здесь ).Я запускаю следующий запрос, чтобы перечислить все разные предикаты:

SELECT DISTINCT ?p where { ?s ?p ?o }

... и получаю ...

<http://www.w3.org/2004/02/skos/core#historyNote>
<http://www.nlm.nih.gov/mesh/2006#considerAlso>
<http://www.nlm.nih.gov/mesh/2006#recordAuthorizer>
<http://www.nlm.nih.gov/mesh/2006#dateEstablished>
<http://www.nlm.nih.gov/mesh/2006#dateCreated>
<http://www.nlm.nih.gov/mesh/2006#onlineNote>
<http://www.nlm.nih.gov/mesh/2006#activeMeSHYear>
<http://www.nlm.nih.gov/mesh/2006#historyNote>
<http://www.w3.org/2004/02/skos/core#related> <<<---
<http://www.w3.org/2004/02/skos/core#broader> <<<---
<http://www.nlm.nih.gov/mesh/2006#recordMaintainer>
<http://www.w3.org/2004/02/skos/core#scopeNote>
<http://www.w3.org/2004/02/skos/core#altLabel>
<http://www.w3.org/2004/02/skos/core#prefLabel>
<http://www.nlm.nih.gov/mesh/2006#preferredCombination> <<<---
<http://www.nlm.nih.gov/mesh/2006#publicMeSHNote>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://www.w3.org/2004/02/skos/core#annotation>
<http://www.w3.org/2004/02/skos/core#hiddenLabel>
<http://www.nlm.nih.gov/mesh/2006#recordOriginator>
<http://www.nlm.nih.gov/mesh/2006#runningHead>
<http://www.nlm.nih.gov/mesh/2006#dateRevised>

... предикаты с <<<--- делают меняпредположим, что между ресурсами существуют некие отношения.

Например, если мы попробуем skos:related с помощью следующего запроса:

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?slabel ?olabel
WHERE {
  ?s skos:related ?o .
  ?s skos:prefLabel ?slabel .
  ?o skos:prefLabel ?olabel .
}

мы получим такие вещи, как ...

"Anesthetics"   "Adjuvants, Anesthesia"
"Prostatic Neoplasms"   "Prostate-Specific Antigen"
"Elbow" "Tennis Elbow"
"Uterine Hemorrhage"    "Menorrhagia"
"Ecology"   "Environmental Health"
"Endocarditis, Bacterial"   "Aneurysm, Infected"
( .... and many more )

Если вы попробуете skos:broader со следующим запросом (префиксы опущены).Обратите внимание, что skos:broader используется для определения иерархий понятий, поэтому он имеет семантику, отличную от skos:related

SELECT ?slabel ?olabel
WHERE {
  ?s skos:broader ?o .
  ?s skos:prefLabel ?slabel .
  ?o skos:prefLabel ?olabel .
}

, вы получите ...

"Healthy People Programs"   "Health Promotion"
"Suggestion"    "Hypnosis"
"Sodium Iodide" "Iodides"
"Unnecessary Procedures"    "Health Services Misuse"
"Bornanes"  "Norbornanes"
"Prajmaline"    "Ajmaline"
"Vestibular Nerve"  "Vestibulocochlear Nerve"
"Adenolymphoma" "Neoplasms, Complex and Mixed"
"Child, Gifted" "Child, Exceptional"
"Tooth Germ"    "Tooth Components"
"Breast Self-Examination"   "Self-Examination"
( ... and many more)

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

Редактировать: Запросы для файла OWL

@ saféЯ думаю, что вы правы, в используемом вами файле OWL нет таких отношений между классами.

Следующий запрос дает вам все классы OWL:

SELECT DISTINCT ?p WHERE { ?s a <http://www.w3.org/2002/07/owl#Class> . }

...а этот другой дает все предикаты, используемые в любом классе:

SELECT DISTINCT ?p WHERE { 
   ?s a <http://www.w3.org/2002/07/owl#Class> .
   ?s ?p ?o }

... этот последний запрос только возвращает:

<http://www.w3.org/2000/01/rdf-schema#subClassOf>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>

На самом деле в этом OWL-файле у вас есть только такие вещи, как:

<http://org.snu.bike/MeSH#antimony_sodium_gluconate> rdf:type owl:Class .

и ...

<http://org.snu.bike/MeSH#antimony_sodium_gluconate> rdfs:subClassOf <http://org.snu.bike/MeSH#gluconate>.

Это означает, что единственное, что объявлено в этом OWL-файле, это иерархия классов, и синонимы не объявляются.

Если вы хотите извлечь все подклассы, выполните ...

SELECT * WHERE { 
?subClass <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?upperClass 
}
...