rdflibを使いSPARQL_Queryの結果をcsvで取得する

RDF形式で保持された情報を深層学習モジュールに入力する際にcsvファイルに成形する必要があり,こちらの方法を調査しました.Triple Storeを立てればcsvで結果を取得するのは難しくないので,あまり使う機会が多くなさそうなので,備忘録を兼ねて記録します.

rdflibには,CSVResultSerializerというクラスが用意されています.下記のように利用します.

import rdflib
from rdflib.plugins.sparql.results.csvresults import CSVResultSerializer

graph = rdflib.Graph()
graph.parse("rdf.ttl")

query = """
select distinct *
where {
    ?s ?p ?o.
}
"""

query_result = graph.query(query)

serializer = CSVResultSerializer(query_result)
with open("result.csv", "wb") as f:
    serializer.serialize(f)

最初は下記のように結果を書き込もうとしました.

with open("result.csv", "w") as f:

結果として,下記のように怒られました.

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/your/environment/venv/lib/python3.10/site-packages/rdflib/plugins/sparql/results/csvresults.py", line 83, in serialize
    out.writerow(vs)
  File "/your/environment/lib/python3.10/codecs.py", line 378, in write
    self.stream.write(data)
TypeError: write() argument must be str, not bytes

binaryモードで開く必要があるようでした.

以上です.

index pageへ戻る