Как анализировать большие наборы данных с помощью RDFLib? - PullRequest
8 голосов
/ 15 апреля 2011

Я пытаюсь проанализировать несколько больших графов с помощью RDFLib 3.0, по-видимому, он обрабатывает первый и умирает на втором (MemoryError) ... похоже, MySQL больше не поддерживается как хранилище, можете ли вы предложить способ как-то разбирать те?

Traceback (most recent call last):
  File "names.py", line 152, in <module>
    main()
  File "names.py", line 91, in main
    locals()[graphname].parse(filename, format="nt")
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/graph.py", line 938, in parse
    location=location, file=file, data=data, **args)
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/graph.py", line 757, in parse
    parser.parse(source, self, **args)
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/nt.py", line 24, in parse
    parser.parse(f)
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/ntriples.py", line 124, in parse
    self.line = self.readline()
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/ntriples.py", line 151, in readline
    m = r_line.match(self.buffer)
MemoryError

1 Ответ

10 голосов
/ 15 апреля 2011

Сколько троек в этих файлах RDF? Я протестировал rdflib, и он не будет масштабироваться намного дальше, чем несколько десятков ктриплей - если вам повезет. Ни в коем случае это не очень хорошо работает с файлами с миллионами троек.

Лучший анализатор - rapper из Redland Libraries . Мой первый совет - не использовать RDF/XML и перейти на ntriples. Ntriples - более легкий формат, чем RDF / XML. Вы можете преобразовать RDF / XML в три строки, используя rapper:

rapper -i rdfxml -o ntriples YOUR_FILE.rdf > YOUR_FILE.ntriples

Если вам нравится Python, вы можете использовать привязки Redland python :

import RDF
parser=RDF.Parser(name="ntriples")
model=RDF.Model()
stream=parser.parse_into_model(model,"file://file_path",
                                      "http://your_base_uri.org")
for triple in model:
    print triple.subject, triple.predicate, triple.object

Я без проблем проанализировал довольно большие файлы (пару гигабайт) с библиотеками Redland.

В конце концов, если вы обрабатываете большие наборы данных, вам может понадобиться поместить ваши данные в масштабируемое тройное хранилище, обычно я использую 4store . 4store использует Redland для анализа файлов RDF. В долгосрочной перспективе, я думаю, вам нужно сделать масштабируемый тройной магазин. И с его помощью вы сможете использовать SPARQL для запроса ваших данных и SPARQL / Update для вставки и удаления троек.

...