1

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

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

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

例如:
用户输入标签“iPhone”和发送到 DBPedia 的 SparSQL 查询。结果被解析,每个结果的一些数据显示给用户,然后用户选择最接近他们购买的东西。

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

我在想 Bigdata 或 Protege OWL,但都没有使用经验

任何人都可以建议这项任务的最佳工具和优点/缺点/学习曲线/等等......?

谢谢

4

2 回答 2

2

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

如果您想从 Freebase 和 DBpedia 中获取有关实体的“所有需要了解的信息”,那么最好使用三重商店。通过这种方式,可以在本地查询所有数据;但现在你必须担心保持更新。

于 2012-08-01T18:42:36.240 回答
1

对于您想到的那种事情,我认为您不一定需要高度可扩展的三重存储解决方案。在我看来,更重要的是您拥有一个工具包,可以轻松执行 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();
  }

(披露:我在芝麻上工作)

于 2012-07-31T23:34:18.043 回答