![]() |
1
114
我在这种解析上做了很多工作。因为有错误,你不会得到100%的准确度,但有一些事情你可以做,以获得大部分的方式,然后做一个视觉的BS测试。这是解决问题的一般方法。这不是代码,因为写代码很学术,没有什么奇怪之处,只是需要大量的字符串处理。 (现在您已经发布了一些示例数据,我做了一些小的更改)
我希望这能有所帮助。 |
![]() |
2
93
我认为外包这个问题是最好的选择:把它发送到谷歌(或雅虎)的地理编码器。geocoder不仅返回lat/long(这里不感兴趣),还返回对地址的丰富解析,其中填充了未发送的字段(包括zip+4和county)。 例如,解析“1600圆形剧场公园路,山景,CA”将生成
现在 那是 可解析的! |
![]() |
3
25
最初的海报可能已经持续很久了,但是我尝试了移植Perl Geo::StreetAddress:US 使用的模块 geocoder.us 对于C,把它扔到codeplex上,并认为在将来遇到这个问题的人可能会发现它是有用的: 在这个项目的主页上,我试着讨论它(非常真实)的局限性。由于它没有得到有效街道地址的USPS数据库的支持,解析可能不明确,不能确认或否认给定地址的有效性。它可以尝试从字符串中提取数据。 它适用于这样的情况:当您需要获取一组数据时,主要是在正确的字段中,或者希望提供数据输入的快捷方式(允许用户将地址粘贴到文本框中,而不是在多个字段之间切换)。它是 不 用于验证地址的可传递性。 它并没有试图解析出街道线以上的任何东西,但有人可能会和regex混在一起,得到一些相当接近的东西——我可能只是在门牌号处把它分开。 |
![]() |
4
16
我以前做过。 要么手动操作,(构建一个好的图形用户界面,帮助用户快速操作),要么让它自动操作,对照最近的地址数据库进行检查(你必须购买它),然后手动处理错误。 手动操作每个大约需要10秒,这意味着您可以每小时3600/10=360,所以4000应该需要大约11-12小时。这将给你一个高的准确率。 为了自动化,您 需要 一个最新的美国地址数据库,并根据它调整您的规则。我建议不要喜欢regex(很难长期维护,很多例外)。对数据库进行90%匹配,然后手动执行其余操作。 请务必在以下网址获取邮政寻址标准(USPS)的副本: http://pe.usps.gov/cpim/ftp/pubs/Pub28/pub28.pdf 注意它有130多页长。要实现的正则表达式将是螺母。 对于国际地址,所有赌注都取消了。美国工人将无法验证。 或者,使用数据服务。但是,我没有任何建议。 此外:当你把邮件里的东西发出去的时候(这就是它的目的,对吗?)确保您在信封上(在正确的位置)写上“请求地址更正”,并且 更新 数据库。(我们为前台人员做了一个简单的图形用户界面;实际整理邮件的人员) 最后,当您清除了数据后,寻找重复项。 |
![]() |
5
13
我已经在地址处理领域工作了5年左右,现在真的没有什么好消息。正确的解决方案将取决于数据的值。如果它不是很有价值,那么像其他答案所建议的那样,将它通过解析器。如果它甚至有点价值,那么您肯定需要一个人工评估/纠正解析器的所有结果。如果您正在寻找一个完全自动化、可重复的解决方案,那么您可能需要与地址更正供应商(如Group1或Trillium)交谈。 |
![]() |
6
13
在这里的建议之后,我在VB中设计了以下函数,它创建了可传递的,尽管并不总是完美的(如果给出了公司名称和套件行,它结合了套件和城市)可用数据。如果我违反了自己的规则,请随时对我进行评论/重构/大喊大叫,等等:
路过
|
![]() |
7
9
SmartyStreets有一个新功能,可以从任意输入字符串中提取地址。(注:我不在SmartSystems工作。) 它成功地从上述问题中给出的示例输入中提取了所有地址。(顺便说一下,这10个地址中只有9个有效。)
以下是一些输出:
下面是相同请求的csv格式输出:
我是最初编写该服务的开发人员。我们实现的算法与这里的任何特定答案都有点不同,但是每个提取的地址都是通过地址查找API验证的,因此您可以确定它是否有效。每一个验证结果都是有保证的,但我们知道其他结果并不完美,因为 非常清楚 在这个线程中,地址是不可预测的,甚至有时对人类也是如此。 |
![]() |
8
8
很好的建议,或者你可以对谷歌地图的每个地址执行curl请求,它将返回正确格式的地址。从那以后,你就可以随心所欲了。 |
![]() |
9
7
+1关于James A.Rosen的建议解决方案,因为它对我很有效,但是对于完美主义者来说,这个网站是一本引人入胜的书,也是我在记录全球地址方面所看到的最好的尝试: http://www.columbia.edu/kermit/postal.html |
![]() |
10
6
记录地址的方式有什么标准吗?例如:
我的一般答案是一系列的正则表达式,尽管其复杂性取决于答案。如果根本没有一致性,那么您可能只能通过regex(即过滤掉邮政编码和状态)获得部分成功,并且必须手工完成其余的工作(或者至少非常仔细地完成其余的工作以确保您发现错误)。 |
![]() |
11
6
对样本数据的另一个请求。 如前所述,我将从拉链向后工作。 一旦您有了一个zip,我将查询一个zip数据库,存储结果,并从字符串中删除它们和zip。 这会让你的地址一团糟。大多数(全部?)地址将以数字开头,因此在剩余的字符串中查找第一个出现的数字,并从该数字到字符串的(新)结尾获取所有内容。那是你的地址。那个号码左边的任何东西都可能是收件人。 您现在应该将城市、州和邮政编码存储在一个表中,并且可能包含两个字符串:收件人和地址。对于地址,检查是否存在“suite”或“apt”等,并将其分为两个值(地址行1和2)。 对于收信人,我会把字符串的最后一个单词作为姓氏,然后将其余的单词放在名字字段中。如果您不想这样做,您需要在开始时检查称谓(先生、女士、博士等),并根据空格数对名称的构成方式进行一些假设。 我认为没有任何方法可以100%准确地分析。 |
![]() |
12
6
尝试 www.address-parser.com . 我们使用他们的网络服务,你可以在线测试。 |
![]() |
13
5
根据样本数据:
这并不完美,但它应该是一个很好的起点。 |
![]() |
14
4
如果是人类输入的数据,那么您将花费太多的时间来尝试对异常进行编码。 尝试:
|
![]() |
15
3
这不会解决您的问题,但是如果您只需要这些地址的lat/long数据,那么google maps api将很好地解析非格式化地址。 |
![]() |
16
3
RecognicContact是一个分析美国和欧洲地址的Windows COM对象。你可以试穿一下 http://www.loquisoft.com/index.php?page=8 |
![]() |
17
3
你可能想看看这个!! http://jgeocoder.sourceforge.net/parser.html 对我来说很有魅力。 |
![]() |
18
3
这类问题很难解决,因为数据中存在潜在的歧义。 下面是一个基于Perl的解决方案,它基于正则表达式定义递归下降语法树,以解析许多有效的街道地址组合: http://search.cpan.org/~kimryan/Lingua-EN-AddressParse-1.20/lib/Lingua/EN/AddressParse.pm . 这包括地址中的子属性,例如: 12 1st Avenue N Suite 2 Towere CA 12345 USA(美国) 它类似于 http://search.cpan.org/~timb/Geo-StreetAddress-US-1.03/US.pm 以上提到,但也适用于非美国地址,如英国、澳大利亚和加拿大。 这是您的一个示例地址的输出。请注意,需要首先从“A.P.Croll&Son 2299 Lewes Georgetown Hwy,Georgetown,de 19947”中删除“姓名”部分,以将其缩减为“2299 Lewes Georgetown Hwy,Georgetown,de 19947”。这很容易通过删除字符串中第一个数字之前的所有数据来实现。
|
![]() |
19
2
由于Word中存在错误的可能性,请考虑使用Soundex和LCS算法来比较字符串,这将有很大帮助! |
![]() |
20
2
使用谷歌API
|
![]() |
21
2
对于Ruby或Rails开发人员来说,有一个很好的gem叫做 street_address . 我在我的一个项目中使用过这个,它完成了我需要的工作。
我唯一的问题是每当地址是这种格式时
|
![]() |
22
1
有些数据服务提供了一个邮政编码,它会给你该邮政编码中的街道名称列表。 使用regex提取zip或city state-找到正确的一个,或者如果一个错误同时得到这两个。 将街道列表从 data source 更正城市和州,然后更正街道地址。一旦获得有效的地址行1、城市、州和邮政编码,就可以对地址行2..3进行假设。 |
![]() |
23
1
我不知道这有多可行,但我没有看到这一点,所以我想我会继续建议: 如果你严格地在美国…获取所有邮政编码、州、城市和街道的庞大数据库。现在在你的地址里找这些。您可以通过测试找到的城市是否存在于您找到的州中,或者通过检查找到的街道是否存在于您找到的城市中来验证找到的内容。如果没有,约翰可能不在约翰街,而是收件人的名字…基本上,尽可能多地获取信息,并对照这些信息检查您的地址。 一个极端的例子是得到一个美国的所有地址的列表,然后找出哪个地址与您的每个地址最相关… |
![]() |
24
1
有perl geo::streetaddress::us包的javascript端口: https://github.com/hassansin/parse-address . 它是基于regex的,工作得相当好。 |
![]() |
batman · 如何用特定模式grep特定行及其子网行? 2 年前 |
![]() |
Jensen Holm · 在非常大的字符串中查找链接时遇到问题 3 年前 |
![]() |
MBF · PHP导入/解析XML文件内容保存到数据库 3 年前 |
![]() |
user10717742 · 用java编写的自定义文件解析器需要改进 3 年前 |
![]() |
Muhsin Muhammed · 向文件中的行添加引号和逗号 3 年前 |
![]() |
Felkru · 添加字符串会在Javascript中返回空字符串 3 年前 |
![]() |
Mustard Tiger · 熊猫解析文本列 3 年前 |