【问题标题】:Is there any way to find freebase data's delta updates?有什么方法可以找到 freebase 数据的增量更新?
【发布时间】:2012-12-13 07:27:47
【问题描述】:

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

【问题讨论】:

    标签: freebase


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-14
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 2023-01-17
        • 1970-01-01
        相关资源
        最近更新 更多