Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Copyrighted by https://osm.org/user/kubahahaha
- # Following code is published under WTFPL public licence.
- import argparse
- from collections import Counter, defaultdict
- import requests
- from tabulate import tabulate
- def download(city):
- query = f"""
- [out:json][timeout:600];
- area["name"="{city}"]->.search;
- (
- way[highway][name](area.search);
- );
- out tags;
- """
- print(query)
- payload = {"data": query}
- url = "https://overpass.openstreetmap.ru/cgi/interpreter"
- r = requests.post(url, data=payload)
- tagged = r.json()
- print(f"Downloaded {len(tagged['elements'])} streets.")
- return tagged['elements']
- def count_streets(tags):
- named = list(filter(lambda el: (el['tags'].get('highway') and el['tags'].get('name') and ' ' in el['tags'].get('name')), tagged))
- print(f"Using {len(named)} named streets with at least 2 words.")
- counter = defaultdict(Counter)
- used_names = []
- for street in named:
- name = street['tags']['name']
- if name in used_names:
- continue
- used_names.append(name)
- label = name.split(' ')[0]
- if label.islower():
- counter[label.lower()]['l'] += 1
- else:
- counter[label.lower()]['u'] += 1
- print(f"Got {len(counter)} at least 2-word values in {len(used_names)} distinct streetnames")
- return counter
- def print_results(counter):
- counter_sorted = sorted(counter.items(), key=lambda row: sum(row[1].values()), reverse=True)
- counter_table = []
- lower, upper = 0, 0
- for row in counter_sorted:
- counter_table.append([row[0], row[1]['l'], row[1]['u']])
- lower += row[1]['l']
- upper += row[1]['u']
- counter_table.append(['SUMA', lower, upper])
- print(tabulate(counter_table, headers=["Pierwsze słowo nazwy", "małą literą", "dużą literą"], tablefmt="psql"))
- def text(string):
- return string
- parser = argparse.ArgumentParser(description='Download street names and check if first letter is (lower|upper)case.')
- parser.add_argument('cityname', type=text, nargs='+',
- help='Name of area to search in.')
- args = parser.parse_args()
- city = ' '.join(args.cityname)
- tagged = download(city)
- counter = count_streets(tagged)
- print_results(counter)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement