Google 地理编码 API 内部运作

Google geocoding API Inner Workings

我目前正在处理一些大型数据集,这些数据集包含一些基于位置的信息,但缺少创建可视化所需的直接纬度和经度测量值。

为了解决这个问题,我一直在使用需要地址或类似地址的信息作为输入并提供纬度和经度信息作为输出的地理编码 API。

我开始使用 Nominatim API. Unfortunately, due to the nature of the address-like data that I have, many of my queries failed so I started using the Google geocoding API。 Google API 为我提供了明显更高的成功率,但它是付费的 API 并不理想。

我意识到鉴于 Google 拥有的令人难以置信的资源,在合理的时间内构建一个与他们的地理编码 API 相媲美的系统几乎是不可能的,但这让我想知道引擎盖下发生了什么。

是否有类似 BERT 的翻译系统在起作用?发送后的文本会怎样?

我通过创建索引和倒排索引将 n-gram 用于类似用途。查看此包 ngram

import ngram 
...

country = filename.replace('.csv', '')
ind[country] = ngram.NGram()
inv[country] = {}
s_csv = csv.reader(stream, delimiter=';')
next(s_csv)
for row in s_csv:
    coord = tuple(map(float, row[0:2]))
    ad = ' '.join(row[2:]).lower()
    ind[country].add(ad)
    inv[country][ad] = (coord, address)

那么你可以使用find函数

注意法国和 OSM Data 等国家的内存消耗 ~16GB RAM

要查看其实现,请查看此 OpenGeoCode HTTP API Service source code