mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-11 13:24:07 +00:00
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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user