Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中带有RDFlib的RDF文本_Python_Text_Rdf_Rdflib - Fatal编程技术网

Python中带有RDFlib的RDF文本

Python中带有RDFlib的RDF文本,python,text,rdf,rdflib,Python,Text,Rdf,Rdflib,我有一个rdf文件,例如: 1685-03-21 1750-07-28 艾森纳克 莱比锡 德国作曲家和风琴家 约翰·塞巴斯蒂安·巴赫 我只想提取这个文件的文本部分,也就是说,在这种情况下,我的输出是: output_ tex = "Johann Sebastian Bach, German composer and organist,1685-03-21, 1750-07-28, Eisenach, Leipzig" 如何使用RDFlib获得这个结果?这相对简单,至少在概念任务方面是如此。

我有一个rdf文件,例如:


1685-03-21
1750-07-28
艾森纳克
莱比锡
德国作曲家和风琴家
约翰·塞巴斯蒂安·巴赫
我只想提取这个文件的文本部分,也就是说,在这种情况下,我的输出是:

output_ tex = "Johann Sebastian Bach, German composer and organist,1685-03-21, 1750-07-28, Eisenach, Leipzig"

如何使用RDFlib获得这个结果?

这相对简单,至少在概念任务方面是如此。你需要

  • 将RDF文档读入rdflib图
  • 遍历图中的语句(三元组)
    • 如果语句的对象是文字
    • 然后将文本的词汇形式连接到您正在构建的字符串中
我不是一个Python用户,也不是一个RDFlib用户,但这些应该不会那么困难。(来自RDFlib文档)显示了如何读取图形并迭代三元组

import rdflib

g = rdflib.Graph()
result = g.parse("http://www.w3.org/People/Berners-Lee/card")

# Iterate over triples in store and print them out.
print("--- printing raw triples ---")
for s, p, o in g:
    print((s, p, o))
现在,您需要检查
o
是否为文本(rdflib.term.literal的一个实例),而不是
print((s,p,o))
中的
。如果存在非字符串类型的文本,您可能希望连接它们的词法形式,或者只连接普通文本(没有语言类型和数据类型的文本)、带有语言标记的文本的字符串部分以及数据类型为
xsd:string
的文本的词法形式

更多参考资料
  • (特别是)
  • 如果您是Python新手,并且需要知道如何连接字符串,那么有一些关于堆栈溢出的相关问题,例如
基于的答案,您正在寻找的方法是“toPython”,它说“返回从这个RDF文本派生的适当python数据类型” “。此代码段应返回您正在查找的内容:

raw_data = """<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dbp="http://dbpedia.org/ontology/"
xmlns:dbprop="http://dbpedia.org/property/"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
    <rdf:Description rdf:about="http://dbpedia.org/page/Johann_Sebastian_Bach">
      <dbp:birthDate>1685-03-21</dbp:birthDate>
      <dbp:deathDate>1750-07-28</dbp:deathDate>
      <dbp:birthPlace>Eisenach</dbp:birthPlace>
      <dbp:deathPlace>Leipzig</dbp:deathPlace>
      <dbprop:shortDescription>German composer and organist</dbprop:shortDescription>
      <foaf:name>Johann Sebastian Bach</foaf:name>
      <rdf:type rdf:resource="http://dbpedia.org/class/yago/GermanComposers"/>
      <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
    </rdf:Description>
</rdf:RDF>"""
import rdflib
graph = rdflib.Graph()
graph.parse(data=raw_data)

output = []

for s, p, o in graph:
    if type(o) == rdflib.term.Literal:
        output.append(o.toPython())

print ', '.join(output)
raw_data=”“”
1685-03-21
1750-07-28
艾森纳克
莱比锡
德国作曲家和风琴家
约翰·塞巴斯蒂安·巴赫
"""
导入rdflib
graph=rdflib.graph()
graph.parse(数据=原始数据)
输出=[]
对于图中的s、p、o:
如果类型(o)==rdflib.term.Literal:
append(o.toPython())
打印“,”。联接(输出)

文本的顺序重要吗?字符串(通常为文字)将仅作为RDF语句的对象出现;它们不能是主语或谓词。因此,您可以简单地遍历模型的语句,并将作为语句对象出现的字符串文字串接在一起(看起来是用“,”分隔的)。这听起来像你要找的吗?谢谢Joshua!课文的顺序并不重要。输出中的逗号只是将一个文字与另一个文字分开,但我也不需要它。是的,我意识到只有对象(文本)包含我正在寻找的字符串,但我不知道如何从对象中提取这些字符串并将它们放入字符串变量中。你能给我举个例子吗?