]> git.openstreetmap.org Git - nominatim.git/commitdiff
correctly match abbreviated addr:street
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 8 Dec 2021 20:58:43 +0000 (21:58 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 8 Dec 2021 20:58:43 +0000 (21:58 +0100)
This only works when addr:street is abbreviated and the street
name isn't. It does not work the other way around.

nominatim/tokenizer/icu_tokenizer.py
test/bdd/db/import/parenting.feature

index 33f05cc4b21d463d22dfc675bab665c804fbc276..90caec1c9041697f02fec06c62960d08eaf01dcb 100644 (file)
@@ -416,9 +416,7 @@ class LegacyICUNameAnalyzer(AbstractAnalyzer):
             elif item.kind in ('housenumber', 'streetnumber', 'conscriptionnumber'):
                 hnrs.append(item.name)
             elif item.kind == 'street':
             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))
             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
 
 
         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.
         """
         """ 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]
 
 
         # 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
 
 
         self._cache.fulls[norm_name] = full
 
index f6d88ca8e11f2c55bfa4a310e5fb067e1bc148db..ef25b6cc0acd6b9c4c9501109e697f1fcf158d20 100644 (file)
@@ -111,6 +111,28 @@ Feature: Parenting of objects
          | N3     | W2 |
          | N4     | W1 |
 
          | 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
     Scenario: addr:street tag parents to next named street
         Given the scene roads-with-pois
         And the places