]> git.openstreetmap.org Git - nominatim.git/blob - nominatim/tokenizer/sanitizers/tag_japanese.py
dffd95595d3f7e532e2c402428c39ed7229c58d4
[nominatim.git] / nominatim / tokenizer / sanitizers / tag_japanese.py
1 # SPDX-License-Identifier: GPL-3.0-or-later
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2022 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 """
8 This sanitizer maps OSM data to Japanese block addresses.
9 It replaces blocknumber and housenumber with housenumber,
10 and quarter and neighbourhood with place.
11 """
12
13
14 from typing import Callable
15 from typing import List, Optional
16
17 from nominatim.tokenizer.sanitizers.base import ProcessInfo
18 from nominatim.tokenizer.sanitizers.config import SanitizerConfig
19 from nominatim.data.place_name import PlaceName
20 from nominatim.tokenizer.sanitizers.kanji_utils import convert_kanji_sequence_to_number
21
22 def create(_: SanitizerConfig) -> Callable[[ProcessInfo], None]:
23 #def create(config: SanitizerConfig) -> Callable[[ProcessInfo],None]:
24     """Set up the sanitizer
25     """
26     return tag_japanese
27     #return tag_japanese(config)
28
29 def reconbine_housenumber(
30     new_address: List[PlaceName],
31     tmp_housenumber: Optional[str],
32     tmp_blocknumber: Optional[str]
33 ) -> List[PlaceName]:
34     """ Recombine the tag of housenumber by using housenumber and blocknumber
35     """
36     if tmp_blocknumber and tmp_housenumber:
37         new_address.append(
38             PlaceName(
39                 kind='housenumber',
40                 name=f'{tmp_blocknumber}-{tmp_housenumber}',
41                 suffix=''
42             )
43         )
44     elif tmp_blocknumber:
45         new_address.append(
46             PlaceName(
47                 kind='housenumber',
48                 name=f'{tmp_blocknumber}',
49                 suffix=''
50             )
51         )
52     elif tmp_housenumber:
53         new_address.append(
54             PlaceName(
55                 kind='housenumber',
56                 name=f'{tmp_housenumber}',
57                 suffix=''
58             )
59         )
60     return new_address
61
62 def reconbine_place(
63     new_address: List[PlaceName],
64     tmp_neighbourhood: Optional[str],
65     tmp_quarter: Optional[str]
66 ) -> List[PlaceName]:
67     """ Recombine the tag of place by using neighbourhood and quarter
68     """
69     if tmp_neighbourhood and tmp_quarter:
70         new_address.append(
71             PlaceName(
72                 kind='place',
73                 name=f'{tmp_quarter}{tmp_neighbourhood}',
74                 suffix=''
75             )
76         )
77     elif tmp_neighbourhood:
78         new_address.append(
79             PlaceName(
80                 kind='place',
81                 name=f'{tmp_neighbourhood}',
82                 suffix=''
83             )
84         )
85     elif tmp_quarter:
86         new_address.append(
87             PlaceName(
88                 kind='place',
89                 name=f'{tmp_quarter}',
90                 suffix=''
91             )
92         )
93     return new_address
94 def tag_japanese(obj: ProcessInfo) -> None:
95     """Recombine kind of address
96     """
97     if obj.place.country_code != 'jp':
98         return
99     tmp_housenumber = None
100     tmp_blocknumber = None
101     tmp_neighbourhood = None
102     tmp_quarter = None
103
104     new_address = []
105     for item in obj.names:
106         item.name = convert_kanji_sequence_to_number(item.name)
107
108     for item in obj.address:
109         item.name = convert_kanji_sequence_to_number(item.name)
110         if item.kind == 'housenumber':
111             tmp_housenumber = item.name
112         elif item.kind == 'block_number':
113             tmp_blocknumber = item.name
114         elif item.kind == 'neighbourhood':
115             tmp_neighbourhood = item.name
116         elif item.kind == 'quarter':
117             tmp_quarter = item.name
118         else:
119             new_address.append(item)
120
121     new_address = reconbine_housenumber(new_address,tmp_housenumber,tmp_blocknumber)
122     new_address = reconbine_place(new_address,tmp_neighbourhood,tmp_quarter)
123
124     obj.address = [item for item in new_address if item.name is not None]