[fix] disambiguating languages using one of the default street names in intersections data
This commit is contained in:
@@ -1068,6 +1068,10 @@ class OSMAddressFormatter(object):
|
|||||||
except Exception:
|
except Exception:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
country, candidate_languages, language_props = self.language_rtree.country_and_languages(latitude, longitude)
|
||||||
|
if not (country and candidate_languages):
|
||||||
|
continue
|
||||||
|
|
||||||
base_name_tag = None
|
base_name_tag = None
|
||||||
for t in all_base_name_tags:
|
for t in all_base_name_tags:
|
||||||
if any((t in way for way in ways)):
|
if any((t in way for way in ways)):
|
||||||
@@ -1076,6 +1080,7 @@ class OSMAddressFormatter(object):
|
|||||||
|
|
||||||
way_names = []
|
way_names = []
|
||||||
languages = set([None])
|
languages = set([None])
|
||||||
|
default_language = None
|
||||||
|
|
||||||
for way in ways:
|
for way in ways:
|
||||||
names = defaultdict(list)
|
names = defaultdict(list)
|
||||||
@@ -1086,6 +1091,12 @@ class OSMAddressFormatter(object):
|
|||||||
lang = tag.rsplit(':')[-1] if ':' in tag else None
|
lang = tag.rsplit(':')[-1] if ':' in tag else None
|
||||||
languages.add(lang)
|
languages.add(lang)
|
||||||
|
|
||||||
|
name = way[tag]
|
||||||
|
if default_language is None and tag == 'name':
|
||||||
|
address_language = self.components.address_language({AddressFormatter.ROAD: name}, candidate_languages)
|
||||||
|
if address_language and address_language not in (UNKNOWN_LANGUAGE, AMBIGUOUS_LANGUAGE):
|
||||||
|
default_language = address_language
|
||||||
|
|
||||||
names[lang].append(way[tag])
|
names[lang].append(way[tag])
|
||||||
|
|
||||||
if base_name_tag in way:
|
if base_name_tag in way:
|
||||||
@@ -1101,25 +1112,20 @@ class OSMAddressFormatter(object):
|
|||||||
|
|
||||||
language_components = {}
|
language_components = {}
|
||||||
|
|
||||||
country = None
|
|
||||||
|
|
||||||
for namespaced_language in languages:
|
for namespaced_language in languages:
|
||||||
address_components, country, language = self.components.expanded({}, latitude, longitude, language=namespaced_language)
|
address_components, _, _ = self.components.expanded({}, latitude, longitude, language=namespaced_language or default_language)
|
||||||
language_components[namespaced_language] = address_components
|
language_components[namespaced_language] = address_components
|
||||||
|
|
||||||
if country is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
for way1, way2 in itertools.combinations(way_names, 2):
|
for way1, way2 in itertools.combinations(way_names, 2):
|
||||||
formatted_intersections = []
|
formatted_intersections = []
|
||||||
for language in set(way1.keys()) & set(way2.keys()):
|
for language in set(way1.keys()) & set(way2.keys()):
|
||||||
for w1, w2 in itertools.product(way1[language], way2[language]):
|
for w1, w2 in itertools.product(way1[language], way2[language]):
|
||||||
|
address_components = language_components[language]
|
||||||
|
|
||||||
intersection_phrase = Intersection.phrase(language, country=country)
|
intersection_phrase = Intersection.phrase(language, country=country)
|
||||||
if not intersection_phrase:
|
if not intersection_phrase:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
address_components = language_components[language]
|
|
||||||
|
|
||||||
w1 = self.components.cleaned_name(w1)
|
w1 = self.components.cleaned_name(w1)
|
||||||
w2 = self.components.cleaned_name(w2)
|
w2 = self.components.cleaned_name(w2)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user