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

5
我正在寻求有关从用户中以多种组合方式解析城市/州/邮编/国家输入的建议。一个常见的例子就是Google地图。
一些输入示例包括:
- "城市, 州, 国家" - "城市, 国家" - "城市, 邮编, 国家" - "城市, 州, 邮编" - "邮编"
从用户处解析这些输入的高效且正确的方法是什么?
如果您知道任何示例实现,请分享:)
4个回答

1

第一步是使用空格或逗号作为分隔符将文本拆分为单个标记。为了可扩展性,您可以将每个标记交给线程或服务器(如果使用类似Map-Reducer的架构)来确定每个标记的含义。例如:

  • 如果模式中有数字,则可能是邮政编码。
  • 该项是否在已知州列表中?
  • 处理国家与州类似,数量有限。
  • 标记的顺序与地址常见书写方式相比如何?大多数输入可能会遵循当地邮局的地址格式。

一旦您获得了单个标记结果,就可以将它们粘合在一起以获取完整的地址。在存在问题的情况下,您可以提示用户他们真正想表达的意思(就像Google地图一样),并将该信息添加到学习列表中。

假设您不打算构建地图系统,则向应用程序添加此支持的最简单方法是查询Google或Yahoo并要求它们为您解析日期。


0
假设你只处理这四个字段(城市、邮编、州、国家),除了城市之外,所有字段都有有限的取值,即使是城市,如果你有一个大城市列表,也是有限的。所以只需按逗号分隔每个字段,然后与每个字段列表进行比对。
假设我们讨论的是美国地址-
- 邮编是最明显的,所以首先检查它。 - 州有50x2个选项(加利福尼亚或CA),接下来检查它。 - 国家有约190x2个选项,取决于你想要多广泛的范围(US,United States,USA)。 - 剩下的可能就是你的城市了。
就效率而言,按照丹的建议,先检查一些“标准”格式可能是有意义的。

0

我自己非常着迷于Google是如何处理它的。我不记得在其他任何地方看到过类似的东西。

我相信,您尝试使用各种分隔符(空格、逗号、分号等)将输入字符串分隔成单词。然后您有几个组合。对于每个组合,您取每个单词并将其与国家、城市、城镇、邮政编码数据库进行匹配。然后,您确定如何评估每个组合的组匹配结果的某些度量标准。这里还应该有交叉规则,例如如果邮政编码不匹配,但国家、城市、城镇匹配,并且组合中引用了有效地址,则度量标准会产生高分数。

这确实很困难,不是一个晚上就能完成的编程练习,而且需要强大的计算资源-共享托管可能仅能承受10个请求,但数据中心可以很好地处理它。

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

如果我错了,请纠正我。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接