]> git.openstreetmap.org Git - nominatim.git/commitdiff
ICU: use normalization from config in PHP
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 27 Oct 2021 08:07:19 +0000 (10:07 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 27 Oct 2021 09:32:44 +0000 (11:32 +0200)
The TERM_NORMALIZATION config option is no longer applicable.
That was already documented but not yet implemented.

nominatim/tokenizer/icu_tokenizer.py
test/python/test_tokenizer_icu.py

index 3331a3210aaba70d49b602299c2ce9e88238a3a0..ea6e5d3cca5a9d063cd69b89c214f1d5e9699526 100644 (file)
@@ -9,7 +9,6 @@ import re
 from textwrap import dedent
 
 from nominatim.db.connection import connect
-from nominatim.db.properties import set_property, get_property
 from nominatim.db.utils import CopyBuffer
 from nominatim.db.sql_preprocessor import SQLPreprocessor
 from nominatim.indexer.place_info import PlaceInfo
@@ -36,7 +35,6 @@ class LegacyICUTokenizer(AbstractTokenizer):
         self.dsn = dsn
         self.data_dir = data_dir
         self.loader = None
-        self.term_normalization = None
 
 
     def init_new_db(self, config, init_db=True):
@@ -47,8 +45,6 @@ class LegacyICUTokenizer(AbstractTokenizer):
         """
         self.loader = ICURuleLoader(config)
 
-        self.term_normalization = config.TERM_NORMALIZATION
-
         self._install_php(config.lib_dir.php)
         self._save_config()
 
@@ -64,7 +60,6 @@ class LegacyICUTokenizer(AbstractTokenizer):
 
         with connect(self.dsn) as conn:
             self.loader.load_config_from_db(conn)
-            self.term_normalization = get_property(conn, DBCFG_TERM_NORMALIZATION)
 
 
     def finalize_import(self, config):
@@ -87,13 +82,9 @@ class LegacyICUTokenizer(AbstractTokenizer):
     def check_database(self, config):
         """ Check that the tokenizer is set up correctly.
         """
+        # Will throw an error if there is an issue.
         self.init_from_project(config)
 
-        if self.term_normalization is None:
-            return "Configuration for tokenizer 'icu' are missing."
-
-        return None
-
 
     def update_statistics(self):
         """ Recompute frequencies for all name words.
@@ -141,7 +132,7 @@ class LegacyICUTokenizer(AbstractTokenizer):
         php_file.write_text(dedent(f"""\
             <?php
             @define('CONST_Max_Word_Frequency', 10000000);
-            @define('CONST_Term_Normalization_Rules', "{self.term_normalization}");
+            @define('CONST_Term_Normalization_Rules', "{self.loader.normalization_rules}");
             @define('CONST_Transliteration', "{self.loader.get_search_rules()}");
             require_once('{phpdir}/tokenizer/icu_tokenizer.php');"""))
 
@@ -152,7 +143,6 @@ class LegacyICUTokenizer(AbstractTokenizer):
         """
         with connect(self.dsn) as conn:
             self.loader.save_config_to_db(conn)
-            set_property(conn, DBCFG_TERM_NORMALIZATION, self.term_normalization)
 
 
     def _init_db_tables(self, config):
index 4d029dec6b1725553faf32d075a01f3f00010d85..5dbe292e38bcd73c869275ed225794adfaa2e76e 100644 (file)
@@ -7,7 +7,7 @@ import yaml
 import pytest
 
 from nominatim.tokenizer import icu_tokenizer
-from nominatim.tokenizer.icu_rule_loader import ICURuleLoader
+import nominatim.tokenizer.icu_rule_loader
 from nominatim.db import properties
 from nominatim.db.sql_preprocessor import SQLPreprocessor
 from nominatim.indexer.place_info import PlaceInfo
@@ -75,7 +75,7 @@ def analyzer(tokenizer_factory, test_config, monkeypatch,
                   'token-analysis': [{'analyzer': 'generic',
                                       'variants': [{'words': list(variants)}]}]}
         (test_config.project_dir / 'icu_tokenizer.yaml').write_text(yaml.dump(cfgstr))
-        tok.loader = ICURuleLoader(test_config)
+        tok.loader = nominatim.tokenizer.icu_rule_loader.ICURuleLoader(test_config)
 
         return tok.name_analyzer()
 
@@ -151,13 +151,12 @@ def getorcreate_hnr_id(temp_db_cursor):
                                 SELECT -nextval('seq_word')::INTEGER; $$ LANGUAGE SQL""")
 
 
-def test_init_new(tokenizer_factory, test_config, monkeypatch, db_prop):
-    monkeypatch.setenv('NOMINATIM_TERM_NORMALIZATION', ':: lower();')
-
+def test_init_new(tokenizer_factory, test_config, db_prop):
     tok = tokenizer_factory()
     tok.init_new_db(test_config)
 
-    assert db_prop(icu_tokenizer.DBCFG_TERM_NORMALIZATION) == ':: lower();'
+    assert db_prop(nominatim.tokenizer.icu_rule_loader.DBCFG_IMPORT_NORM_RULES) \
+            .startswith(':: lower ();')
 
 
 def test_init_word_table(tokenizer_factory, test_config, place_row, temp_db_cursor):
@@ -171,17 +170,14 @@ def test_init_word_table(tokenizer_factory, test_config, place_row, temp_db_curs
     assert temp_db_cursor.table_exists('word')
 
 
-def test_init_from_project(monkeypatch, test_config, tokenizer_factory):
-    monkeypatch.setenv('NOMINATIM_TERM_NORMALIZATION', ':: lower();')
+def test_init_from_project(test_config, tokenizer_factory):
     tok = tokenizer_factory()
     tok.init_new_db(test_config)
-    monkeypatch.undo()
 
     tok = tokenizer_factory()
     tok.init_from_project(test_config)
 
     assert tok.loader is not None
-    assert tok.term_normalization == ':: lower();'
 
 
 def test_update_sql_functions(db_prop, temp_db_cursor,