如何从非结构化地址字符串解析郊区

时间:2019-05-21 12:37:29

标签: python parsing

Python noob在这里。

我正在处理一个大型数据集,其中包括带有非结构化字符串的列。我需要开发一种方法来创建包含澳大利亚所有郊区名称的列表(我可以很容易地获得此列表)。然后,我需要一个程序来解析字符串,并且在序列与列表中的条目匹配的情况下,它将子字符串保存到新列中。该数据集是从多个来源追加的,因此字符串没有一致的结构。

作为示例,这些行如下所示:

GIBSON AVE PADSTOW NSW 2211
SYDNEY ROAD COBURG VIC 3058
DUNLOP ST, ROSELANDS
FOREST RD HURSTVILLE NSW 2220
UNKNOWN   
JOSEPHINE CRES CHERRYBROOK NSW 2126

如果任何人都可以与我分享任何示例代码,或者您可以为我指出最适合使用的工具/方法的正确方向,我将不胜感激。

在此示例中,预期输出将如下所示:

“ Padstow”

“科堡”

“罗斯兰”

“赫斯特维尔”

''

'Cherrybrook'


编辑:

此代码行得通吗?

import pandas as pd
import numpy as np
suburb_list = np.genfromtxt('filepath/nsw.csv', 
                          delimiter=',', dtype=str)
top_row = suburb_list[:].tolist()

dataset = pd.read_csv(‘filepath/dataset.csv')

def get_suburb(dataset.address):
    for s in suburb_list:
        if s in address.lower()
            return s

1 个答案:

答案 0 :(得分:0)

因此,采用一种非常简单的方法,您可以使用一个大列表,将所有郊区名称都用小写字母表示,然后执行以下操作:

suburbs = [ 'padstow', 'cowburg', .... many more]

def get_suburb(unstructured_string):
    for s in suburbs:
        if s in unstructured_string.lower()
            return s

这将给您第一场比赛。如果您想花哨的地方,并可能在遇到拼写错误等情况时尝试正确处理,则可以尝试使用Levenshtein distance之类的“模糊”字符串比较方法(为此,您必须将字符串分成单个字首)。