如何在Python RDFLib中用g.triples过滤英文SKOS标签并生成字典?
过滤SKOS英文prefLabel生成字典的方法
你之前尝试给triples()方法加lang参数的思路不对,因为该方法本身不支持这个参数。正确的做法是在字典推导式里添加语言判断条件,或者用SPARQL查询实现过滤。
方法一:字典推导式添加语言过滤
修改代码,遍历三元组时直接检查宾语(Literal对象)的language属性是否为"en":
from rdflib import SKOS d = {s: o for s, p, o in g.triples((None, SKOS.prefLabel, None)) if o.language == "en"}
如果担心部分Literal没有语言标签引发报错,可以额外增加属性存在的判断:
d = {s: o for s, p, o in g.triples((None, SKOS.prefLabel, None)) if hasattr(o, 'language') and o.language == "en"}
方法二:使用SPARQL查询
对于复杂过滤场景,SPARQL语法会更直观:
query = """ SELECT ?s ?o WHERE { ?s skos:prefLabel ?o . FILTER(lang(?o) = "en") } """ results = g.query(query) d = {row.s: row.o for row in results}
内容的提问来源于stack exchange,提问作者Margherita Martorana
相关产品推荐
相关产品推荐

