1

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

4

2 回答 2

1

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

没有产生增量转储,因此您可以使用两个完整的转储自己生成差异,但这样做很简单,特别是因为新的 RDF 转储似乎是按主题 MID 排序的,这与四元转储不同。

于 2012-12-11T20:04:42.273 回答
1

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

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

该算法以线性时间运行,内存使用量很少,因此您可以轻松地在本地计算机上处​​理数 GB 的文件。

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

于 2012-12-12T23:05:40.450 回答