有没有办法找到freebase数据的delta更新?

时间:2012-12-11 06:45:42

标签: freebase

我目前正在为我的应用程序使用freebase数据...只想要电影,电视等领域的一些信息。发现将来不支持tsv转储并且不完整。四转储具有所需的所有信息。问题是更新数据库,应该再次下载整个转储并与已下载和处理的数据进行交叉检查,然后进行更新。有没有其他方法可以更新数据或获取增量更新?

2 个答案:

答案 0 :(得分:1)

您可以在您感兴趣的域中查询自上次更新以来发生更改的内容,但这取决于您可能遇到配额问题的更改数量。

没有生成增量转储,所以你自己使用两个完整的转储生成了一个diff,但是特别简单,因为新的RDF转储似乎按主题MID排序,而不像quad转储。

答案 1 :(得分:1)

正如Tom指出的那样,新的RDF转储按主题排序,这允许您通过迭代文件来有效地区分整个数据集。基本的伪代码如下:

  • 跳过两个文件开头的前缀标题
  • 虽然两个文件中都有行:
    • 从每个文件中读取一行
    • 如果旧文件中的主题ID大于新文件中的主题ID:
      • 从具有相同主题ID的新文件中读取所有后续行
      • 将此主题添加到“已添加主题”列表
      • 将包含此主题的所有行添加到“添加的事实”列表中
    • 否则,如果旧文件中的主题ID小于新文件中的主题ID:
      • 从具有相同主题ID的旧文件中读取所有后续行
      • 将此主题添加到“已删除主题”列表中
      • 将包含此主题的所有行添加到“已删除的事实”列表中
    • 如果两个文件中的主题ID匹配,则为:
      • 从具有相同主题ID的两个文件中读取所有后续行
      • 区分线条以确定添加/删除了哪些
      • 将所有添加的行添加到“添加的事实”列表中
      • 将所有已删除的行添加到“已删除的事实”列表中
  • 通过按以下顺序合并所有更改列表来输出您的补丁:
    1. 删除事实
    2. 删除主题
    3. 添加主题
    4. 添加事实

此算法以线性时间运行,内存使用率极低,因此您可以轻松处理本地计算机上的数GB文件。

一旦有了RDF转储的差异,就需要编写一些代码来将补丁应用到现有数据库。由于修补程序的排序方式,在尝试添加或删除事实之前,您始终可以依赖数据库中存在的主题。