-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaddressParser.py
65 lines (50 loc) · 2.04 KB
/
addressParser.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from postal.parser import parse_address
import json
import re
from collections import OrderedDict
def addressParser(inputAddress):
parsedAddress = parse_address(inputAddress)
print(parsedAddress)
try:
try:
# extract the first house_number value
parsedHouseNumber = [element for element in parsedAddress
if 'house_number' in element[1]][0][0]
except IndexError:
parsedHouseNumber = ''
houseNumber = re.search(
parsedHouseNumber, inputAddress, flags=re.IGNORECASE).group(0)
streetArray = [element for element in parsedAddress
if 'house_number' not in element[1]]
parsedStreet = ' '.join([str(x[0]) for x in streetArray])
# substitute houseNumber with empty in the input string,
# igore leading and trailing space and specific chracter
street = re.sub(
houseNumber, '',
inputAddress,
flags=re.IGNORECASE
).rstrip(
'}{[]()?@$%^*<>/\\\"\'~;:-_, '
).lstrip(
'}{[]()?@$%^*<>/\\\"\'~;:-_,. '
).replace(
' ', ' '
).replace(
' ,', ','
)
addressDict = OrderedDict([("street", street),
("housenumber", houseNumber)])
# retnrn json object with orderedDict
return json.dumps(addressDict, ensure_ascii=False)
except Exception as e:
print(e)
def main():
print("Enter \"exit()\" to exit the script.")
while(1):
inputAddress = input("\nEnter one-line address: \n")
if(inputAddress == "exit()"):
break
else:
print(addressParser(inputAddress))
if __name__ == "__main__":
main()