You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从OBO格式文本文件提取各GO术语对应的namespace?

提取GO术语关联的Namespace的可行方案

方法1:使用Python的obonet库

obonet是专门用于解析OBO格式文件的工具,能准确识别术语的namespace字段,操作简单:

import obonet

# 加载本地GO OBO文件
graph = obonet.read_obo('go.obo')

# 遍历所有节点,提取GO ID与对应namespace
for node_id, node_data in graph.nodes(data=True):
    if node_id.startswith('GO:'):
        namespace = node_data.get('namespace')
        if namespace:
            print(f"{node_id}\t{namespace}")

方法2:使用R的GO.db包

如果之前的ontologyIndex包无法正常工作,推荐使用Bioconductor的GO.db包——它预先整理了GO术语的所有元数据,包括namespace,无需手动解析OBO文件:

# 安装并加载GO.db包
if (!requireNamespace("GO.db", quietly = TRUE)) {
    BiocManager::install("GO.db")
}
library(GO.db)

# 提取所有GO术语的namespace信息
go_namespace_df <- select(GO.db, keys = keys(GO.db), columns = "ONTOLOGY")

# 查看结果示例
head(go_namespace_df)

方法3:手动解析OBO文本文件

OBO是结构化文本格式,可直接逐行解析,无需依赖任何第三方工具,适合自定义需求:

current_go_id = None
current_namespace = None

# 读取本地OBO文件
with open('go.obo', 'r', encoding='utf-8') as obo_file:
    for line in obo_file:
        line = line.strip()
        # 遇到新术语块时,输出上一个术语的信息
        if line == '[Term]':
            if current_go_id and current_namespace:
                print(f"{current_go_id}\t{current_namespace}")
            current_go_id = None
            current_namespace = None
        elif line.startswith('id: '):
            current_go_id = line.split('id: ')[1]
        elif line.startswith('namespace: '):
            current_namespace = line.split('namespace: ')[1]
    # 处理文件末尾的最后一个术语
    if current_go_id and current_namespace:
        print(f"{current_go_id}\t{current_namespace}")

内容的提问来源于stack exchange,提问作者gmonteoliva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:47:08