predicthq / address-formatter-templates
来自 https://github.com/OpenCageData/address-formatting 的地址格式化模板 - 与 predicthq/address-formatter 包一起使用。
This package is not auto-updated.
Last update: 2020-08-19 04:52:05 UTC
README
地址格式化
快速示例
给定一组地址部分
house_number: 17
road: Rue du Médecin-Colonel Calbairac
neighbourhood: Lafourguette
suburb: Toulouse Ouest
postcode: 31000
city: Toulouse
county: Toulouse
state: Midi-Pyrénées
country: France
country_code: FR
您需要编写逻辑以按消费者期望的格式编译地址
17 Rue du Médecin-Colonel Calbairac
31000 Toulouse
France
或者也许只是
Rue du Médecin-Colonel Calbairac
Toulouse
France
此存储库包含用于世界各地领土的各种地址格式的模板。它还包含测试用例。
我们讨论的是哪些地址
预期用例是数据库或地理编码系统(正向、反向、自动完成),其中我们既知道地址的国家,也知道用户/读者的语言。地址显示给消费者(例如在应用程序中),而不是用于实际邮寄信封。我们使用它来格式化来自 OpenCage Geocoder 的输出。
我们必须处理
- 不完整的数据
- 任何带有名称的东西(山峰、桥梁、公交车站)
与 实际邮政(办公室)邮件 不同,我们不需要处理
- 公寓/住宅号,楼层号
- 邮政信箱
- 翻译(目的地)地址的语言。无论输入何种语言,都输出相同语言。
处理逻辑
我们希望通过此存储库实现一系列(编程)语言无关的模板。然后,您可以由您喜欢的任何软件处理这些模板。
我们已经编写、使用并维护了一个在 Perl 中工作的处理程序实现,请参阅(CPAN:Geo::Address::Formatter,github 仓库)。还有一个开源的 PHP 实现。
我们希望有其他语言实现。如果您编写了处理程序,请告诉我们,以便我们在此列出。
覆盖范围
截至 Sat 25 Mar 2017
覆盖范围是
We are aware of 248 territories
We have tests for 250 (100%) territories
We have rules for 249 (100%) territories
0 (0%) territories have neither rules nor tests
我们需要更多特定语言的首字母缩写,请参阅 conf/abbreviations
测试和配置覆盖的详细分解可以通过运行 bin/coverage.pl -d
来找到。所有已知领土的列表在 conf/country_codes.yaml
中。注意:列表是所有官方分配的 ISO 3166-1 alpha-2 代码,并不是关于这些领土是否是或不是政治实体,或是否应该或不应该成为政治实体的政治声明。
文件格式
文件格式为YAML。模板采用Mustache编写。这两种格式都是人类可读的,严格的,解决转义问题并支持注释。YAML允许引用(称为“锚点”)以避免复制粘贴,Mustache允许子模板(称为“部分”)。
如何添加您的国家/地区
- 编辑位于
testcases/countries
目录下针对国家/地区的.yaml测试用例。文件名对应适当的ISO 3166-1 alpha-2代码 - 请参阅conf/country_codes.yaml
- 获取样本数据的一个好方法是
- 在OpenStreetMap中找到您目标地区的有地址的位置(房屋、商业等)
- 获取位置的坐标(纬度,经度)
- 将坐标放入OpenCage Geocoder演示页面
- 在原始响应选项卡中查看生成的JSON
- 编辑
conf/countries/worldwide.yaml
- 可能您的国家/地区使用的是文件顶部定义的现有通用格式。如果是这样,那就太好了,只需将country_code映射到通用模板即可。您可能还需要添加清理代码(以
DE
条目为例)。 - 如果不是,您需要定义一个新的通用规则集
- 可能您需要在
conf/state_codes.yaml
中定义新的州/地区映射
- 可能您需要在
- 为了测试,您现在需要通过处理器(见上文)处理.yaml测试用例,并确保输入导致所需输出。
如有疑问,请通过github issues联系。
格式化规则
目前我们支持以下格式化规则
replace:
操作于输入值的正则表达式,用于删除诸如“伦敦自治市”之类的官僚主义垃圾。注意,如果以格式X=开始定义正则表达式,例如city=,则它应仅作用于具有该键的值postformat_replace:
操作于最终输出的正则表达式add_component:
值的形式为component=XXXX
change_country:
改变输入的国家值,对于附属领土非常有用。可以包括替换如$state
,这样组件值随后被插入到新的国家值中。请参阅testcases/countries/sh.yaml
以获取示例。use_country:
使用另一个国家的格式化配置,对于避免重复配置的附属领土非常有用
未来
更多测试!对于每个关于地址的规则,都有例外和边缘情况需要考虑。总是需要更多的测试用例。
计划中的功能
- 基本错误检查,例如忽略明显不是邮编的东西
- 为邮编格式定义规则
我们欢迎您的pull请求。我们可以共同应对世界!
我们是谁?
我们运营OpenCage Geocoder。
我们还运营#geomob,这是一个伦敦基于位置的服务的开发者聚会,我们尽力突出地理创新。
进一步阅读
这里是我们的博客文章,介绍了这个项目宣布此项目及其背后的动机。
您可能会喜欢Michael Tandy的程序员关于地址的谬误。
如果您需要实际的地址数据,请查看OpenAddresses。
如果您想要将经纬度转换成格式良好的地址或地名,那就是地理编码器的工作。来看看我们的:OpenCage Geocoder。
如果这些都让您觉得地址很糟糕,请查看what3words,它允许您完全摒弃它们。