]> git.openstreetmap.org Git - nominatim.git/blobdiff - nominatim/tokenizer/token_analysis/generic.py
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / nominatim / tokenizer / token_analysis / generic.py
index 1e7b75a1218ba8330a99d17d6681fa3c8c641b82..d4eae312d9dfc4f3407cb915988a41256614565b 100644 (file)
@@ -25,7 +25,22 @@ def configure(rules, normalization_rules):
     config['replacements'], config['chars'] = get_variant_config(rules.get('variants'),
                                                                  normalization_rules)
     config['variant_only'] = rules.get('mode', '') == 'variant-only'
-    config['mutations'] = rules.get('mutations', [])
+
+    # parse mutation rules
+    config['mutations'] = []
+    for rule in rules.get('mutations', []):
+        if 'pattern' not in rule:
+            raise UsageError("Missing field 'pattern' in mutation configuration.")
+        if not isinstance(rule['pattern'], str):
+            raise UsageError("Field 'pattern' in mutation configuration "
+                             "must be a simple text field.")
+        if 'replacements' not in rule:
+            raise UsageError("Missing field 'replacements' in mutation configuration.")
+        if not isinstance(rule['replacements'], list):
+            raise UsageError("Field 'replacements' in mutation configuration "
+                             "must be a list of texts.")
+
+        config['mutations'].append((rule['pattern'], rule['replacements']))
 
     return config
 
@@ -56,21 +71,7 @@ class GenericTokenAnalysis:
             self.replacements = None
 
         # set up mutation rules
-        self.mutations = []
-        for cfg in config['mutations']:
-            if 'pattern' not in cfg:
-                raise UsageError("Missing field 'pattern' in mutation configuration.")
-            if not isinstance(cfg['pattern'], str):
-                raise UsageError("Field 'pattern' in mutation configuration "
-                                 "must be a simple text field.")
-            if 'replacements' not in cfg:
-                raise UsageError("Missing field 'replacements' in mutation configuration.")
-            if not isinstance(cfg['replacements'], list):
-                raise UsageError("Field 'replacements' in mutation configuration "
-                                 "must be a list of texts.")
-
-            self.mutations.append(MutationVariantGenerator(cfg['pattern'],
-                                                           cfg['replacements']))
+        self.mutations = [MutationVariantGenerator(*cfg) for cfg in config['mutations']]
 
 
     def get_variants_ascii(self, norm_name):