简单的文本解析库

时间:2011-02-22 17:01:51

标签: python

我有一个从网络上获取地址的方法,因此,有许多已知的错误,如:

123 Awesome St, Pleasantville, NY, Get Directions

我想成为:

123 Awesome St, Pleasantville, NY

是否有可以帮助解决此问题的Web服务或Python库?我们可以开始创建一个项目列表,例如“,获取方向”或更广泛的版本,但我认为可能有一个帮助库用于这种文本分析。

3 个答案:

答案 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)

我会说除非数据是固定格式的,否则这项任务不可能高度自信,或者你有一个巨大的地址数据库来进行匹配。

您可以可能获取国家/地区列表,然后是您使用的每个国家/地区的规则集。美国的规则集可以包括州,城市和邮政编码列表以及查找街道地址的模式。然后你会丢弃任何不是州,邮政编码或街道地址的东西。

你仍然会丢弃应该成为地址一部分的东西,至少对瑞典地址来说,这可能只包括农场的名称而不是街道和号码。如果美国国家/地区的地址相同,除非您可以访问包含所有美国地址的数据库,否则无法知道地址的一部分是什么,什么不是。 : - )