主要观点:利用 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 操作进一步处理和扩展,如创建包含标签的表等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。