]> git.openstreetmap.org Git - nominatim.git/blob - nominatim/tokenizer/sanitizers/split_name_list.py
Merge pull request #2458 from lonvia/add-tokenizer-preprocessing
[nominatim.git] / nominatim / tokenizer / sanitizers / split_name_list.py
1 """
2 Name processor that splits name values with multiple values into their components.
3 """
4 import re
5
6 from nominatim.errors import UsageError
7
8 def create(func):
9     """ Create a name processing function that splits name values with
10         multiple values into their components. The optional parameter
11         'delimiters' can be used to define the characters that should be used
12         for splitting. The default is ',;'.
13     """
14     delimiter_set = set(func.get('delimiters', ',;'))
15     if not delimiter_set:
16         raise UsageError("Set of delimiters in split-name-list sanitizer is empty.")
17
18     regexp = re.compile('\\s*[{}]\\s*'.format(''.join('\\' + d for d in delimiter_set)))
19
20     def _process(obj):
21         if not obj.names:
22             return
23
24         new_names = []
25         for name in obj.names:
26             split_names = regexp.split(name.name)
27             print(split_names)
28             if len(split_names) == 1:
29                 new_names.append(name)
30             else:
31                 new_names.extend(name.clone(name=n) for n in split_names if n)
32
33         obj.names = new_names
34
35     return _process