Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 简单文本解析库_Python - Fatal编程技术网

Python 简单文本解析库

Python 简单文本解析库,python,Python,我有一种从web获取地址的方法,因此存在许多已知错误,如: 123 Awesome St, Pleasantville, NY, Get Directions 我想成为: 123 Awesome St, Pleasantville, NY 是否有一个web服务或Python库可以对此提供帮助?我们可以开始创建一个项目列表,如“Get Directions”或更一般化的版本,但我认为可能会有一个用于这种文本分析的帮助程序库。这里有一个正则表达式,可以解析其中任何一个。如果你有其他的例子,我可以

我有一种从web获取地址的方法,因此存在许多已知错误,如:

123 Awesome St, Pleasantville, NY, Get Directions
我想成为:

123 Awesome St, Pleasantville, NY

是否有一个web服务或Python库可以对此提供帮助?我们可以开始创建一个项目列表,如“Get Directions”或更一般化的版本,但我认为可能会有一个用于这种文本分析的帮助程序库。

这里有一个正则表达式,可以解析其中任何一个。如果你有其他的例子,我可以改变当前的正则表达式

(?(?:[0-9]+\s+(?:\w+\s?+)+[,]\s+(?(?:\w+\s?+)[,]\s+(?(?:\w+\s?)+($)[,])


这甚至适用于格式与我类似的地址(纽约州普莱森特维尔北1234西1234)

我要说的是,除非数据采用固定格式,或者您有一个巨大的地址数据库来进行匹配,否则不可能以高信任度完成此任务

您可能不需要列出一个国家列表,然后根据您使用的每个国家设置一个规则集。美国的规则集可能包括州、城市和邮政编码的列表,以及寻找街道地址的模式。然后,您将删除任何不是州、市邮政编码或看起来像街道地址的内容

你仍然会删除应该作为地址一部分的内容,但至少在瑞典地址中,可以只包括农场的名称,而不是街道和号码。如果美国国家/地区地址相同,则除非您能够访问包含所有美国地址的数据库,否则无法知道地址的一部分是什么,而不是什么。:-)

如果地址包含其中一个坏字符串,请向后走,直到找到另一个非空白字符。如果字符是分隔符之一,例如
,则删除该字符之后的所有内容。如果是另一个角色,请删除该角色后面的所有内容

列出已知的坏字符串。然后,您可以使用该列表构建一个巨大的正则表达式,并使用
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

地址本身是否总是采用相同的格式?这只是困扰你的后续问题?那么,你正在寻找一个自然语言地址解析器?定制正则表达式是一个好的解决方案吗?这是一个难题。你如何知道一段文字是否不是地址的一部分?首先需要一种区分有效数据和无效数据的方法。如果无效数据的标准是模糊的,则存在问题。根据具体情况,可能会为此编写一个简单的解决方案,但对于一般情况,没有简单的方法来解决它。在我的情况下,我有一个地址,并且有一些已知的问题,我可以开始构建正则表达式。我正在寻找比我现在对两个已知的坏字符串“Get Directions”和“Multiple Location”更具扩展性的脚手架,它们前面有一个可选的逗号:re.sub(r'(?:,)?(Get Directions | Multiple Locations)',,“123 Awesome St,New York,NY,Get Directions,Multiple Locations”),我没有寻找地址解析器。我想在转发到谷歌地图之前先清理一小部分已知问题的地址。等等,你不想分析文本的是什么?这就是你在问题中所说的…:-)谢谢然而,这对我想要的东西来说太脆了。我只想从一个好地址中去掉已知的坏字符串。GoogleMaps在我进行预处理后会处理半正常地址字符串。