【问题标题】:Split all the different graphs included in a n-quads file拆分 n-quads 文件中包含的所有不同图形
【发布时间】:2019-05-06 14:21:18
【问题描述】:

我有一个很大的 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。我真的不知道如何解决这个问题,所以任何帮助将不胜感激。

【问题讨论】:

  • 我只会使用 awk、grep 等 Linux 命令实用程序 - 但如果您真的想使用 rdflib,问题究竟出在哪里?文档在线,加载图和处理图在那里得到了很好的解释。只需使用 ConjunctiveGraph 在其中加载文件,您就基本上完成了,或者可以根据 N-Quads 文件对每个图表执行任何您想要的操作
  • 好吧,我在 ConjuctiveGraph 中加载了我的文件,但是之后我看不到如何拆分不同的图,rdflib 的文档不是很明确
  • 不,我不同意你的说法:rdflib.readthedocs.io/en/stable/apidocs/… - 你可以看到 contexts() 方法返回所有上下文,也就是命名图,使用 triples() 方法你可以访问所有三元组给定上下文的

标签: rdf semantic-web rdflib n-quads


【解决方案1】:

如果这些行使得所有图形 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(the specification 不保证),您可以通过搜索空格找到它。

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):
    ...

【讨论】:

    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多