2016-04-23 12 views
2

rdflib-jsonldを使用してデータベースからレコードを解析してrdflibグラフを作成します。しかし、トリプルの件名には、URLの/がありません。それを追加するには、私は次のコードを使用します。rdflibのトリプルの件名を一括編集

for s,p,o in graph1: 
      print 'parsing to graph2. next step - run query on graph2' 
      pprint.pprint((s,p,o)) 
      s = str(s) 
      s1 =s.replace('https:/w','https://w') 
      s = URIRef(s1) 
      graph2.add((s,p,o)) 

このステップが原因グラフのトリプルの高い多数の実行に非常に長い時間(数時間)かかります。どのように時間を短縮できますか?すべての要素をループするのではなく、どのように対象を一括して変更するのですか?

+0

もしあなたがSPARQLクエリを実行できるのであれば、INSERT/DELETEを使うことができます(例えば、ブログ記事、[SPARQL:owl:ClassのURIの更新](http://semanticarts.com/ブログ/ sparql-update-class-uri-in-place /)) [単一クエリで複数のトリプルを更新するためのSPARQLアップデートの例]に対する回答の例があります(http://stackoverflow.com/questions/19502398/sparql-update-example-for-updating-more-than-one triple-in-a-single-query)は、「特定の被験者のトリプルを置き換える更新」を示しています。 –

答えて

2

まず、適切な時間を測定するために、交換自体に関連しないもの、特に普通とかわいいプリントの両方を削除してください。それらは必要ありません。進捗インジケータが必要な場合は、N個おきに短いメッセージ(例えば、単一のドット)をログファイルに書き込みます。

メモリ過消費を回避します。私はあなたのグラフが内部的にどのように見えるかわかりませんが、平行なグラフ構造を作成せずに置き換えを行う方が良いでしょう。プロセス中にメモリの使用状況をチェックし、プログラムが空きRAMを使い果たした場合、問題が発生し、すべてのプロセスが遅くなります。既存のグラフを変更できない場合は、測定のために、そのような置換が失われて無駄な場合でも、2番目のグラフの作成を避けてください。

何も役に立たない場合は、元に戻ってください。ファイルをまだ解析していない段階で、Python re、またはバッチテキスト処理専用のsedなどのテキストツールを使用して、置き換えを実行できます。

関連する問題