从DBPedia中提取的数据的可能存储选项

时间:2012-07-31 22:28:20

标签: owl freebase dbpedia bigdata protege

我正在开发一个应用程序,允许用户标记产品购买(通过Web应用程序)。

我打算使用这些标签自动查询DBPedia(可能的其他开放数据源,如FreeBase)。

从DBPEdia返回的顶部 N 结果将显示给用户,他们将选择与他们输入的标签最相似的那个。 (我只会提取具体数据)。

例如:
用户输入标签'iPhone'和发送给DBPedia的SparSQL查询。解析结果并向用户显示每个结果的一些数据,然后用户选择与他们购买的最相似的结果。

我想从用户选择的DBpedia结果中提取一些数据,并在以后的阶段将其存储用于营销目的。 (理想情况下通过调用API)

我在考虑使用Bigdata或Protege OWL但没有使用任何一种

的经验

任何人都可以为这项任务和优势/劣势/学习曲线/等提出最好的工具吗?

由于

2 个答案:

答案 0 :(得分:2)

这完全取决于您要对提取的数据执行的操作。最简单的选择是将已协调的实体URI与您的其他数据一起存储在关系数据库甚至NoSQL数据库中。这使您可以在以后轻松查询该实体的Freebase和DBpedia。

如果你想从Freebase和DBpedia中获取关于某个实体的“所有必须知道的事情”,那么你可能最好使用三重商店。使用这种方法,您可以在本地查询所有数据;但现在你不得不担心保持更新。

答案 1 :(得分:1)

对于您想到的那种事情,我认为您不一定需要高度可扩展的Triplestore解决方案。在我看来,更重要的是你有一个工具包,可以轻松执行SPARQL查询,结果处理和RDF数据的快速本地缓存。

考虑到这些事情,我建议您查看OpenRDF Sesame。它是一个Java工具包和API,用于处理RDF和SPARQL,支持多个存储后端。它有一些内置的商店,可以满足您的需求(在一个商店中扩展到大约1亿个事实),如果您确实发现需要更大/更好的存储解决方案,BigData或OWLIM等商店相当漂亮很多只是直接替换Sesame自己的存储后端,因此您无需对代码进行大的更改即可切换。

只是为了给你一个想法:以下几行代码使用Sesame来针对DBPedia触发SPARQL查询并处理结果:

  SPARQLRepository dbpediaEndpoint = new SPARQLRepository("http://dbpedia.org/sparql");
  dbpediaEndpoint.initialize();
  RepositoryConnection conn = dbpediaEndpoint.getConnection();
  try {
     String queryString = " SELECT ?x WHERE { ?x a foaf:Person } LIMIT 10";
     TupleQuery query = conn.prepareTupleQuery(Querylanguage.SPARQL, queryString);
     TupleQueryResult result = query.evaluate(); 

     while(result.hasNext()) {
        // and so on and so forth, see sesame manual/javadocs 
        // for details and examples
     }
  }
  finally {
    conn.close();
  }

(披露:我在芝麻工作)