@whiteslove/parsing-lexicon 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whiteslove/parsing-lexicon",
3
- "version": "0.3.5",
3
+ "version": "0.3.7",
4
4
  "description": "Shared deterministic multilingual parsing lexicon for Whiteslove housing and hiring services",
5
5
  "repository": {
6
6
  "type": "git",
package/src/geo.js CHANGED
@@ -123,7 +123,7 @@ export const TASHKENT_AREAS = Object.freeze({
123
123
  area('Karakamysh-2/4', ['каракамыш 2 4', 'қорақамиш 2 4', 'qoraqamish 2 4', 'karakamish 2 4']),
124
124
  area('Karakamysh-2/5', ['каракамыш 2 5', 'қорақамиш 2 5', 'qoraqamish 2 5', 'karakamish 2 5']),
125
125
  area('Olympia', ['олимпия', 'olimpiya', 'olympia'], 'microdistrict'), area('Vuzgorodok', ['вузгородок', 'вуз городок', 'vuzgorodok']),
126
- area('Medgorodok', ['медгородок', 'мед городок', 'medgorodok']), area('Takhtapul', ['тахтапуль', 'тахтапул', 'taxtapul', 'takhtapul']),
126
+ area('Medgorodok', ['медгородок', 'мед городок', 'medgorodok']),
127
127
  area('Chimbay', ['чимбай', 'chimboy', 'chimbay']),
128
128
  ]),
129
129
  Mirobod: Object.freeze([
@@ -140,14 +140,17 @@ export const TASHKENT_AREAS = Object.freeze({
140
140
  ]),
141
141
  Sergeli: Object.freeze([
142
142
  area('Yangi Sergeli', ['янги сергели', 'yangi sergeli']), area('Stroygorod', ['стройгород', 'stroygorod']),
143
+ area('Uzgarish', ['узгарыш', 'ўзгариш', "o'zgarish", 'uzgarish']),
143
144
  ]),
144
145
  Chilanzar: Object.freeze([
145
146
  area('Nakkoshlik', ['наккошлык', 'наққошлик', 'naqqoshlik']), area('Al-Khorezmi-1', ['аль хорезми 1', 'ал хорезми 1', 'al xorazmiy 1', 'al khorezmi 1']),
147
+ area('Beshagach', ['бешагач', "beshyog'och", 'beshagach']),
146
148
  ]),
147
149
  Shaykhantahur: Object.freeze([
148
150
  area('Labzak', ['лабзак', 'labzak', 'ц 13', 'c 13']), area('Khadra', ['хадра', 'xadra', 'khadra', 'ц 14', 'c 14']),
149
151
  area('Jangoh', ['джангох', 'жангох', 'jangoh', 'ц 15', 'c 15']), area('Karatash', ['караташ', 'қоратош', 'qoratosh', 'karatash']),
150
- area('Chorsu', ['чорсу', 'chorsu']), area('Beshagach', ['бешагач', "beshyog'och", 'beshagach']), area('Beltepa', ['белтепа', 'beltepa']),
152
+ area('Chorsu', ['чорсу', 'chorsu']), area('Beltepa', ['белтепа', 'beltepa']),
153
+ area('Takhtapul', ['тахтапуль', 'тахтапул', 'taxtapul', 'takhtapul']),
151
154
  ]),
152
155
  Yunusabad: Object.freeze([
153
156
  area('Kashgar', ['кашгар', 'қашқар', 'qashqar', 'kashgar', 'ц 4', 'c 4']), area('Kiyot', ['киёт', 'қиёт', 'qiyot', 'kiyot', 'ц 5', 'c 5']),
@@ -158,7 +161,7 @@ export const TASHKENT_AREAS = Object.freeze({
158
161
  area('Rakat', ['ракат', 'rakat']), area('Rakatboshi', ['ракатбоши', 'rakatboshi']),
159
162
  ]),
160
163
  Yangihayot: Object.freeze([
161
- area('Uzgarish', ['узгарыш', 'ўзгариш', "o'zgarish", 'uzgarish']), area('Dustlik-1', ['дустлик 1', 'дўстлик 1', "do'stlik 1", 'dustlik 1'], 'microdistrict'),
164
+ area('Dustlik-1', ['дустлик 1', 'дўстлик 1', "do'stlik 1", 'dustlik 1'], 'microdistrict'),
162
165
  area('Dustlik-2', ['дустлик 2', 'дўстлик 2', "do'stlik 2", 'dustlik 2'], 'microdistrict'), area('Yangi Choshtepa', ['янги чоштепа', 'yangi choshtepa'], 'microdistrict'), area('Sputnik', ['спутник', 'йўлдош', "yo'ldosh", 'yoldosh'], 'microdistrict'),
163
166
  ]),
164
167
  Yashnobod: Object.freeze([
package/src/locations.js CHANGED
@@ -88,11 +88,47 @@ function normalizeUzSemanticLocations(country) {
88
88
  });
89
89
  }
90
90
 
91
+ const ODESA_FONTAN_STATION_RE = /^(?:[5-9]|1[0-6]) Fontan Station$/u;
92
+
93
+ function normalizeUaSemanticLocations(country) {
94
+ const odesa = country?.Odesa;
95
+ if (!odesa) return country;
96
+
97
+ // “5–16 station of Velykyi Fontan” are traditional listing/locality zones
98
+ // anchored to the Fontanska Road transit stops, not twelve standalone city
99
+ // microdistricts. Keep their parsing value but expose them as local areas.
100
+ const fontanStationAreas = Object.freeze(
101
+ (odesa.microdistricts || [])
102
+ .filter(({ name }) => ODESA_FONTAN_STATION_RE.test(name))
103
+ .map((entry) => Object.freeze({
104
+ ...entry,
105
+ type: 'local_area',
106
+ entityType: 'local_area',
107
+ })),
108
+ );
109
+
110
+ return Object.freeze({
111
+ ...country,
112
+ Odesa: Object.freeze({
113
+ ...odesa,
114
+ microdistricts: Object.freeze(
115
+ (odesa.microdistricts || []).filter(({ name }) => !ODESA_FONTAN_STATION_RE.test(name)),
116
+ ),
117
+ localAreas: Object.freeze([
118
+ ...(odesa.localAreas || []),
119
+ ...fontanStationAreas,
120
+ ]),
121
+ }),
122
+ });
123
+ }
124
+
91
125
  const UZ_LOCATION_DICTIONARIES = normalizeUzSemanticLocations(mergeLocationCountries(
92
126
  UZ_BASE_LOCATION_DICTIONARIES,
93
127
  UZ_LOCATION_EXTENSIONS,
94
128
  ));
95
129
 
130
+ const UA_SEMANTIC_LOCATION_EXTENSIONS = normalizeUaSemanticLocations(UA_MAJOR_LOCATION_EXTENSIONS);
131
+
96
132
  const COUNTRY_LOCATION_DICTIONARIES = Object.freeze({
97
133
  ...BASE_LOCATION_DICTIONARIES,
98
134
  KZ: mergeLocationCountries(
@@ -102,7 +138,7 @@ const COUNTRY_LOCATION_DICTIONARIES = Object.freeze({
102
138
  UZ: UZ_LOCATION_DICTIONARIES,
103
139
  UA: mergeLocationCountries(
104
140
  UA_EXTRA_LOCATION_DICTIONARIES,
105
- UA_MAJOR_LOCATION_EXTENSIONS,
141
+ UA_SEMANTIC_LOCATION_EXTENSIONS,
106
142
  UA_REGIONAL_LOCATION_EXTENSIONS,
107
143
  UA_SECONDARY_LOCATION_EXTENSIONS,
108
144
  UA_METRO_LOCATION_EXTENSIONS,
@@ -52,6 +52,7 @@ export const TASHKENT_MARKETS = Object.freeze([
52
52
  poi('Eski Juva Bazaar', 'market', ['Эски Жува', 'Eski Juva']),
53
53
  poi('Alay Bazaar', 'market', ['Алайский рынок', 'Алайский базар', 'Oloy bozori', 'Олой бозори']),
54
54
  poi('Qoyliq Bazaar', 'market', ['Куйлюк базар', 'Куйлик базар', "Qo'yliq bozori", 'Qo‘yliq bozori', 'Qoʻyliq bozori']),
55
+ poi('Kuyluk Bazaar', 'market', ['Куйлюкский рынок', 'Куйлыкский базар', 'Kuyluk bazar']),
55
56
  poi('Yunusobod Bazaar', 'market', ['Юнусабадский рынок', 'Yunusobod bozori']),
56
57
  poi('Farhod Bazaar', 'market', ['Фархадский рынок', 'Фархадский базар', 'Farhod bozori']),
57
58
  poi('Uch Qahramon Bazaar', 'market', ['Уч Кахрамон', 'Уч Кахрамон базар']),
@@ -85,6 +86,8 @@ export const TASHKENT_MALLS = Object.freeze([
85
86
  poi('HT Mall', 'mall', ['HT Молл', 'HT savdo markazi']),
86
87
  poi('Seoul Mun Mall', 'mall', ['Seoul Mun', 'Сеул Мун Молл', 'Seoul Mun savdo markazi'], { contextRequired: true, context: MALL_CONTEXT }),
87
88
  poi('Ecobozor', 'mall', ['Eco Bozor', 'Ekobozor', 'Эко Бозор', 'Экобозор']),
89
+ poi('Magnum Samarkand Darvoza', 'mall', ['Magnum super', 'Magnum Supermarket', 'Магнум Самарканд Дарвоза']),
90
+ poi('Baraka Market', 'mall', ['Baraka market', 'Baraka Supermarket', 'Baraka Savdo', 'Барака маркет', 'Барака Савдо']),
88
91
  ]);
89
92
 
90
93
  export const TASHKENT_ATTRACTIONS = Object.freeze([
@@ -150,6 +153,14 @@ export const TASHKENT_UNIVERSITIES = Object.freeze([
150
153
  poi('New Uzbekistan University', 'university', ['Новый университет Узбекистана']),
151
154
  ]);
152
155
 
156
+ export const TASHKENT_SCHOOLS = Object.freeze([
157
+ poi('Tashkent International School', 'school', ['TIS', 'American School Tashkent', 'Международная школа Ташкента', 'Ташкентская международная школа']),
158
+ poi('Academic Lyceum under WIUT', 'school', ['ALWIUT', 'Westminster Academic Lyceum', 'Академический лицей при Вестминстерском университете', 'Лицей Вестминстер']),
159
+ poi('Academic Lyceum under TMA', 'school', ['TMA Academic Lyceum', 'Академический лицей при ТМА', 'Лицей Ташкентской медицинской академии']),
160
+ poi('Tashkent Ulugbek International School', 'school', ['Ulugbek International School', 'Улугбекская международная школа', 'Международная школа Улугбека']),
161
+ poi('Uzbek International School Invento', 'school', ['Invento International School', 'Invento School', 'Международная школа Invento', 'Школа Invento']),
162
+ ]);
163
+
153
164
  export const TASHKENT_MEDICAL_POIS = Object.freeze([
154
165
  TASHKENT_MEDICAL_ACADEMY,
155
166
  poi('Tashkent City Hospital No. 1', 'medical', ['1-я городская больница']),
@@ -160,6 +171,13 @@ export const TASHKENT_MEDICAL_POIS = Object.freeze([
160
171
  poi('Republican Oncology Center', 'medical', ['Республиканский онкоцентр', 'Онкология']),
161
172
  poi('Republican Cardiology Center', 'medical', ['Республиканский кардиоцентр', 'Кардиоцентр']),
162
173
  poi('Republican Emergency Medical Center', 'medical', ['Республиканский центр экстренной медицинской помощи']),
174
+ poi('Republican Research Centre of Emergency Medicine', 'medical', ['Tashkent Emergency Medicine Center', 'Республиканский научный центр экстренной медицинской помощи', 'Республиканский центр экстренной медицины', '16-я городская больница']),
175
+ poi('Republican Ophthalmology Hospital', 'medical', ['Republican Eye Hospital', 'Республиканская офтальмологическая больница', 'Республиканская глазная больница']),
176
+ poi('Republican Hematology Center', 'medical', ['Tashkent Hematology Center', 'Республиканский гематологический центр', 'Центр гематологии']),
177
+ poi('Republican Thoracic Surgery Center Vakhidov', 'medical', ['Vakhidov Thoracic Surgery Center', 'Республиканский центр грудной хирургии им. Вахидова', 'Центр грудной хирургии Вахидова']),
178
+ poi('Tashkent International Clinic', 'medical', ['TIMC', 'Tashkent International Medical Clinic', 'Ташкентская международная клиника']),
179
+ poi('Republican Pathological Anatomy Center', 'medical', ['Republican Pathology Center', 'Республиканский патологоанатомический центр', 'Центр патологической анатомии']),
180
+ poi('Republic Specialized Nephrology and Transplantation Centre', 'medical', ['Republican Nephrology Center', 'Республиканский нефрологический центр', 'Центр нефрологии и трансплантации']),
163
181
  poi('Republican Perinatal Center', 'medical', ['Республиканский перинатальный центр', 'Перинатальный центр']),
164
182
  poi('Institute of Obstetrics and Gynecology', 'medical', ['Институт акушерства и гинекологии']),
165
183
  ]);
@@ -177,6 +195,7 @@ export const TASHKENT_POI_GROUPS = Object.freeze({
177
195
  malls: TASHKENT_MALLS,
178
196
  attractions: TASHKENT_ATTRACTIONS,
179
197
  culture: TASHKENT_CULTURAL_POIS,
198
+ schools: TASHKENT_SCHOOLS,
180
199
  transport: TASHKENT_TRANSPORT_POIS,
181
200
  universities: TASHKENT_UNIVERSITIES,
182
201
  medical: TASHKENT_MEDICAL_POIS,