Разделите все различные графики, включенные в файл n-quads

У меня есть большой файл n-quads с большим количеством утверждений, включенных в большое количество различных графиков. Ниже приведены строки файла:

<http://voag.linkedmodel.org/voag#useGuidelines> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> <http://voag.linkedmodel.org/schema/voag> .

Четвертый элемент соответствует URI графа.

Я хотел бы проанализировать этот файл и разделить все различные графики в новых файлах или структурах данных, по одному объекту на график, предпочтительно с помощью RDFlib. Я действительно не знаю, как решить эту проблему, поэтому любая помощь будет принята с благодарностью.

0 ответов

Если строки таковы, что все URI графа находятся вместе в последовательности, вы можете использовать itertools 'groupby чтобы проанализировать каждый по очереди:

from itertools import groupby
import rdflib
def parse_nquads(lines):
    for group, quad_lines in groupby(lines, get_quad_label):
        graph = rdflib.Graph(identifier=group)
        graph.parse(data=''.join(quad_lines), format='nquads')
        yield graph

Если четвертый элемент всегда присутствует и URI (который не гарантируется в спецификации), вы можете найти его, выполнив поиск по пробелу.

import re
RDF_QUAD_LABEL_RE = re.compile("[ \t]+<([^>]*)>[ \t].\n$")
def get_quad_label(line):
    return RDF_QUAD_LABEL_RE.search(line).group(1)

Затем вы можете обработать каждый график из входного файла в новый файл или набор данных.

with open('myfile.nquads', 'rt') as f:
  for graph in parse_nquads(f):
    ...
Другие вопросы по тегам