-
Notifications
You must be signed in to change notification settings - Fork 1
/
audit_names.py
69 lines (50 loc) · 1.78 KB
/
audit_names.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
66
67
68
69
import xml.etree.cElementTree as ET
from collections import defaultdict
import re
import pprint
OSMFILE = "mumbai_india.osm"
street_type_re = re.compile(r'\b\S+\.?$', re.IGNORECASE)
#expected = ["Slums", "Avenue", "Boulevard", "Drive", "Court", "Place", "Square", "Lane", "Road",
# UPDATE THIS VARIABLE
mapping = { "Jhopadpatti": "Slums",
"Marg,": "Marg",
"Mumbai,":"Mumbai",
"ROad":"Road",
"Rd":"Road",
"Raod":"Road",
"Rd.":"Road",
"road":"Road"
}
# UPDATE THIS VARIABLE
def audit_street_type(street_types, street_name):
m = street_type_re.search(street_name)
if m:
street_type = m.group()
#if street_type not in expected:
street_types[street_type].add(street_name)
def is_street_name(elem):
return (elem.attrib['k'] == "addr:street")
def audit(osmfile):
osm_file = open(osmfile, "r")
street_types = defaultdict(set)
for event, elem in ET.iterparse(osm_file, events=("start",)):
if elem.tag == "node" or elem.tag == "way":
for tag in elem.iter("tag"):
if is_street_name(tag):
audit_street_type(street_types, tag.attrib['v'])
osm_file.close()
return street_types
def update_name(name, mapping):
#print '\nSTART'
#print name
m = street_type_re.search(name)
if m.group() in mapping.keys():
name=re.sub(street_type_re,mapping[m.group()],name)
# YOUR CODE HERE
return name
st_types = audit(OSMFILE)
#pprint.pprint(dict(st_types))
for st_type, ways in st_types.iteritems():
for name in ways:
better_name = update_name(name, mapping)
print name, "=>", better_name