拆分n-quads文件中包含的所有不同图形

时间:2019-05-06 14:21:18

标签: rdf semantic-web rdflib 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。我真的不知道该如何解决这个问题,因此我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果行的顺序使得所有图URI都按顺序排列在一起,则可以使用itertools' groupby依次解析每一个:

Aggregation aggregation = Aggregation.newAggregation(
    match(Criteria.where("userId").is(accountId)
            .and("processingDay").gte(startMillis).lte(endMillis)),
    //sort(Sort.by(Direction.ASC, "x1", "x2")) // explicitly
    sort(Sort.by("x1", "x2")), //Default is ASC
    group("A", "state")
        .first("A").as("A")
        .push(new BasicDBObject("x1", "$x1")
                .append("x2", "$x2")
                .append("A", "$A")
        ).as("XS"));

如果始终存在第四个元素和一个URI(在the specification中不能保证),则可以通过搜索空白来找到它。

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

然后,您可以将输入文件中的每个图形处理为新文件或数据集

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)