我有一个从网络上获取地址的方法,因此,有许多已知的错误,如:
123 Awesome St, Pleasantville, NY, Get Directions
我想成为:
123 Awesome St, Pleasantville, NY
是否有可以帮助解决此问题的Web服务或Python库?我们可以开始创建一个项目列表,例如“,获取方向”或更广泛的版本,但我认为可能有一个帮助库用于这种文本分析。
答案 0 :(得分:1)
如果地址包含其中一个错误的字符串,请向后走,直到找到另一个非空白字符。如果角色是您的分隔符之一,例如,
或:
,则从该角色开始删除所有内容。如果它是一个不同的角色,请在该角色后删除所有。 击>
列出已知的坏字符串。然后,您可以使用该列表并使用它来构建一个巨大的正则表达式并使用re.sub()
。
这是一个天真的解决方案,并不会特别高效,但它确实为您提供了一种添加已知错误字符串的简洁方法,方法是将它们添加到名为.badstrings
或类似的文件中并构建从他们那里列出。
请注意,如果您对这些错误的字符串做出错误的选择,您将破坏算法。但它应该适用于您在评论中描述的简单案例。
编辑:这就是我的意思:
import re
def sanitize_address(address, regex):
return regex.sub('', address)
badstrings = ['get directions', 'multiple locations']
base_regex = r'[,\s]+('+'|'.join(badstrings)+')'
regex = re.compile(base_regex, re.I)
address = '123 Awesome St, Pleasantville, NY, Get Directions'
print sanitize_address(address, regex)
输出:
123 Awesome St, Pleasantville, NY
答案 1 :(得分:0)
这是一个解析任何一个的正则表达式。如果您有其他示例,我可以将当前正则表达式更改为
(?<address>(?:[0-9]+\s+(?:\w+\s?)+)+)[,]\s+(?<city>(?:\w+\s?)+)[,]\s+(?<state>(?:\w+\s?)+)(?:$|[,])
这甚至适用于与我的地址类似的地址(1234 North 1234 West,Pleasantville,NY)
答案 2 :(得分:0)
我会说除非数据是固定格式的,否则这项任务不可能高度自信,或者你有一个巨大的地址数据库来进行匹配。
您可以可能获取国家/地区列表,然后是您使用的每个国家/地区的规则集。美国的规则集可以包括州,城市和邮政编码列表以及查找街道地址的模式。然后你会丢弃任何不是州,邮政编码或街道地址的东西。
你仍然会丢弃应该成为地址一部分的东西,至少对瑞典地址来说,这可能只包括农场的名称而不是街道和号码。如果美国国家/地区的地址相同,除非您可以访问包含所有美国地址的数据库,否则无法知道地址的一部分是什么,什么不是。 : - )