@whiteslove/parsing-lexicon 0.2.0 → 0.2.2
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/LICENSE +21 -21
- package/README.md +137 -137
- package/index.d.ts +374 -374
- package/package.json +77 -75
- package/src/central-asia-locations.js +211 -211
- package/src/central-asia.js +233 -233
- package/src/contact.d.ts +44 -44
- package/src/contact.js +159 -159
- package/src/countries.js +175 -175
- package/src/country-context.d.ts +10 -10
- package/src/country-context.js +22 -22
- package/src/currency.d.ts +14 -14
- package/src/currency.js +66 -66
- package/src/geo.js +169 -169
- package/src/geography-central-asia.js +42 -42
- package/src/geography-detection.d.ts +14 -14
- package/src/geography-detection.js +64 -64
- package/src/geography-display.d.ts +13 -13
- package/src/geography-display.js +113 -113
- package/src/geography.js +210 -210
- package/src/hiring-advanced.js +147 -147
- package/src/hiring-candidate-fields.d.ts +9 -9
- package/src/hiring-candidate-fields.js +92 -92
- package/src/hiring-context.d.ts +64 -64
- package/src/hiring-context.js +412 -412
- package/src/hiring-language-extensions.d.ts +19 -19
- package/src/hiring-language-extensions.js +139 -139
- package/src/hiring-languages.js +135 -135
- package/src/hiring-location-fields.d.ts +3 -3
- package/src/hiring-location-fields.js +53 -53
- package/src/hiring-professions-ro.js +191 -191
- package/src/hiring-professions.js +437 -437
- package/src/hiring-requirements.d.ts +16 -16
- package/src/hiring-requirements.js +170 -170
- package/src/hiring-salary-context.d.ts +27 -27
- package/src/hiring-salary-context.js +76 -76
- package/src/hiring-semantics.d.ts +29 -29
- package/src/hiring-semantics.js +218 -218
- package/src/hiring-skills.d.ts +21 -21
- package/src/hiring-skills.js +315 -315
- package/src/hiring-source-aliases.d.ts +32 -32
- package/src/hiring-source-aliases.js +185 -185
- package/src/hiring-source-semantics.d.ts +31 -31
- package/src/hiring-source-semantics.js +293 -293
- package/src/hiring-temporal.d.ts +15 -15
- package/src/hiring-temporal.js +67 -67
- package/src/hiring-vacancy-fields.d.ts +5 -5
- package/src/hiring-vacancy-fields.js +23 -23
- package/src/hiring-work-semantics.d.ts +34 -34
- package/src/hiring-work-semantics.js +72 -72
- package/src/hiring.js +180 -180
- package/src/housing-address.d.ts +18 -18
- package/src/housing-address.js +217 -210
- package/src/housing-commercial.d.ts +1 -0
- package/src/housing-commercial.js +9 -0
- package/src/housing-context.d.ts +36 -36
- package/src/housing-context.js +183 -183
- package/src/housing-features.js +30 -30
- package/src/housing-intent.d.ts +9 -9
- package/src/housing-intent.js +132 -132
- package/src/housing-listing-fields.js +131 -131
- package/src/housing-money.d.ts +7 -7
- package/src/housing-money.js +102 -102
- package/src/housing-source-aliases.d.ts +8 -8
- package/src/housing-source-aliases.js +51 -51
- package/src/housing-structured.d.ts +55 -55
- package/src/housing-structured.js +219 -219
- package/src/housing.js +200 -200
- package/src/index.js +45 -44
- package/src/kz-location-extensions.js +307 -307
- package/src/landmarks.js +21 -21
- package/src/lexicon-core.js +58 -58
- package/src/location-merge.js +106 -106
- package/src/locations.js +456 -456
- package/src/money-core.d.ts +10 -10
- package/src/money-core.js +81 -81
- package/src/money-lexicon.d.ts +5 -5
- package/src/money-lexicon.js +79 -79
- package/src/money.js +154 -154
- package/src/normalization.js +384 -384
- package/src/odesa-metropolitan.js +144 -144
- package/src/romania-geography.js +47 -47
- package/src/tashkent-colloquial.js +80 -72
- package/src/tashkent-housing-geography.d.ts +38 -38
- package/src/tashkent-housing-geography.js +211 -211
- package/src/tashkent-pois.js +215 -215
- package/src/tashkent-residential-complexes.js +272 -272
- package/src/ua-location-extensions-major.js +118 -118
- package/src/ua-location-extensions-metro.js +9 -9
- package/src/ua-location-extensions-regional.js +246 -246
- package/src/ua-secondary-cities.d.ts +2 -2
- package/src/ua-secondary-cities.js +57 -57
- package/src/ukraine.js +75 -75
- package/src/uz-location-extensions.js +259 -259
|
@@ -1,272 +1,272 @@
|
|
|
1
|
-
import { aliasesToRegex, findCanonical } from './normalization.js';
|
|
2
|
-
|
|
3
|
-
const AMBIGUOUS_TASHKENT_COMPLEXES = new Set([
|
|
4
|
-
'Amir Temur',
|
|
5
|
-
'Bodomzor',
|
|
6
|
-
'City Mall',
|
|
7
|
-
'Darhan',
|
|
8
|
-
'Pushkin',
|
|
9
|
-
]);
|
|
10
|
-
|
|
11
|
-
function complex(name, aliases = []) {
|
|
12
|
-
const all = [...new Set([name, ...aliases].filter(Boolean))];
|
|
13
|
-
return Object.freeze({
|
|
14
|
-
canonical: name,
|
|
15
|
-
name,
|
|
16
|
-
aliases: Object.freeze(all),
|
|
17
|
-
ambiguous: AMBIGUOUS_TASHKENT_COMPLEXES.has(name),
|
|
18
|
-
re: aliasesToRegex(all),
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export const TASHKENT_RESIDENTIAL_COMPLEXES = Object.freeze([
|
|
23
|
-
complex('AKAY CITY', ['Акай Сити']),
|
|
24
|
-
complex('Albero'),
|
|
25
|
-
complex('Alfraganus'),
|
|
26
|
-
complex('Amir Temur'),
|
|
27
|
-
complex('Anhor Residence'),
|
|
28
|
-
complex('Anor Development'),
|
|
29
|
-
complex('ARNASAY'),
|
|
30
|
-
complex('Askiya City'),
|
|
31
|
-
complex('Asia House', ['Азиа Хаус', 'Азия Хаус']),
|
|
32
|
-
complex('Assalom Bog\'lar'),
|
|
33
|
-
complex('Assalom Do\'stlik'),
|
|
34
|
-
complex('Assalom Havo'),
|
|
35
|
-
complex('Assalom Maxtumquli'),
|
|
36
|
-
complex('Assalom Sohil', ['Ассалом Сохил']),
|
|
37
|
-
complex('Aviasozlar Plaza'),
|
|
38
|
-
complex('BASHKENT'),
|
|
39
|
-
complex('BASHKENT Mening orzuyim'),
|
|
40
|
-
complex('Baurum'),
|
|
41
|
-
complex('Bayterak'),
|
|
42
|
-
complex('Bi Sado'),
|
|
43
|
-
complex('Binkat', ['Бинкат']),
|
|
44
|
-
complex('Black Tower'),
|
|
45
|
-
complex('Bobur Residence'),
|
|
46
|
-
complex('Bodomzor'),
|
|
47
|
-
complex('Botanika Saroyi', ['Ботаника Саройи']),
|
|
48
|
-
complex('Boulevard', ['Boulevard Residence', 'Бульвар', 'Boulvard']),
|
|
49
|
-
complex('Bridge'),
|
|
50
|
-
complex('Brooklyn', ['Бруклин']),
|
|
51
|
-
complex('Cambridge Residence', ['Кембридж Резиденс']),
|
|
52
|
-
complex('Caravan Avenue'),
|
|
53
|
-
complex('Celebrity Residence'),
|
|
54
|
-
complex('Central Plaza'),
|
|
55
|
-
complex('Charh Novza'),
|
|
56
|
-
complex('Chimgan Hills'),
|
|
57
|
-
complex('City Group Tower'),
|
|
58
|
-
complex('City Life'),
|
|
59
|
-
complex('City Mall'),
|
|
60
|
-
complex('Comfort House', ['Комфорт Хаус']),
|
|
61
|
-
complex('Darhan', ['Darkhan Residence', 'Дархан Резиденс', 'Дархан', 'Darkhan']),
|
|
62
|
-
complex('DARVOZA'),
|
|
63
|
-
complex('Dostlar', ['Do‘stlar', 'Do\'stlar', 'Doʻstlar', 'Дустлар', 'Дўстлар', 'Дустлар ЖК']),
|
|
64
|
-
complex('Dream House', ['Дрим-Хаус', 'Дрим Хаус']),
|
|
65
|
-
complex('Dreamland Aeroport'),
|
|
66
|
-
complex('Dreamland Do\'stlik'),
|
|
67
|
-
complex('Dreamland Parkent'),
|
|
68
|
-
complex('ECO HOUSE'),
|
|
69
|
-
complex('Eco Residence'),
|
|
70
|
-
complex('Eco Smart'),
|
|
71
|
-
complex('Elegant'),
|
|
72
|
-
complex('Ellipse Garden Darhan'),
|
|
73
|
-
complex('Etalon'),
|
|
74
|
-
complex('Family House'),
|
|
75
|
-
complex('Fazo Residents'),
|
|
76
|
-
complex('Flagman'),
|
|
77
|
-
complex('Gardens', ['Gardens Residence', 'Гарденс Резиденс', 'Гарденс']),
|
|
78
|
-
complex('Glinka Premium'),
|
|
79
|
-
complex('Golden Lake Residence'),
|
|
80
|
-
complex('Grand Akkurgan'),
|
|
81
|
-
complex('Grand City'),
|
|
82
|
-
complex('Green Park'),
|
|
83
|
-
complex('Greenpark Bo\'z Suv'),
|
|
84
|
-
complex('Greenwich', ['Гринвич']),
|
|
85
|
-
complex('Harizma'),
|
|
86
|
-
complex('High Town'),
|
|
87
|
-
complex('Hillmar'),
|
|
88
|
-
complex('IKAT'),
|
|
89
|
-
complex('Imperial Club City'),
|
|
90
|
-
complex('Istanbul City', ['Истанбул Сити', 'Истамбул Сити']),
|
|
91
|
-
complex('Jomiy Residence'),
|
|
92
|
-
complex('Kamron Palace'),
|
|
93
|
-
complex('Kiparis'),
|
|
94
|
-
complex('Koh Ota'),
|
|
95
|
-
complex('Kushon'),
|
|
96
|
-
complex('LAFAYETTE'),
|
|
97
|
-
complex('Loft Residence'),
|
|
98
|
-
complex('Luminar House'),
|
|
99
|
-
complex('Maljaan Residence'),
|
|
100
|
-
complex('MANHATTAN'),
|
|
101
|
-
complex('Manzara', ['Манзара']),
|
|
102
|
-
complex('Mashxadi Residence'),
|
|
103
|
-
complex('Mavera Town'),
|
|
104
|
-
complex('Mavrid mavzesi'),
|
|
105
|
-
complex('Mavsum'),
|
|
106
|
-
complex('Mega Dom'),
|
|
107
|
-
complex('MEHRIBON'),
|
|
108
|
-
complex('Mening Uyim'),
|
|
109
|
-
complex('Meridian'),
|
|
110
|
-
complex('METROPOL'),
|
|
111
|
-
complex('Milano'),
|
|
112
|
-
complex('Minar'),
|
|
113
|
-
complex('Ming Chinor'),
|
|
114
|
-
complex('MIRABAD PALACE'),
|
|
115
|
-
complex('Mirabad Avenue', ['Мирабад Авеню']),
|
|
116
|
-
complex('Mirabad City', ['Мирабад Сити']),
|
|
117
|
-
complex('MIRADOR'),
|
|
118
|
-
complex('Modera Towers', ['Модера Товерс']),
|
|
119
|
-
complex('Moderno'),
|
|
120
|
-
complex('Muhtasham'),
|
|
121
|
-
complex('Musaffo'),
|
|
122
|
-
complex('Musaffo Maskan', ['Муссафо Маскан']),
|
|
123
|
-
complex('Navruz'),
|
|
124
|
-
complex('Neo House'),
|
|
125
|
-
complex('NEONIT'),
|
|
126
|
-
complex('New Life'),
|
|
127
|
-
complex('New Port'),
|
|
128
|
-
complex('Nice Villas'),
|
|
129
|
-
complex('Nikitina Residence'),
|
|
130
|
-
complex('NOVDAR'),
|
|
131
|
-
complex('NRG Hayot'),
|
|
132
|
-
complex('NRG Jomiy'),
|
|
133
|
-
complex('NRG Maftun Makon'),
|
|
134
|
-
complex('NRG Meros'),
|
|
135
|
-
complex('NRG Mirzo-Ulugbek'),
|
|
136
|
-
complex('NRG Oybek', ['NRG Ойбек', 'НРГ Ойбек']),
|
|
137
|
-
complex('NRG Park'),
|
|
138
|
-
complex('NRG Qorasuv'),
|
|
139
|
-
complex('NRG U-Tower', ['U Tower', 'U-Tower', 'Ю Тауэр', 'НРГ Ю Тауэр']),
|
|
140
|
-
complex('NRG VOHA'),
|
|
141
|
-
complex('NRG Zamon'),
|
|
142
|
-
complex('Nukus Avenue', ['Нукус Авеню']),
|
|
143
|
-
complex('Nur'),
|
|
144
|
-
complex('Nur Hayot'),
|
|
145
|
-
complex('Nur Namuna'),
|
|
146
|
-
complex('Ocean'),
|
|
147
|
-
complex('Ocean Xon Saroy', ['Xon Saroy Ocean']),
|
|
148
|
-
complex('Obod Maskan'),
|
|
149
|
-
complex('Obi Hayot'),
|
|
150
|
-
complex('Olmos Residence'),
|
|
151
|
-
complex('Olmazor City', ['Алмазар Сити', 'Олмазор Сити']),
|
|
152
|
-
complex('Orzu'),
|
|
153
|
-
complex('OQSAROY', ['ОК САРОЙ', 'Оксарой', 'Oq Saroy', 'Oq-Saroy']),
|
|
154
|
-
complex('O\'zbegim', ['Узбегим', 'O‘zbegim', 'Oʻzbegim', 'Ozbegim']),
|
|
155
|
-
complex('O\'z Mahal', ['Озмахал', 'Узмахал', 'O‘z Mahal', 'Oʻz Mahal', 'Oz Mahal']),
|
|
156
|
-
complex('O\'z Makon'),
|
|
157
|
-
complex('Oz Zamin'),
|
|
158
|
-
complex('Paradise House'),
|
|
159
|
-
complex('Parisien', ['Парисьен']),
|
|
160
|
-
complex('Park City Labzak'),
|
|
161
|
-
complex('Park Residence'),
|
|
162
|
-
complex('Parkent Avenue', ['Паркент Авеню']),
|
|
163
|
-
complex('Parkent Plaza'),
|
|
164
|
-
complex('PARKWOOD'),
|
|
165
|
-
complex('Parlament'),
|
|
166
|
-
complex('Piramit Tower', ['Пирамит Товер', 'Пирамид', 'Pyramid Tower']),
|
|
167
|
-
complex('Poytaht Gavhari'),
|
|
168
|
-
complex('Poytaxt Residence', ['Пойтахт Резиденс', 'Пойтахт Ресиденс']),
|
|
169
|
-
complex('Prestige Gardens'),
|
|
170
|
-
complex('Pushkin'),
|
|
171
|
-
complex('Qadriyat'),
|
|
172
|
-
complex('Qorasuv Plaza'),
|
|
173
|
-
complex('Qorasuv River Residence', ['Карасу Риверс']),
|
|
174
|
-
complex('Regnum Plaza'),
|
|
175
|
-
complex('Renaissance'),
|
|
176
|
-
complex('Resim Tashkent'),
|
|
177
|
-
complex('River Park'),
|
|
178
|
-
complex('Riverside'),
|
|
179
|
-
complex('Riviera', ['Ривьера']),
|
|
180
|
-
complex('Royal House'),
|
|
181
|
-
complex('SAADIYAT'),
|
|
182
|
-
complex('Sado Business'),
|
|
183
|
-
complex('SAF Towers'),
|
|
184
|
-
complex('Salom Qoyliq'),
|
|
185
|
-
complex('Salamatina'),
|
|
186
|
-
complex('Sapphire Terrace'),
|
|
187
|
-
complex('Sayram Avenue'),
|
|
188
|
-
complex('Sayram Plaza'),
|
|
189
|
-
complex('Sayram Tower'),
|
|
190
|
-
complex('Seoul Mun', ['Сеул Мун']),
|
|
191
|
-
complex('Seoul Riverside'),
|
|
192
|
-
complex('Shahriabad'),
|
|
193
|
-
complex('Shohsaroy Towers'),
|
|
194
|
-
complex('Shoshkent'),
|
|
195
|
-
complex('Silk Road'),
|
|
196
|
-
complex('Silk Road Apartments'),
|
|
197
|
-
complex('Silk Way'),
|
|
198
|
-
complex('Silver Tower'),
|
|
199
|
-
complex('Skyline'),
|
|
200
|
-
complex('Sokin Diyor'),
|
|
201
|
-
complex('Solaris', ['Солярис', 'Саларис']),
|
|
202
|
-
complex('Stellar Residence'),
|
|
203
|
-
complex('Sunrise'),
|
|
204
|
-
complex('Tashkent City Gardens'),
|
|
205
|
-
complex('Temur Malik'),
|
|
206
|
-
complex('Tiara Residence'),
|
|
207
|
-
complex('Tower Up'),
|
|
208
|
-
complex('Trinity'),
|
|
209
|
-
complex('Twins'),
|
|
210
|
-
complex('Uchtepa Avenue'),
|
|
211
|
-
complex('VEGAS TOWER', ['Вегас Товер', 'Vegas']),
|
|
212
|
-
complex('Venetsiya', ['Венеция']),
|
|
213
|
-
complex('Viaport'),
|
|
214
|
-
complex('Vita Alliance'),
|
|
215
|
-
complex('Vita Stroy'),
|
|
216
|
-
complex('White House'),
|
|
217
|
-
complex('Wiston'),
|
|
218
|
-
complex('Xon Saroy', ['Хон Сарой', 'Khon Saroy']),
|
|
219
|
-
complex('Xonobod Avenue', ['Хонабод Авеню']),
|
|
220
|
-
complex('Yakkasaray City Mall', ['Яккасарай Сити Молл']),
|
|
221
|
-
complex('Yangi Baxt', ['Янгибахт', 'Янги Бахт']),
|
|
222
|
-
complex('Yangi Mahalla'),
|
|
223
|
-
complex('Yangi O’zbekiston Massivi'),
|
|
224
|
-
complex('Yashil Makon'),
|
|
225
|
-
complex('Yashil Sohil'),
|
|
226
|
-
complex('Yulduz'),
|
|
227
|
-
complex('Yunusabad Residence'),
|
|
228
|
-
complex('Zarafshan City'),
|
|
229
|
-
complex('Zaytunli'),
|
|
230
|
-
complex('Aeroport House', ['Аэропорт Хаус']),
|
|
231
|
-
complex('Besh Chinor', ['Беш Чинор']),
|
|
232
|
-
complex('Bobur Elite', ['Бобур Элит']),
|
|
233
|
-
complex('London', ['Лондон']),
|
|
234
|
-
complex('Madrid', ['Мадрид']),
|
|
235
|
-
complex('Maftun Makon', ['Мафтун Макон']),
|
|
236
|
-
complex('Urikzor Residence', ['Урикзор Резиденс']),
|
|
237
|
-
complex('Nest One', ['Нест Ван']),
|
|
238
|
-
complex('Assalom Jomiy', ['Ассалом Жомий']),
|
|
239
|
-
complex('Infinity', ['Инфинити', 'Инфинити ЖК']),
|
|
240
|
-
]);
|
|
241
|
-
|
|
242
|
-
const RESIDENTIAL_CONTEXT_RE = /(?:ж\.?\s*к\.?|жил(?:ой|ого)\s+комплекс|новострой(?:ка|ки)?|residential\s+complex|residence|turar\s+joy|uy[-\s]?joy|majmua|массив)/iu;
|
|
243
|
-
|
|
244
|
-
function hasLocalResidentialContext(text, start, end) {
|
|
245
|
-
const before = text.slice(Math.max(0, start - 36), start);
|
|
246
|
-
const after = text.slice(end, end + 36);
|
|
247
|
-
return RESIDENTIAL_CONTEXT_RE.test(before) || RESIDENTIAL_CONTEXT_RE.test(after);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
export function matchTashkentResidentialComplex(value) {
|
|
251
|
-
const text = String(value ?? '');
|
|
252
|
-
if (!text) return null;
|
|
253
|
-
|
|
254
|
-
const matches = [];
|
|
255
|
-
for (const entry of TASHKENT_RESIDENTIAL_COMPLEXES) {
|
|
256
|
-
const match = text.match(entry.re);
|
|
257
|
-
if (!match) continue;
|
|
258
|
-
const start = match.index ?? 0;
|
|
259
|
-
const end = start + match[0].length;
|
|
260
|
-
if (entry.ambiguous && !hasLocalResidentialContext(text, start, end)) continue;
|
|
261
|
-
matches.push({ entry, length: match[0].trim().length, start });
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
matches.sort((a, b) => b.length - a.length || a.start - b.start);
|
|
265
|
-
return matches[0]?.entry ?? null;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
export function canonicalTashkentResidentialComplex(value) {
|
|
269
|
-
const direct = findCanonical(value, TASHKENT_RESIDENTIAL_COMPLEXES);
|
|
270
|
-
if (direct) return direct.name;
|
|
271
|
-
return matchTashkentResidentialComplex(value)?.name || null;
|
|
272
|
-
}
|
|
1
|
+
import { aliasesToRegex, findCanonical } from './normalization.js';
|
|
2
|
+
|
|
3
|
+
const AMBIGUOUS_TASHKENT_COMPLEXES = new Set([
|
|
4
|
+
'Amir Temur',
|
|
5
|
+
'Bodomzor',
|
|
6
|
+
'City Mall',
|
|
7
|
+
'Darhan',
|
|
8
|
+
'Pushkin',
|
|
9
|
+
]);
|
|
10
|
+
|
|
11
|
+
function complex(name, aliases = []) {
|
|
12
|
+
const all = [...new Set([name, ...aliases].filter(Boolean))];
|
|
13
|
+
return Object.freeze({
|
|
14
|
+
canonical: name,
|
|
15
|
+
name,
|
|
16
|
+
aliases: Object.freeze(all),
|
|
17
|
+
ambiguous: AMBIGUOUS_TASHKENT_COMPLEXES.has(name),
|
|
18
|
+
re: aliasesToRegex(all),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const TASHKENT_RESIDENTIAL_COMPLEXES = Object.freeze([
|
|
23
|
+
complex('AKAY CITY', ['Акай Сити']),
|
|
24
|
+
complex('Albero'),
|
|
25
|
+
complex('Alfraganus'),
|
|
26
|
+
complex('Amir Temur'),
|
|
27
|
+
complex('Anhor Residence'),
|
|
28
|
+
complex('Anor Development'),
|
|
29
|
+
complex('ARNASAY'),
|
|
30
|
+
complex('Askiya City'),
|
|
31
|
+
complex('Asia House', ['Азиа Хаус', 'Азия Хаус']),
|
|
32
|
+
complex('Assalom Bog\'lar'),
|
|
33
|
+
complex('Assalom Do\'stlik'),
|
|
34
|
+
complex('Assalom Havo'),
|
|
35
|
+
complex('Assalom Maxtumquli'),
|
|
36
|
+
complex('Assalom Sohil', ['Ассалом Сохил']),
|
|
37
|
+
complex('Aviasozlar Plaza'),
|
|
38
|
+
complex('BASHKENT'),
|
|
39
|
+
complex('BASHKENT Mening orzuyim'),
|
|
40
|
+
complex('Baurum'),
|
|
41
|
+
complex('Bayterak'),
|
|
42
|
+
complex('Bi Sado'),
|
|
43
|
+
complex('Binkat', ['Бинкат']),
|
|
44
|
+
complex('Black Tower'),
|
|
45
|
+
complex('Bobur Residence'),
|
|
46
|
+
complex('Bodomzor'),
|
|
47
|
+
complex('Botanika Saroyi', ['Ботаника Саройи']),
|
|
48
|
+
complex('Boulevard', ['Boulevard Residence', 'Бульвар', 'Boulvard']),
|
|
49
|
+
complex('Bridge'),
|
|
50
|
+
complex('Brooklyn', ['Бруклин']),
|
|
51
|
+
complex('Cambridge Residence', ['Кембридж Резиденс']),
|
|
52
|
+
complex('Caravan Avenue'),
|
|
53
|
+
complex('Celebrity Residence'),
|
|
54
|
+
complex('Central Plaza'),
|
|
55
|
+
complex('Charh Novza'),
|
|
56
|
+
complex('Chimgan Hills'),
|
|
57
|
+
complex('City Group Tower'),
|
|
58
|
+
complex('City Life'),
|
|
59
|
+
complex('City Mall'),
|
|
60
|
+
complex('Comfort House', ['Комфорт Хаус']),
|
|
61
|
+
complex('Darhan', ['Darkhan Residence', 'Дархан Резиденс', 'Дархан', 'Darkhan']),
|
|
62
|
+
complex('DARVOZA'),
|
|
63
|
+
complex('Dostlar', ['Do‘stlar', 'Do\'stlar', 'Doʻstlar', 'Дустлар', 'Дўстлар', 'Дустлар ЖК']),
|
|
64
|
+
complex('Dream House', ['Дрим-Хаус', 'Дрим Хаус']),
|
|
65
|
+
complex('Dreamland Aeroport'),
|
|
66
|
+
complex('Dreamland Do\'stlik'),
|
|
67
|
+
complex('Dreamland Parkent'),
|
|
68
|
+
complex('ECO HOUSE'),
|
|
69
|
+
complex('Eco Residence'),
|
|
70
|
+
complex('Eco Smart'),
|
|
71
|
+
complex('Elegant'),
|
|
72
|
+
complex('Ellipse Garden Darhan'),
|
|
73
|
+
complex('Etalon'),
|
|
74
|
+
complex('Family House'),
|
|
75
|
+
complex('Fazo Residents'),
|
|
76
|
+
complex('Flagman'),
|
|
77
|
+
complex('Gardens', ['Gardens Residence', 'Гарденс Резиденс', 'Гарденс']),
|
|
78
|
+
complex('Glinka Premium'),
|
|
79
|
+
complex('Golden Lake Residence'),
|
|
80
|
+
complex('Grand Akkurgan'),
|
|
81
|
+
complex('Grand City'),
|
|
82
|
+
complex('Green Park'),
|
|
83
|
+
complex('Greenpark Bo\'z Suv'),
|
|
84
|
+
complex('Greenwich', ['Гринвич']),
|
|
85
|
+
complex('Harizma'),
|
|
86
|
+
complex('High Town'),
|
|
87
|
+
complex('Hillmar'),
|
|
88
|
+
complex('IKAT'),
|
|
89
|
+
complex('Imperial Club City'),
|
|
90
|
+
complex('Istanbul City', ['Истанбул Сити', 'Истамбул Сити']),
|
|
91
|
+
complex('Jomiy Residence'),
|
|
92
|
+
complex('Kamron Palace'),
|
|
93
|
+
complex('Kiparis'),
|
|
94
|
+
complex('Koh Ota'),
|
|
95
|
+
complex('Kushon'),
|
|
96
|
+
complex('LAFAYETTE'),
|
|
97
|
+
complex('Loft Residence'),
|
|
98
|
+
complex('Luminar House'),
|
|
99
|
+
complex('Maljaan Residence'),
|
|
100
|
+
complex('MANHATTAN'),
|
|
101
|
+
complex('Manzara', ['Манзара']),
|
|
102
|
+
complex('Mashxadi Residence'),
|
|
103
|
+
complex('Mavera Town'),
|
|
104
|
+
complex('Mavrid mavzesi'),
|
|
105
|
+
complex('Mavsum'),
|
|
106
|
+
complex('Mega Dom'),
|
|
107
|
+
complex('MEHRIBON'),
|
|
108
|
+
complex('Mening Uyim'),
|
|
109
|
+
complex('Meridian'),
|
|
110
|
+
complex('METROPOL'),
|
|
111
|
+
complex('Milano'),
|
|
112
|
+
complex('Minar'),
|
|
113
|
+
complex('Ming Chinor'),
|
|
114
|
+
complex('MIRABAD PALACE'),
|
|
115
|
+
complex('Mirabad Avenue', ['Мирабад Авеню']),
|
|
116
|
+
complex('Mirabad City', ['Мирабад Сити']),
|
|
117
|
+
complex('MIRADOR'),
|
|
118
|
+
complex('Modera Towers', ['Модера Товерс']),
|
|
119
|
+
complex('Moderno'),
|
|
120
|
+
complex('Muhtasham'),
|
|
121
|
+
complex('Musaffo'),
|
|
122
|
+
complex('Musaffo Maskan', ['Муссафо Маскан']),
|
|
123
|
+
complex('Navruz'),
|
|
124
|
+
complex('Neo House'),
|
|
125
|
+
complex('NEONIT'),
|
|
126
|
+
complex('New Life'),
|
|
127
|
+
complex('New Port'),
|
|
128
|
+
complex('Nice Villas'),
|
|
129
|
+
complex('Nikitina Residence'),
|
|
130
|
+
complex('NOVDAR'),
|
|
131
|
+
complex('NRG Hayot'),
|
|
132
|
+
complex('NRG Jomiy'),
|
|
133
|
+
complex('NRG Maftun Makon'),
|
|
134
|
+
complex('NRG Meros'),
|
|
135
|
+
complex('NRG Mirzo-Ulugbek'),
|
|
136
|
+
complex('NRG Oybek', ['NRG Ойбек', 'НРГ Ойбек']),
|
|
137
|
+
complex('NRG Park'),
|
|
138
|
+
complex('NRG Qorasuv'),
|
|
139
|
+
complex('NRG U-Tower', ['U Tower', 'U-Tower', 'Ю Тауэр', 'НРГ Ю Тауэр']),
|
|
140
|
+
complex('NRG VOHA'),
|
|
141
|
+
complex('NRG Zamon'),
|
|
142
|
+
complex('Nukus Avenue', ['Нукус Авеню']),
|
|
143
|
+
complex('Nur'),
|
|
144
|
+
complex('Nur Hayot'),
|
|
145
|
+
complex('Nur Namuna'),
|
|
146
|
+
complex('Ocean'),
|
|
147
|
+
complex('Ocean Xon Saroy', ['Xon Saroy Ocean']),
|
|
148
|
+
complex('Obod Maskan'),
|
|
149
|
+
complex('Obi Hayot'),
|
|
150
|
+
complex('Olmos Residence'),
|
|
151
|
+
complex('Olmazor City', ['Алмазар Сити', 'Олмазор Сити']),
|
|
152
|
+
complex('Orzu'),
|
|
153
|
+
complex('OQSAROY', ['ОК САРОЙ', 'Оксарой', 'Oq Saroy', 'Oq-Saroy']),
|
|
154
|
+
complex('O\'zbegim', ['Узбегим', 'O‘zbegim', 'Oʻzbegim', 'Ozbegim']),
|
|
155
|
+
complex('O\'z Mahal', ['Озмахал', 'Узмахал', 'O‘z Mahal', 'Oʻz Mahal', 'Oz Mahal']),
|
|
156
|
+
complex('O\'z Makon'),
|
|
157
|
+
complex('Oz Zamin'),
|
|
158
|
+
complex('Paradise House'),
|
|
159
|
+
complex('Parisien', ['Парисьен']),
|
|
160
|
+
complex('Park City Labzak'),
|
|
161
|
+
complex('Park Residence'),
|
|
162
|
+
complex('Parkent Avenue', ['Паркент Авеню']),
|
|
163
|
+
complex('Parkent Plaza'),
|
|
164
|
+
complex('PARKWOOD'),
|
|
165
|
+
complex('Parlament'),
|
|
166
|
+
complex('Piramit Tower', ['Пирамит Товер', 'Пирамид', 'Pyramid Tower']),
|
|
167
|
+
complex('Poytaht Gavhari'),
|
|
168
|
+
complex('Poytaxt Residence', ['Пойтахт Резиденс', 'Пойтахт Ресиденс']),
|
|
169
|
+
complex('Prestige Gardens'),
|
|
170
|
+
complex('Pushkin'),
|
|
171
|
+
complex('Qadriyat'),
|
|
172
|
+
complex('Qorasuv Plaza'),
|
|
173
|
+
complex('Qorasuv River Residence', ['Карасу Риверс']),
|
|
174
|
+
complex('Regnum Plaza'),
|
|
175
|
+
complex('Renaissance'),
|
|
176
|
+
complex('Resim Tashkent'),
|
|
177
|
+
complex('River Park'),
|
|
178
|
+
complex('Riverside'),
|
|
179
|
+
complex('Riviera', ['Ривьера']),
|
|
180
|
+
complex('Royal House'),
|
|
181
|
+
complex('SAADIYAT'),
|
|
182
|
+
complex('Sado Business'),
|
|
183
|
+
complex('SAF Towers'),
|
|
184
|
+
complex('Salom Qoyliq'),
|
|
185
|
+
complex('Salamatina'),
|
|
186
|
+
complex('Sapphire Terrace'),
|
|
187
|
+
complex('Sayram Avenue'),
|
|
188
|
+
complex('Sayram Plaza'),
|
|
189
|
+
complex('Sayram Tower'),
|
|
190
|
+
complex('Seoul Mun', ['Сеул Мун']),
|
|
191
|
+
complex('Seoul Riverside'),
|
|
192
|
+
complex('Shahriabad'),
|
|
193
|
+
complex('Shohsaroy Towers'),
|
|
194
|
+
complex('Shoshkent'),
|
|
195
|
+
complex('Silk Road'),
|
|
196
|
+
complex('Silk Road Apartments'),
|
|
197
|
+
complex('Silk Way'),
|
|
198
|
+
complex('Silver Tower'),
|
|
199
|
+
complex('Skyline'),
|
|
200
|
+
complex('Sokin Diyor'),
|
|
201
|
+
complex('Solaris', ['Солярис', 'Саларис']),
|
|
202
|
+
complex('Stellar Residence'),
|
|
203
|
+
complex('Sunrise'),
|
|
204
|
+
complex('Tashkent City Gardens'),
|
|
205
|
+
complex('Temur Malik'),
|
|
206
|
+
complex('Tiara Residence'),
|
|
207
|
+
complex('Tower Up'),
|
|
208
|
+
complex('Trinity'),
|
|
209
|
+
complex('Twins'),
|
|
210
|
+
complex('Uchtepa Avenue'),
|
|
211
|
+
complex('VEGAS TOWER', ['Вегас Товер', 'Vegas']),
|
|
212
|
+
complex('Venetsiya', ['Венеция']),
|
|
213
|
+
complex('Viaport'),
|
|
214
|
+
complex('Vita Alliance'),
|
|
215
|
+
complex('Vita Stroy'),
|
|
216
|
+
complex('White House'),
|
|
217
|
+
complex('Wiston'),
|
|
218
|
+
complex('Xon Saroy', ['Хон Сарой', 'Khon Saroy']),
|
|
219
|
+
complex('Xonobod Avenue', ['Хонабод Авеню']),
|
|
220
|
+
complex('Yakkasaray City Mall', ['Яккасарай Сити Молл']),
|
|
221
|
+
complex('Yangi Baxt', ['Янгибахт', 'Янги Бахт']),
|
|
222
|
+
complex('Yangi Mahalla'),
|
|
223
|
+
complex('Yangi O’zbekiston Massivi'),
|
|
224
|
+
complex('Yashil Makon'),
|
|
225
|
+
complex('Yashil Sohil'),
|
|
226
|
+
complex('Yulduz'),
|
|
227
|
+
complex('Yunusabad Residence'),
|
|
228
|
+
complex('Zarafshan City'),
|
|
229
|
+
complex('Zaytunli'),
|
|
230
|
+
complex('Aeroport House', ['Аэропорт Хаус']),
|
|
231
|
+
complex('Besh Chinor', ['Беш Чинор']),
|
|
232
|
+
complex('Bobur Elite', ['Бобур Элит']),
|
|
233
|
+
complex('London', ['Лондон']),
|
|
234
|
+
complex('Madrid', ['Мадрид']),
|
|
235
|
+
complex('Maftun Makon', ['Мафтун Макон']),
|
|
236
|
+
complex('Urikzor Residence', ['Урикзор Резиденс']),
|
|
237
|
+
complex('Nest One', ['Нест Ван']),
|
|
238
|
+
complex('Assalom Jomiy', ['Ассалом Жомий']),
|
|
239
|
+
complex('Infinity', ['Инфинити', 'Инфинити ЖК']),
|
|
240
|
+
]);
|
|
241
|
+
|
|
242
|
+
const RESIDENTIAL_CONTEXT_RE = /(?:ж\.?\s*к\.?|жил(?:ой|ого)\s+комплекс|новострой(?:ка|ки)?|residential\s+complex|residence|turar\s+joy|uy[-\s]?joy|majmua|массив)/iu;
|
|
243
|
+
|
|
244
|
+
function hasLocalResidentialContext(text, start, end) {
|
|
245
|
+
const before = text.slice(Math.max(0, start - 36), start);
|
|
246
|
+
const after = text.slice(end, end + 36);
|
|
247
|
+
return RESIDENTIAL_CONTEXT_RE.test(before) || RESIDENTIAL_CONTEXT_RE.test(after);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export function matchTashkentResidentialComplex(value) {
|
|
251
|
+
const text = String(value ?? '');
|
|
252
|
+
if (!text) return null;
|
|
253
|
+
|
|
254
|
+
const matches = [];
|
|
255
|
+
for (const entry of TASHKENT_RESIDENTIAL_COMPLEXES) {
|
|
256
|
+
const match = text.match(entry.re);
|
|
257
|
+
if (!match) continue;
|
|
258
|
+
const start = match.index ?? 0;
|
|
259
|
+
const end = start + match[0].length;
|
|
260
|
+
if (entry.ambiguous && !hasLocalResidentialContext(text, start, end)) continue;
|
|
261
|
+
matches.push({ entry, length: match[0].trim().length, start });
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
matches.sort((a, b) => b.length - a.length || a.start - b.start);
|
|
265
|
+
return matches[0]?.entry ?? null;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export function canonicalTashkentResidentialComplex(value) {
|
|
269
|
+
const direct = findCanonical(value, TASHKENT_RESIDENTIAL_COMPLEXES);
|
|
270
|
+
if (direct) return direct.name;
|
|
271
|
+
return matchTashkentResidentialComplex(value)?.name || null;
|
|
272
|
+
}
|