【问题标题】:how to extract synonyms from MeSH ontology?如何从 MeSH 本体中提取同义词?
【发布时间】:2011-05-18 14:01:39
【问题描述】:

在我这个级别的工作中,我需要从 MeSH 本体中提取一个类同义词。 我正在为 SPARQL 查询寻找正确的语法:同义词是如何存储在 MeSH 中的?以及如何提取它们?

【问题讨论】:

  • @safé:你所说的“类同义词”到底是什么意思? OWL 等效类?此外,如果您在问题中添加您正在使用的本体的一部分,以及您尝试提取的内容的示例,这将有所帮助:这将有助于理解您在做什么,并建议解决方案.
  • 我不知道这些类在 OWL 中是如何分类的,但我确信它们是不等价的。例如,当使用 MeSH 浏览器并添加“cancer”作为查询时,返回的所有信息都是关于“neoplasm”,因为在 MeSH 中,“cancer”和“neoplasm”是同义词 [link](nlm.nih.gov/cgi/mesh/2011/…)(参见相关概念) .但是我不知道这种关系在 OWL 中是如何描述的,以及如何使用 sparql 来提取它。
  • @safé:恐怕我帮不了你。为了编写 SPARQL 查询,您必须知道要查询的 RDF 图的结构。您可以查询 OWL 本体,前提是您知道它的组织方式(以及它的 RDF 序列化的样子)。我建议你找出“MeSH”本体的结构,然后再问你的问题。目前就像在问“我如何从我不知道它是如何制作的数据库中提取信息”? ...不可能:)
  • 我已经有了那个本体的 owl 文件,但是我无法识别同义词是如何存储的,这就是我在这里发布这个问题的原因,也许我可以找到使用过这个本体的人过去并且能够帮助我。也许我应该将我的问题改为“MeSH 本体中存储同义词的结构是什么?”
  • @safé:啊!如果你有 OWL 文件,那就不一样了!根据您上面的示例,您可以找到“癌症”的 OWL 类和“肿瘤”的类,并在此处发布代码:这将帮助我和其他人弄清楚如何帮助您

标签: sparql jena owl ontology mesh-ontology


【解决方案1】:

我不确定你所说的同义词是什么意思。但是看了 MeSH 本体之后(从here下载)。我运行以下查询来列出所有不同的谓词:

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>

...&lt;&lt;&lt;--- 的谓词让我假设资源之间存在某种关系。

例如,如果我们使用以下查询尝试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)

底线,如果您不知道架构,请运行 some exploratory queries 并尝试查看其中的内容。

编辑: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 
}

【讨论】:

  • 你写的很有趣,但是你使用的本体保存在一个rdf文件中,而我需要使用一个OWL文件,因为我也在提取类和子类。
  • 那个 OWL 文件在哪里?如何访问它以进一步调查?
  • 这是我正在使用的 OWL 文件 [link] (bike.snu.ac.kr/sites/default/files/meshonto.owl) 但我不认为这包含我正在搜索的关系。
  • @safé 查看新版答案(底部)。也不要忘记投票给你认为在 SO 中有用的答案。您的个人资料有 0 个赞,如果您想从别人那里获得帮助,那就不好了。希望我的回答有帮助。
  • 谢谢...正如我所想和之前所讨论的,这个文件并不包含所有内容。我会寻找另一个版本,或者尝试找到另一种方法来解决我的问题。 (并感谢您对upvote 的建议)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
相关资源
最近更新 更多