跳转到主要内容

本体访问工具包:在多种后端上执行常见本体操作的Python库

项目描述

本体访问工具包(OAK)

用于在多种后端上执行常见本体操作的Python库。

PyPI version badge Downloads DOI Contributor Covenant

OAK提供了一组接口,用于执行各种本体操作,包括

  • 查找本体元素的基本特征,如其标签、定义、关系或别名
  • 在本体中搜索一个术语
  • 验证本体
  • 修改或删除术语
  • 生成和可视化子图
  • 识别词汇匹配并将其导出为SSSOM映射表
  • 执行更高级的操作,例如图遍历、OWL公理处理或文本注释

这些接口与任何特定的后端都相互独立,为此提供了多种不同的适配器。这意味着无论本体是通过以下哪种方式提供,都可以使用相同的Python API和命令行:

  • 由远程API(如OLS或BioPortal)提供
  • 本地文件系统中的owl、obo、obojson或sqlite格式
  • 从远程仓库(如OBO库)下载
  • 从远程数据库查询,包括SPARQL端点(Ontobee/Ubergraph)、SQL数据库、Solr/ES端点

文档

贡献

请参阅CONTRIBUTING.md中的贡献指南。所有贡献者都应遵守我们的行为准则

使用方法

from oaklib import get_adapter

# connect to the CL sqlite database adapter
# (will first download if not already downloaded)
adapter = get_adapter("sqlite:obo:cl")

NEURON = "CL:0000540"

print('## Basic info')
print(f'ID: {NEURON}')
print(f'Label: {adapter.label(NEURON)}')

for alias in adapter.entity_aliases(NEURON):
    print(f'Alias: {alias}')

print('## Relationships (direct)')
for relationship in adapter.relationships([NEURON]):
    print(f' * {relationship.predicate} -> {relationship.object} "{adapter.label(relationship.object)}"')
    
print('## Ancestors (over IS_A and PART_OF)')
from oaklib.datamodels.vocabulary import IS_A, PART_OF
from oaklib.interfaces import OboGraphInterface

if not isinstance(adapter, OboGraphInterface):
    raise ValueError('This adapter does not support graph operations')

for ancestor in adapter.ancestors(NEURON, predicates=[IS_A, PART_OF]):
    print(f' * ANCESTOR: "{adapter.label(ancestor)}"')

有关更多示例,请参阅

命令行

请参阅

搜索

使用pronto后端从OBO库获取并解析本体,然后使用search命令

runoak -i obolibrary:pato.obo search osmol 

返回

PATO:0001655 ! osmolarity
PATO:0001656 ! decreased osmolarity
PATO:0001657 ! increased osmolarity
PATO:0002027 ! osmolality
PATO:0002028 ! decreased osmolality
PATO:0002029 ! increased osmolality
PATO:0045034 ! normal osmolality
PATO:0045035 ! normal osmolarity

质量控制与验证

使用sqlite/rdftab实例对PR进行验证

runoak -i sqlite:../semantic-sql/db/pr.db validate

列出所有术语

列出obolibrary为mondo提供的所有术语

runoak -i obolibrary:mondo.obo terms 

词汇索引

为Mondo中的所有术语创建词汇索引

runoak  -i obolibrary:mondo.obo lexmatch -L mondo.index.yaml

搜索

使用ontobee在OBO上搜索

runoak  -i ontobee: search tentacle

产生

http://purl.obolibrary.org/obo/CEPH_0000256 ! tentacle
http://purl.obolibrary.org/obo/CEPH_0000257 ! tentacle absence
http://purl.obolibrary.org/obo/CEPH_0000258 ! tentacle pad
...

在bioportal上搜索更广泛的本体集合(需要API密钥)(https://www.bioontology.org/wiki/BioPortal_Help#Getting_an_API_key

runoak set-apikey bioportal YOUR-KEY-HERE
runoak  -i bioportal: search tentacle

产生

BTO:0001357 ! tentacle
http://purl.jp/bio/4/id/200906071014668510 ! tentacle
CEPH:0000256 ! tentacle
http://www.projecthalo.com/aura#Tentacle ! Tentacle
CEPH:0000256 ! tentacle
...

或者,您可以将"BIOPORTAL_API_KEY"添加到您的环境变量中。

在Ubergraph上搜索更有限的本体集合

runoak -v -i ubergraph: search tentacle

产生

UBERON:0013206 ! nasal tentacle

标注文本

runoak  -i bioportal: annotate neuron from CA4 region of hippocampus of mouse

产生

object_id: CL:0000540
object_label: neuron
object_source: https://data.bioontology.org/ontologies/NIFDYS
match_type: PREF
subject_start: 1
subject_end: 6
subject_label: NEURON

object_id: http://www.co-ode.org/ontologies/galen#Neuron
object_label: Neuron
object_source: https://data.bioontology.org/ontologies/GALEN
match_type: PREF
subject_start: 1
subject_end: 6
subject_label: NEURON

...

映射

为一系列本体创建SSSOM映射文件

robot merge -I http://purl.obolibrary.org/obo/hp.owl -I http://purl.obolibrary.org/obo/mp.owl convert --check false -o hp-mp.obo
runoak lexmatch -i hp-mp.obo -o hp-mp.sssom.tsv

祖先图的可视化

使用sqlite后端通过test本体sqlite可视化从'vacuole'开始的图

runoak -i sqlite:tests/input/go-nucleus.db  viz GO:0005773

img

使用ubergraph,限制为is-a和part-of

runoak -i ubergraph:  viz GO:0005773 -p i,BFO:0000050

使用pronto,从obolibrary获取本体

runoak -i obolibrary:go.obo  viz GO:0005773

配置

OAK使用pystow进行缓存。默认情况下,它位于~/.data/中,但可以根据这些说明进行配置。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

oaklib-0.6.17.tar.gz (531.8 kB 查看哈希值)

上传时间

构建分发

oaklib-0.6.17-py3-none-any.whl (664.9 kB 查看哈希值)

上传时间 Python 3

支持