Wikidata 是一个巨大的人行横道文件

主要观点:利用 DuckDB 和 Ruby 构建地图平台连接表,以 Wikidata 为数据源获取地理实体的交叉表信息。
关键信息:

  • Wikidata 是 Wikipedia 的结构化数据版本,包含大量外部 ID 可用于开发跨平台应用,本文聚焦于构建“places”的交叉表。
  • 下载的 Wikidata 文件需处理成合适格式,通过命令行将其分割成小文件,DuckDB 可用于处理这些文件并统计实体数量。
  • 探索 Wikidata 模式,其 claims 类似 OpenStreetMaps 的 tag 系统,可用于描述外部 ID 等信息,本文重点关注外部 ID 的 claims。
  • 用 Ruby 脚本准备数据,去除不必要的元数据,将 claims 处理为合适格式,利用 DuckDB 的UNNEST函数构建交叉表,包含 23,689,931 个 ID 对,耗时约 45 秒。
  • 还创建了包含名称、描述等的表以及坐标表,并可进一步利用 Wikidata 的其他信息。
    重要细节:
  • 下载的 Wikidata 文件近 140GB,处理后得到约 10700 万个实体。
  • 以 Belgium 为例展示 Wikidata 记录的结构,包括各种字典和 claims。
  • Ruby 的 Ractors 可用于并行处理 535 个分块文件。
  • 构建的交叉表可通过一些 SQL 操作进一步处理和扩展,如创建包含标签的表等。
阅读 17
0 条评论