在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
相关产品推荐
相关产品推荐

