2015-03-13 4 views
0

Загрузки данных RDF в Python выглядит следующим образом:Использование питона RDFLib парсеров без объекта графа

from rdflib import Graph 
g = Graph() 
g.parse("demo.nt", format="nt") 

Но что об использовании Парсеров формата автономно, как потоковые анализаторы, получая поток проанализированных лексем? Может ли кто-нибудь дать мне пример подсказки/кода?

ответ

2

Парсер NT следует парадигме использования «раковины» (а не вершины приемника) для хранения троек по мере их анализа. Я считаю, что токены, которые вы ищете, на самом деле являются тройными, потому что по умолчанию NT Parser uses the NTriplesParser.

Вы можете использовать тот же метод, что и приведенный ниже пример, до override NTSink.

В этом примере загрузится test NT formatted file, затем print строка текста при анализе строки. Вместо того, чтобы печатать строку, вы можете выполнить метод, который отсутствует.

example.py: Требуется файл в том же каталоге с именем ./anons-01.nt

from rdflib.plugins.parsers.ntriples import NTriplesParser, Sink 
# The NTriplesParser is what is used for a format="nt" parsing as found: 
# https://github.com/RDFLib/rdflib/blob/395a40101fe133d97f454ee61da0fc748a93b007/rdflib/plugins/parsers/nt.py#L2 

# Example NT file from: 
# https://github.com/RDFLib/rdflib/blob/395a40101fe133d97f454ee61da0fc748a93b007/test/nt/anons-01.nt 


class StreamSink(Sink): 
    """ 
    A sink is used to store the results of parsing, this almost matches the sink 
    example shown in ntriples: 
     https://github.com/RDFLib/rdflib/blob/395a40101fe133d97f454ee61da0fc748a93b007/rdflib/plugins/parsers/ntriples.py#L43 
    """ 
    def triple(self, s, p, o): 
     self.length += 1 
     print "Stream of triples s={s}, p={p}, o={o}".format(s=s, p=p, o=o) 


if __name__ == "__main__": 
    # Create a new parser and try to parse the example NT file. 
    n = NTriplesParser(StreamSink()) 
    with open("./anons-01.nt", "r") as anons: 
     n.parse(anons) 

output:

Stream of triples s=N33bb017ce2c340999d2aa6a071d79678, p=http://example.org/#p, o=http://example.org/#q 
Stream of triples s=N33bb017ce2c340999d2aa6a071d79678, p=http://example.org/#r, o=http://example.org/#s 
Stream of triples s=Nb8d195e0586f42c4bcc703be897c74fa, p=http://example.org/#p, o=http://example.org/#q 
Stream of triples s=Nb8d195e0586f42c4bcc703be897c74fa, p=http://example.org/#r, o=N235a8c8b4f91453892da284cb0c490e0 
Stream of triples s=N235a8c8b4f91453892da284cb0c490e0, p=http://example.org/#s, o=http://example.org/#t 
+0

вы могли бы взглянуть на этот вопрос [] (http://stackoverflow.com/questions/42493215/разобрать-РДФ-файл-Python)? – Stuart2041

 Смежные вопросы

  • Нет связанных вопросов^_^