From: Sarah Hoffmann Date: Wed, 8 Dec 2021 20:58:43 +0000 (+0100) Subject: correctly match abbreviated addr:street X-Git-Tag: v4.1.0~104^2 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/f9b56a8581be3663239d23ee1194891dde9a3857 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. --- diff --git a/nominatim/tokenizer/icu_tokenizer.py b/nominatim/tokenizer/icu_tokenizer.py index 33f05cc4..90caec1c 100644 --- a/nominatim/tokenizer/icu_tokenizer.py +++ b/nominatim/tokenizer/icu_tokenizer.py @@ -416,9 +416,7 @@ class LegacyICUNameAnalyzer(AbstractAnalyzer): elif item.kind in ('housenumber', 'streetnumber', 'conscriptionnumber'): hnrs.append(item.name) elif item.kind == 'street': - token = self._retrieve_full_token(item.name) - if token: - streets.append(token) + streets.extend(self._retrieve_full_tokens(item.name)) elif item.kind == 'place': if not item.suffix: token_info.add_place(self._compute_partial_tokens(item.name)) @@ -465,25 +463,20 @@ class LegacyICUNameAnalyzer(AbstractAnalyzer): 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. The name is only retrived for the standard analyser. """ - norm_name = self._normalized(name) + norm_name = self._search_normalized(name) # return cached if possible if norm_name in self._cache.fulls: return self._cache.fulls[norm_name] - # otherwise compute - full, _ = self._cache.names.get(norm_name, (None, None)) - - if full is None: - 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] + with self.conn.cursor() as cur: + cur.execute("SELECT word_id FROM word WHERE word_token = %s and type = 'W'", + (norm_name, )) + full = [row[0] for row in cur] self._cache.fulls[norm_name] = full diff --git a/test/bdd/db/import/parenting.feature b/test/bdd/db/import/parenting.feature index f6d88ca8..ef25b6cc 100644 --- a/test/bdd/db/import/parenting.feature +++ b/test/bdd/db/import/parenting.feature @@ -111,6 +111,28 @@ Feature: Parenting of objects | N3 | W2 | | 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 Given the scene roads-with-pois And the places