【问题标题】:User input parsing - city / state / zipcode / country用户输入解析 - 城市/州/邮政编码/国家
【发布时间】:2009-07-09 05:05:56
【问题描述】:

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

谷歌地图就是一个常见的例子。

输入的一些例子是:

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

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

如果您知道任何示例实现,请分享:)

【问题讨论】:

    标签: parsing user-input


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      这肯定很困难,而不是晚上的代码练习。它还需要强大的计算资源 - 共享主机可能会在 10 个请求下破解,但数据中心可以很好地提供服务。

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

      如果我错了,请纠正我。

      【讨论】:

        【解决方案3】:

        我找到了一个简单的 PHP 实现

        雅虎似乎有一个提供功能的网络服务(有点)

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

        【讨论】:

          【解决方案4】:

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

          假设我们说的是美国地址-

          • Zip 最明显,因此请检查 首先。
          • 状态有 50x2 选项 (加利福尼亚或加利福尼亚),检查下一个
          • 国家/地区有 ~190x2 选项,具体取决于 关于你想要的包容性 (美国、美国、美国)。
          • 剩下的可能就是你的城市。

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

          【讨论】:

            猜你喜欢
            • 2014-01-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-10
            • 1970-01-01
            • 1970-01-01
            • 2014-12-30
            • 1970-01-01
            相关资源
            最近更新 更多