11

我们有一个显示地图数据的程序(想想谷歌地图,但为我们的客户提供了更多的交互性和自定义图层)。

我们允许通过一组组合框进行导航,这些组合框用一堆数据预填充某些字段(即:国家:加拿大,填写省字段。选择安大略省,并填写县/地区列表。选择县/地区,一个城市被填写,等等......)。

虽然这保证了准确的地址,但如果用户不知道街道地址或城市的位置(即,厨房在哪个县/地区?),他们会很痛苦。

因此,我们正在考虑尝试使用自由格式的文本字段进行地址解析器。

用户可以输入类似这样的内容(类似于谷歌地图、必应地图等):22 Main St, Kitchener, On

我们可以将其划分为多个部分并查找数据并找到他们正在寻找的点(或建议替代方案)。

问题在于我们如何正确划分信息?我们如何分解这些部分并找到可能的匹配项?我猜我们不能保证用户会以我们一直期望的格式输入数据(显然)。如果我们没有找到完全匹配(或找到多个完全匹配......例如,在不同县具有相同街道名称的两个城市),对此的跟进将是如何呈现数据。

我们在地图数据(主要是 mapinfo 选项卡格式)中有大量可用数据。所以我们可以快速扫描街道名称、城市、州等。但我不确定解决这个问题的最佳方法。当然,使用谷歌地图会很好,但是我们的大多数客户都处于封闭的网络中,通常不允许外部访问,并且大多数人不愿意依赖谷歌地图(因为它不包含他们需要的那么多信息,例如自定义地图图层)。显然,他们可以去谷歌找到正确的位置,然后转移到我们的软件,但这会很耗时,而且过程的速度可能非常重要。

4

4 回答 4

7

这本质上是一类命名实体解析问题。维基百科上的NER

解决此问题的最佳方法是使用语言转换器解析地址以识别各种构造 - 这种方法类似于使用具有有限状态机的正则表达式。

我在 Java NLP 和称为GATE的机器学习框架方面取得了巨大成功,他们的传感器库称为 Jape。查看他们的 GUI,并使用它为其编写一些 Java 代码!

他们的内置示例应该让您从基础开始,然后您可以根据需要对其进行扩展。本质上,它使用规则和规则引擎将文本划分为组件,例如,

Xyz, Blah St,
Foo City, 11110, CA

将被翻译为,

Place: Xyz
Street: Blah St
City: Foo
...

然后您可以使用您的位置数据库进行匹配。

Jape 还支持字典查找,除了规则 - 所以如果你的数据库中已经有“Blah St”,并且它有 2 个父级 - city Foo 和 Bar - 你只需通过解析下一行来消除歧义。

编辑:GATE 包含一个名为 ANNIE 的工具——一种信息提取系统,可以用来识别地址。这使用了一些可以构建的内置 Jape 规则。

于 2009-06-04T23:55:06.610 回答
3

顺便说一句,您是否见过 SmartyStreets 正在试验的新 API 端点?它从文本中提取地址并验证它们并将它们转换为组件。

请参阅其他更详细的 Stack Overflow 帖子。我在 SmartyStreets 工作并帮助开发了它,所以我可以告诉你这是一个非常困难的问题,即使从表面上看似乎很简单。

于 2013-05-27T04:43:42.683 回答
1

Simson Garfinkel 为他的漂亮地址簿NeXTstep(后来为 Mac OS X 编译和更新并提交给 Apple 设计竞赛)做了一个。从那时起,它一直是开源的,可从他的以下网站获得:

http://simson.net/ref/sbook5/

于 2013-05-23T16:54:01.763 回答
0

Geocoder.ca对位置地址字符串进行清理、标准化和地理编码。它还附加了邮政编码、时区和区号。

例如: https ://geocoder.ca/22%20Main%20St,%20Kitchener,%20On?geoit=xml

<geodata>
        <latt>43.286272</latt>
        <longt>-80.445823</longt>
     <postal>N0B1E1</postal>
<Dissemination_Area><dauid>35300802</dauid><adauid>35300042</adauid></Dissemination_Area>
<AreaCode>226,519</AreaCode>
<TimeZone>America/Toronto</TimeZone>
<standard>
<stnumber>22</stnumber><staddress>Main ST</staddress><city>Kitchener</city><prov>ON</prov><confidence>0.7</confidence></standard>
</geodata>

于 2018-05-01T21:10:24.573 回答