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

在Owlready2中将生成器转为列表后输出异常,如何解决?

如何用Owlready2获取本体类的简洁名称而非带路径的形式?

问题描述

尝试用Owlready2提取本体中的所有类,已将onto.classes()生成器转换为列表,但输出的类名带有完整本体路径,不符合预期的简洁格式。

原代码

from owlready2 import *

onto = get_ontology("C:\Users\Kronos\Desktop\Ontology\f3.owx").load()

class main():
    all_class= list(onto.classes())
    print(all_class)

现有输出

C:\Users\Kronos\Desktop\Ontology\f3.owx.Address, C:\Users\Kronos\Desktop\Ontology\f3.owx.BabyCare, ...

解决方案

Owlready2中类对象的默认字符串表示会包含本体路径前缀,要获取简洁类名,直接提取类对象的name属性即可;若本体为类定义了rdfs:label标签,也可优先使用该属性获取更友好的名称。

修改后的代码

方法1:提取类的name属性

直接生成仅包含类名的列表:

from owlready2 import *

onto = get_ontology("C:\Users\Kronos\Desktop\Ontology\f3.owx").load()

all_class_names = [cls.name for cls in onto.classes()]
print(all_class_names)

方法2:优先提取rdfs:label(若存在)

如果本体为类设置了业务友好的标签,可优先使用标签,无标签时回退到类名:

from owlready2 import *

onto = get_ontology("C:\Users\Kronos\Desktop\Ontology\f3.owx").load()

all_class_labels = []
for cls in onto.classes():
    # 取第一个标签(多标签场景下可按需调整),无标签则用类名
    label = cls.label[0] if cls.label else cls.name
    all_class_labels.append(label)
print(all_class_labels)

预期输出

['Address', 'BabyCare', ...]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:58:28