correctly match abbreviated addr:street

This only works when addr:street is abbreviated and the street
name isn't. It does not work the other way around.
This commit is contained in:
Sarah Hoffmann
2021-12-08 21:58:43 +01:00
parent 5e792078b3
commit f9b56a8581
2 changed files with 29 additions and 14 deletions

View File

@@ -416,9 +416,7 @@ class LegacyICUNameAnalyzer(AbstractAnalyzer):
elif item.kind in ('housenumber', 'streetnumber', 'conscriptionnumber'): elif item.kind in ('housenumber', 'streetnumber', 'conscriptionnumber'):
hnrs.append(item.name) hnrs.append(item.name)
elif item.kind == 'street': elif item.kind == 'street':
token = self._retrieve_full_token(item.name) streets.extend(self._retrieve_full_tokens(item.name))
if token:
streets.append(token)
elif item.kind == 'place': elif item.kind == 'place':
if not item.suffix: if not item.suffix:
token_info.add_place(self._compute_partial_tokens(item.name)) token_info.add_place(self._compute_partial_tokens(item.name))
@@ -465,25 +463,20 @@ class LegacyICUNameAnalyzer(AbstractAnalyzer):
return tokens return tokens
def _retrieve_full_token(self, name): def _retrieve_full_tokens(self, name):
""" Get the full name token for the given name, if it exists. """ Get the full name token for the given name, if it exists.
The name is only retrived for the standard analyser. The name is only retrived for the standard analyser.
""" """
norm_name = self._normalized(name) norm_name = self._search_normalized(name)
# return cached if possible # return cached if possible
if norm_name in self._cache.fulls: if norm_name in self._cache.fulls:
return self._cache.fulls[norm_name] return self._cache.fulls[norm_name]
# otherwise compute with self.conn.cursor() as cur:
full, _ = self._cache.names.get(norm_name, (None, None)) cur.execute("SELECT word_id FROM word WHERE word_token = %s and type = 'W'",
(norm_name, ))
if full is None: full = [row[0] for row in cur]
with self.conn.cursor() as cur:
cur.execute("SELECT word_id FROM word WHERE word = %s and type = 'W' LIMIT 1",
(norm_name, ))
if cur.rowcount > 0:
full = cur.fetchone()[0]
self._cache.fulls[norm_name] = full self._cache.fulls[norm_name] = full

View File

@@ -111,6 +111,28 @@ Feature: Parenting of objects
| N3 | W2 | | N3 | W2 |
| N4 | W1 | | N4 | W1 |
Scenario: addr:street tag parents to appropriately named street with abbreviation
Given the scene roads-with-pois
And the places
| osm | class | type | street| geometry |
| N1 | place | house | south st | :p-N1 |
| N2 | place | house | north st | :p-N2 |
| N3 | place | house | south st | :p-S1 |
| N4 | place | house | north st | :p-S2 |
And the places
| osm | class | type | name+name:en | geometry |
| W1 | highway | residential | north street | :w-north |
| W2 | highway | residential | south street | :w-south |
When importing
Then placex contains
| object | parent_place_id |
| N1 | W2 |
| N2 | W1 |
| N3 | W2 |
| N4 | W1 |
Scenario: addr:street tag parents to next named street Scenario: addr:street tag parents to next named street
Given the scene roads-with-pois Given the scene roads-with-pois
And the places And the places