用户输入解析 - 城市/州/邮政编码/国家

时间:2009-07-01 11:07:06

标签: parsing user-input

我正在寻找有关使用多个城市/州/邮政编码/国家/地区组合解析用户输入的建议。

一个常见的例子就是Google地图所做的事情。

输入的一些例子是:

  • “城市,州,国家”
  • “城市,乡村”
  • “城市,邮政编码,国家”
  • “城市,州,邮政编码”
  • “邮政编码”

从用户解析此输入的有效且正确的方法是什么?

如果您了解任何示例实现,请分享:)

4 个答案:

答案 0 :(得分:1)

第一步是使用空格或逗号作为分隔字符将文本分解为单个标记。为了实现可伸缩性,您可以将每个令牌交给线程或服务器(如果使用类似于Map-Reducer的架构)来确定每个令牌是什么。例如,

  • 如果我们在模式中有数字,那么它可能是一个邮政编码。
  • 该项目是否为已知状态列表?
  • 国家也很容易像州一样处理,数量有限。
  • 与通常的写地址方式相比,令牌的顺序是什么?大多数输入可能会遵循当地邮局的地址格式定制。

获得单个令牌结果后,您可以将这些部件粘合在一起以获得完整地址。在有问题的情况下,您可以提示用户他们的真正含义(例如Google地图)并将该信息添加到学习列表中。

将这种支持添加到应用程序的最简单方法(假设您不是要构建地图系统)是查询Google或Yahoo并要求他们为您解析日期。

答案 1 :(得分:0)

我自己对谷歌处理这个问题非常着迷。我不记得在其他地方看到过类似的东西。

我相信,你试图在尝试各种分隔符的单词中分隔输入字符串 - 空格,逗号,分号等。然后你有几种组合。对于每种组合,您可以将每个单词与国家,城市,城镇,邮政编码数据库进行匹配。然后,您可以定义一些关于如何评估每个组合的组匹配结果的指标。这里也应该是交叉规则,比如邮政编码不匹配,但国家,城市,城镇匹配良好,并且在组合中引用有效地址,则指标会产生高分。

肯定很难,而不是晚间训练。它还需要强大的计算资源 - 共享托管可能会在10个请求下破解,但数据中心可以很好地服务。

不确定是否有示例实现。许多地理服务都是以付费方式提供的。像GoogleMaps那样复杂的东西可能会花费一大笔钱。

如果我错了,请纠正我。

答案 2 :(得分:0)

我发现了一个简单的PHP实现

Yahoo似乎有一个提供功能的Web服务(某种程度上)

Openstreetmap似乎在其主页上提供了相同的搜索功能

答案 3 :(得分:0)

假设您只处理这四个字段(City Zip State Country),除City之外的所有字段都有有限值,甚至我猜如果您有一个大城市列表也是有限的。因此,只需用逗号分隔每个字段,然后检查每个字段列表。

假设我们正在谈论美国地址 -

  • Zip是最明显的,所以请检查 首先。
  • 州有50x2选项 (加利福尼亚州或加利福尼亚州),检查下一个
  • 国家/地区有~190x2的选项,具体取决于 如何包容你想成为 (美国,美国,美国)。
  • 遗留下来的可能就是你的城市。

就效率而言,首先检查一些“标准”格式可能是有意义的,就像Dan建议的那样。