@whiteslove/parsing-lexicon 0.2.0
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 -0
- package/README.md +137 -0
- package/index.d.ts +375 -0
- package/package.json +75 -0
- package/src/central-asia-locations.js +211 -0
- package/src/central-asia.js +233 -0
- package/src/contact.d.ts +44 -0
- package/src/contact.js +159 -0
- package/src/countries.js +175 -0
- package/src/country-context.d.ts +10 -0
- package/src/country-context.js +22 -0
- package/src/currency.d.ts +14 -0
- package/src/currency.js +66 -0
- package/src/geo.js +169 -0
- package/src/geography-central-asia.js +42 -0
- package/src/geography-detection.d.ts +14 -0
- package/src/geography-detection.js +64 -0
- package/src/geography-display.d.ts +13 -0
- package/src/geography-display.js +113 -0
- package/src/geography.js +210 -0
- package/src/hiring-advanced.js +147 -0
- package/src/hiring-candidate-fields.d.ts +9 -0
- package/src/hiring-candidate-fields.js +92 -0
- package/src/hiring-context.d.ts +64 -0
- package/src/hiring-context.js +412 -0
- package/src/hiring-language-extensions.d.ts +19 -0
- package/src/hiring-language-extensions.js +139 -0
- package/src/hiring-languages.js +135 -0
- package/src/hiring-location-fields.d.ts +3 -0
- package/src/hiring-location-fields.js +53 -0
- package/src/hiring-professions-ro.js +191 -0
- package/src/hiring-professions.js +437 -0
- package/src/hiring-requirements.d.ts +16 -0
- package/src/hiring-requirements.js +170 -0
- package/src/hiring-salary-context.d.ts +27 -0
- package/src/hiring-salary-context.js +76 -0
- package/src/hiring-semantics.d.ts +29 -0
- package/src/hiring-semantics.js +218 -0
- package/src/hiring-skills.d.ts +21 -0
- package/src/hiring-skills.js +315 -0
- package/src/hiring-source-aliases.d.ts +32 -0
- package/src/hiring-source-aliases.js +186 -0
- package/src/hiring-source-semantics.d.ts +31 -0
- package/src/hiring-source-semantics.js +293 -0
- package/src/hiring-temporal.d.ts +15 -0
- package/src/hiring-temporal.js +67 -0
- package/src/hiring-vacancy-fields.d.ts +5 -0
- package/src/hiring-vacancy-fields.js +23 -0
- package/src/hiring-work-semantics.d.ts +34 -0
- package/src/hiring-work-semantics.js +72 -0
- package/src/hiring.js +180 -0
- package/src/housing-address.d.ts +18 -0
- package/src/housing-address.js +210 -0
- package/src/housing-context.d.ts +36 -0
- package/src/housing-context.js +183 -0
- package/src/housing-features.js +30 -0
- package/src/housing-intent.d.ts +9 -0
- package/src/housing-intent.js +132 -0
- package/src/housing-listing-fields.js +131 -0
- package/src/housing-money.d.ts +7 -0
- package/src/housing-money.js +102 -0
- package/src/housing-source-aliases.d.ts +8 -0
- package/src/housing-source-aliases.js +51 -0
- package/src/housing-structured.d.ts +55 -0
- package/src/housing-structured.js +219 -0
- package/src/housing.js +200 -0
- package/src/index.js +44 -0
- package/src/kz-location-extensions.js +307 -0
- package/src/landmarks.js +21 -0
- package/src/lexicon-core.js +58 -0
- package/src/location-merge.js +106 -0
- package/src/locations.js +456 -0
- package/src/money-core.d.ts +10 -0
- package/src/money-core.js +81 -0
- package/src/money-lexicon.d.ts +5 -0
- package/src/money-lexicon.js +79 -0
- package/src/money.js +154 -0
- package/src/normalization.js +384 -0
- package/src/odesa-metropolitan.js +145 -0
- package/src/romania-geography.js +47 -0
- package/src/tashkent-colloquial.js +72 -0
- package/src/tashkent-housing-geography.d.ts +38 -0
- package/src/tashkent-housing-geography.js +211 -0
- package/src/tashkent-pois.js +215 -0
- package/src/tashkent-residential-complexes.js +272 -0
- package/src/ua-location-extensions-major.js +118 -0
- package/src/ua-location-extensions-metro.js +9 -0
- package/src/ua-location-extensions-regional.js +246 -0
- package/src/ua-secondary-cities.d.ts +2 -0
- package/src/ua-secondary-cities.js +57 -0
- package/src/ukraine.js +75 -0
- package/src/uz-location-extensions.js +259 -0
package/src/locations.js
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { aliasesToRegex, aliasesOf } from './normalization.js';
|
|
2
|
+
import { TASHKENT_DISTRICTS, TASHKENT_METRO } from './geo.js';
|
|
3
|
+
import { UA_REGIONS as UA_REGION_LEXICON } from './geography.js';
|
|
4
|
+
import { mergeLocationCityDictionaries } from './location-merge.js';
|
|
5
|
+
import { UA_MAJOR_LOCATION_EXTENSIONS } from './ua-location-extensions-major.js';
|
|
6
|
+
import { UA_REGIONAL_LOCATION_EXTENSIONS } from './ua-location-extensions-regional.js';
|
|
7
|
+
import { UA_SECONDARY_LOCATION_EXTENSIONS } from './ua-secondary-cities.js';
|
|
8
|
+
import { UA_METRO_LOCATION_EXTENSIONS } from './ua-location-extensions-metro.js';
|
|
9
|
+
|
|
10
|
+
function entries(rows) {
|
|
11
|
+
return Object.freeze(rows.map(([name, ...aliases]) => {
|
|
12
|
+
const all = [...new Set([name, ...aliases].filter(Boolean))];
|
|
13
|
+
return Object.freeze({ canonical: name, name, aliases: Object.freeze(all), re: aliasesToRegex(all) });
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function lexiconEntries(items) {
|
|
18
|
+
return Object.freeze((items || []).map((item) => {
|
|
19
|
+
const all = [...new Set([item.canonical, ...aliasesOf(item)].filter(Boolean))];
|
|
20
|
+
return Object.freeze({ canonical: item.canonical, name: item.canonical, type: item.type, country: item.country, city: item.city, aliases: Object.freeze(all), re: aliasesToRegex(all) });
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const tashkentDistricts = lexiconEntries(TASHKENT_DISTRICTS);
|
|
25
|
+
|
|
26
|
+
export const LOCATION_DICTIONARIES = Object.freeze({
|
|
27
|
+
UZ: Object.freeze({
|
|
28
|
+
Tashkent: Object.freeze({
|
|
29
|
+
districts: tashkentDistricts,
|
|
30
|
+
microdistricts: entries([
|
|
31
|
+
...[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20].map((n) => [`Chilanzar-${n}`, `Чиланзар ${n}`, `Чилонзор ${n}`, `Chilonzor ${n}`]),
|
|
32
|
+
...[4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22].map((n) => [`Yunusabad-${n}`, `Юнусабад ${n}`, `Юнусобод ${n}`, `Yunusobod ${n}`]),
|
|
33
|
+
['Karakamysh', 'Каракамыш', 'Қорақамиш', 'Qoraqamish'], ['Sebzar', 'Себзар'],
|
|
34
|
+
['Tashselmash', 'Ташсельмаш'], ['Aviasozlar', 'Авиасозлар', 'Авиагородок'],
|
|
35
|
+
['Kuylyuk', 'Куйлюк', 'Қўйлиқ', 'Qo‘yliq', "Qo'yliq", 'Qoʻyliq'], ['Sergeli', 'Сергели массив', 'Sergeli massivi'],
|
|
36
|
+
['Sputnik', 'Спутник', 'Йўлдош', 'Sputnik massivi'], ['Yangi Choshtepa', 'Янги Чоштепа'],
|
|
37
|
+
]),
|
|
38
|
+
metro: TASHKENT_METRO,
|
|
39
|
+
residentialComplexes: entries([
|
|
40
|
+
['Nest One', 'Нест Ван'], ['Gardens Residence', 'Гарденс Резиденс'], ['Boulevard', 'Boulevard Residence', 'Бульвар'],
|
|
41
|
+
['NRG Oybek', 'NRG Ойбек'], ['NRG U-Tower', 'U Tower', 'Ю Тауэр'], ['Mirabad Avenue', 'Мирабад Авеню'],
|
|
42
|
+
['Darkhan Residence', 'Дархан Резиденс'], ['Tashkent City', 'Ташкент Сити', 'Toshkent City'], ['Assalom Sohil', 'Ассалом Сохил'],
|
|
43
|
+
['Assalom Jomiy', 'Ассалом Жомий'], ['Xon Saroy', 'Хон Сарой', 'Khon Saroy'], ['Cambridge Residence', 'Кембридж Резиденс'],
|
|
44
|
+
['Infinity', 'Инфинити ЖК'], ['Do‘stlar', 'Дустлар ЖК', "Do'stlar", 'Doʻstlar'], ['Olmazor City', 'Алмазар Сити', 'Олмазор Сити'],
|
|
45
|
+
]),
|
|
46
|
+
streets: entries([
|
|
47
|
+
['Amir Temur Avenue', 'проспект Амира Темура', 'Amir Temur shoh ko‘chasi', "Amir Temur shoh ko'chasi", 'Амир Темур шоҳ кўчаси'],
|
|
48
|
+
['Shota Rustaveli Street', 'улица Шота Руставели', 'Shota Rustaveli ko‘chasi', 'Шота Руставели кўчаси'],
|
|
49
|
+
['Nukus Street', 'улица Нукус', 'Nukus ko‘chasi', 'Нукус кўчаси'],
|
|
50
|
+
['Buyuk Ipak Yoli Street', 'улица Буюк Ипак Йули', "Buyuk Ipak Yo'li ko'chasi", 'Buyuk Ipak Yo‘li ko‘chasi', 'Буюк Ипак Йўли кўчаси'],
|
|
51
|
+
['Afrosiyob Street', 'улица Афросиаб', 'Afrosiyob ko‘chasi', 'Афросиёб кўчаси'],
|
|
52
|
+
['Mirzo Ulugbek Avenue', 'проспект Мирзо Улугбека', "Mirzo Ulug'bek shoh ko'chasi", 'Мирзо Улуғбек шоҳ кўчаси'],
|
|
53
|
+
['Bunyodkor Avenue', 'проспект Бунёдкор', 'Bunyodkor shoh ko‘chasi', 'Бунёдкор шоҳ кўчаси'],
|
|
54
|
+
['Muqimiy Street', 'улица Мукими', 'Muqimiy ko‘chasi', 'Муқимий кўчаси'],
|
|
55
|
+
['Furqat Street', 'улица Фурката', 'Furqat ko‘chasi', 'Фурқат кўчаси'],
|
|
56
|
+
['Beruniy Avenue', 'проспект Беруни', 'Beruniy shoh ko‘chasi', 'Беруний шоҳ кўчаси'],
|
|
57
|
+
['Taras Shevchenko Street', 'улица Тараса Шевченко', 'Taras Shevchenko ko‘chasi'],
|
|
58
|
+
['Islam Karimov Street', 'улица Ислама Каримова', 'Islom Karimov ko‘chasi', 'Ислом Каримов кўчаси'],
|
|
59
|
+
]),
|
|
60
|
+
landmarks: entries([
|
|
61
|
+
['Chorsu Bazaar', 'базар Чорсу', 'Чорсу бозори', 'Chorsu bozori'], ['Alay Bazaar', 'Алайский базар', 'Олой бозори', 'Oloy bozori'],
|
|
62
|
+
['Amir Timur Square', 'Сквер Амира Темура', 'Amir Temur xiyoboni', 'Амир Темур хиёбони'],
|
|
63
|
+
['Independence Square', 'Площадь Независимости', 'Mustaqillik maydoni', 'Мустақиллик майдони'],
|
|
64
|
+
['Minor Mosque', 'мечеть Минор', 'Minor masjidi'], ['Bobur Park', 'парк Бобура', 'Bobur bog‘i', "Bobur bog'i"],
|
|
65
|
+
['Farhod Bazaar', 'Фархадский базар', 'Farhod bozori'], ['Sergeli Car Bazaar', 'Сергелийский авторынок', 'Sergeli mashina bozori'],
|
|
66
|
+
['Tashkent North Railway Station', 'Ташкент Северный вокзал', 'Toshkent Shimoliy vokzali'],
|
|
67
|
+
['Tashkent South Railway Station', 'Ташкент Южный вокзал', 'Toshkent Janubiy vokzali'],
|
|
68
|
+
['Magic City', 'Мэджик Сити'], ['Tashkent City Mall', 'Ташкент Сити Молл'],
|
|
69
|
+
]),
|
|
70
|
+
}),
|
|
71
|
+
Samarkand: Object.freeze({
|
|
72
|
+
microdistricts: entries([
|
|
73
|
+
['Sogdiana', 'Согдиана', 'So‘g‘diyona', "So'g'diyona", 'Сўғдиёна'], ['Sartepa', 'Сартепа'], ['Sat-Tepo', 'Саттепо', 'Sat Tepo'],
|
|
74
|
+
['Kimyogarlar', 'Химиков', 'Кимёгарлар'], ['Vokzal', 'Вокзал район'], ['Universitet', 'Университетский район'],
|
|
75
|
+
['Registan', 'Регистан'], ['Dagbitskaya', 'Дагбитская'], ['Rudaki', 'Рудаки'],
|
|
76
|
+
]),
|
|
77
|
+
residentialComplexes: entries([
|
|
78
|
+
['Samarkand City', 'Самарканд Сити'], ['Bogishamol City', 'Богишамол Сити'], ['Marokand Avenue', 'Мароканд Авеню'],
|
|
79
|
+
['Silk Road Residence', 'Силк Роуд Резиденс'], ['Registan Residence', 'Регистан Резиденс'],
|
|
80
|
+
]),
|
|
81
|
+
landmarks: entries([
|
|
82
|
+
['Registan Square', 'площадь Регистан', 'Registon maydoni', 'Регистон майдони'], ['Gur-e-Amir', 'Гур Эмир', 'Go‘ri Amir', "Go'ri Amir"],
|
|
83
|
+
['Siab Bazaar', 'Сиабский базар', 'Siyob bozori'], ['Samarkand Railway Station', 'Самаркандский вокзал', 'Samarqand vokzali'],
|
|
84
|
+
]),
|
|
85
|
+
}),
|
|
86
|
+
}),
|
|
87
|
+
KZ: Object.freeze({
|
|
88
|
+
Almaty: Object.freeze({
|
|
89
|
+
districts: entries([
|
|
90
|
+
['Almaly', 'Алмалинский район', 'Алмалы ауданы'], ['Bostandyk', 'Бостандыкский район', 'Бостандық ауданы'],
|
|
91
|
+
['Medeu', 'Медеуский район', 'Медеу ауданы'], ['Auezov', 'Ауэзовский район', 'Әуезов ауданы'],
|
|
92
|
+
['Turksib', 'Турксибский район', 'Түрксіб ауданы'], ['Nauryzbay', 'Наурызбайский район', 'Наурызбай ауданы'],
|
|
93
|
+
['Alatau', 'Алатауский район', 'Алатау ауданы'], ['Zhetysu', 'Жетысуский район', 'Жетісу ауданы'],
|
|
94
|
+
]),
|
|
95
|
+
microdistricts: entries([
|
|
96
|
+
...[1,2,3].map((n) => [`Samal-${n}`, `Самал ${n}`]), ...[1,2,3,4].map((n) => [`Orbita-${n}`, `Орбита ${n}`]),
|
|
97
|
+
...[1,2,3,4,5].map((n) => [`Aksai-${n}`, `Аксай ${n}`]), ...[1,2,3,4].map((n) => [`Mamyr-${n}`, `Мамыр ${n}`]),
|
|
98
|
+
...[1,2,3,4].map((n) => [`Zhetysu-${n}`, `Жетысу ${n}`, `Жетісу ${n}`]),
|
|
99
|
+
['Taugul', 'Таугуль', 'Таугүл'], ['Kazakhfilm', 'Казахфильм'], ['Koktem', 'Коктем', 'Көктем'], ['Atakent', 'Атакент'],
|
|
100
|
+
]),
|
|
101
|
+
metro: entries([
|
|
102
|
+
['Raiymbek Batyr', 'Райымбек батыра', 'Райымбек батыр'], ['Zhibek Zholy', 'Жибек жолы', 'Жібек жолы'], ['Almaly', 'Алмалы'],
|
|
103
|
+
['Abay', 'Абая', 'Абай'], ['Baikonur', 'Байконур', 'Байқоңыр'], ['Auezov Theatre', 'Театр имени М. Ауэзова', 'Мұхтар Әуезов театры'],
|
|
104
|
+
['Alatau', 'Алатау'], ['Sairan', 'Сайран'], ['Moskva', 'Москва'], ['Saryarka', 'Сарыарка', 'Сарыарқа'], ['Bauyrzhan Momyshuly', 'Б. Момышулы', 'Бауыржан Момышұлы'],
|
|
105
|
+
]),
|
|
106
|
+
residentialComplexes: entries([
|
|
107
|
+
['Esentai City', 'Есентай Сити'], ['Mega Towers', 'Мега Тауэрс'], ['Gagarin Park', 'Гагарин Парк'], ['4YOU', '4 Ю', 'Фор Ю'],
|
|
108
|
+
['Central Avenue', 'Централ Авеню'], ['Metropole', 'Метрополь'], ['Remizovka', 'Ремизовка ЖК'], ['Al-Farabi 27', 'Аль-Фараби 27'],
|
|
109
|
+
['Exclusive Time', 'Эксклюзив Тайм'], ['Auezov City', 'Ауэзов Сити'],
|
|
110
|
+
]),
|
|
111
|
+
streets: entries([
|
|
112
|
+
['Abai Avenue', 'проспект Абая', 'Абай даңғылы'], ['Al-Farabi Avenue', 'проспект Аль-Фараби', 'Әл-Фараби даңғылы'],
|
|
113
|
+
['Dostyk Avenue', 'проспект Достык', 'Достық даңғылы'], ['Nazarbayev Avenue', 'проспект Назарбаева', 'Назарбаев даңғылы', 'улица Фурманова'],
|
|
114
|
+
['Satpayev Street', 'улица Сатпаева', 'Сәтбаев көшесі'], ['Tole Bi Street', 'улица Толе би', 'Төле би көшесі'],
|
|
115
|
+
['Zheltoksan Street', 'улица Желтоксан', 'Желтоқсан көшесі'], ['Seifullin Avenue', 'проспект Сейфуллина', 'Сейфуллин даңғылы'],
|
|
116
|
+
['Rozybakiev Street', 'улица Розыбакиева', 'Розыбакиев көшесі'], ['Gagarin Avenue', 'проспект Гагарина', 'Гагарин даңғылы'],
|
|
117
|
+
]),
|
|
118
|
+
landmarks: entries([
|
|
119
|
+
['Kok-Tobe', 'Кок-Тобе', 'Көктөбе'], ['Medeu', 'Медеу'], ['Republic Square', 'Площадь Республики', 'Республика алаңы'],
|
|
120
|
+
['Green Bazaar', 'Зеленый базар', 'Көк базар'], ['Panfilov Park', 'парк Панфилова', '28 гвардияшы-панфиловшылар паркі'],
|
|
121
|
+
['Atakent', 'Атакент'], ['MEGA Alma-Ata', 'Мега Алматы', 'MEGA Almaty'], ['Esentai Mall', 'Есентай Молл'],
|
|
122
|
+
]),
|
|
123
|
+
}),
|
|
124
|
+
Astana: Object.freeze({
|
|
125
|
+
districts: entries([
|
|
126
|
+
['Almaty', 'Алматы район', 'Алматы ауданы'], ['Saryarka', 'Сарыарка район', 'Сарыарқа ауданы'], ['Esil', 'Есиль район', 'Есіл ауданы'],
|
|
127
|
+
['Baikonur', 'Байконур район', 'Байқоңыр ауданы'], ['Nura', 'Нура район', 'Нұра ауданы'], ['Saraishyk', 'Сарайшык район', 'Сарайшық ауданы'],
|
|
128
|
+
]),
|
|
129
|
+
microdistricts: entries([
|
|
130
|
+
['Samal', 'Самал'], ['Chubary', 'Чубары'], ['Koktal', 'Коктал', 'Көктал'], ['Urker', 'Уркер', 'Үркер'], ['Ilyinka', 'Ильинка'],
|
|
131
|
+
['Komsomolsky', 'Комсомольский'], ['South-East', 'Юго-Восток', 'ЮВ'], ['Tselinny', 'Целинный'],
|
|
132
|
+
]),
|
|
133
|
+
residentialComplexes: entries([
|
|
134
|
+
['Highvill', 'Хайвилл', 'Highvill Astana'], ['Grand Alatau', 'Гранд Алатау'], ['Northern Lights', 'Северное Сияние'],
|
|
135
|
+
['Diplomatic Town', 'Дипломатический городок'], ['Expo Boulevard', 'Экспо Бульвар'], ['Promenade Expo', 'Променад Экспо'],
|
|
136
|
+
['Green Quarter', 'Зеленый квартал', 'Жасыл квартал'], ['BI City Seoul', 'БИ Сити Сеул'], ['Nova City', 'Нова Сити'], ['Millennium Park', 'Миллениум Парк'],
|
|
137
|
+
]),
|
|
138
|
+
streets: entries([
|
|
139
|
+
['Mangilik El Avenue', 'проспект Мангилик Ел', 'Мәңгілік Ел даңғылы'], ['Kabanbay Batyr Avenue', 'проспект Кабанбай батыра', 'Қабанбай батыр даңғылы'],
|
|
140
|
+
['Turan Avenue', 'проспект Туран', 'Тұран даңғылы'], ['Respublika Avenue', 'проспект Республики', 'Республика даңғылы'],
|
|
141
|
+
['Saryarka Avenue', 'проспект Сарыарка', 'Сарыарқа даңғылы'], ['Bogenbay Batyr Avenue', 'проспект Богенбай батыра', 'Бөгенбай батыр даңғылы'],
|
|
142
|
+
['Dostyq Street', 'улица Достык', 'Достық көшесі'], ['Qonayev Street', 'улица Кунаева', 'Қонаев көшесі'],
|
|
143
|
+
]),
|
|
144
|
+
landmarks: entries([
|
|
145
|
+
['Baiterek', 'Байтерек', 'Бәйтерек'], ['Khan Shatyr', 'Хан Шатыр'], ['EXPO', 'Экспо', 'Нұр Әлем'],
|
|
146
|
+
['Abu Dhabi Plaza', 'Абу Даби Плаза'], ['Hazret Sultan Mosque', 'мечеть Хазрет Султан', 'Әзірет Сұлтан мешіті'],
|
|
147
|
+
]),
|
|
148
|
+
}),
|
|
149
|
+
}),
|
|
150
|
+
RO: Object.freeze({
|
|
151
|
+
Bucharest: Object.freeze({
|
|
152
|
+
districts: entries([
|
|
153
|
+
...[1,2,3,4,5,6].map((n) => [`Sector ${n}`, `Sectorul ${n}`, `sector ${n}`, `сектор ${n}`]),
|
|
154
|
+
]),
|
|
155
|
+
microdistricts: entries([
|
|
156
|
+
['Baneasa', 'Băneasa'], ['Aviatiei', 'Aviației'], ['Dorobanti', 'Dorobanți'], ['Floreasca'], ['Pipera'], ['Herastrau', 'Herăstrău'],
|
|
157
|
+
['Colentina'], ['Pantelimon'], ['Iancului'], ['Tei'], ['Vitan'], ['Dristor'], ['Titan'], ['Balta Alba', 'Balta Albă'], ['Berceni'],
|
|
158
|
+
['Tineretului'], ['Giurgiului'], ['Cotroceni'], ['Rahova'], ['Ferentari'], ['Drumul Taberei'], ['Militari'], ['Crangasi', 'Crângași'],
|
|
159
|
+
['Giulesti', 'Giulești'], ['Grozavesti', 'Grozăvești'], ['Regie'],
|
|
160
|
+
]),
|
|
161
|
+
metro: entries([
|
|
162
|
+
['Pipera'], ['Aurel Vlaicu'], ['Aviatorilor'], ['Piata Victoriei', 'Piața Victoriei'], ['Gara de Nord'], ['Piata Romana', 'Piața Romană'],
|
|
163
|
+
['Universitate'], ['Piata Unirii', 'Piața Unirii'], ['Tineretului'], ['Eroii Revolutiei', 'Eroii Revoluției'], ['Dristor'], ['Titan'],
|
|
164
|
+
['Nicolae Grigorescu'], ['Anghel Saligny'], ['Politehnica'], ['Grozavesti', 'Grozăvești'], ['Eroilor'], ['Izvor'], ['Piata Iancului', 'Piața Iancului'],
|
|
165
|
+
['Obor'], ['Stefan cel Mare', 'Ștefan cel Mare'], ['Crangasi', 'Crângași'], ['Basarab'], ['Lujerului'], ['Gorjului'], ['Pacii', 'Păcii'],
|
|
166
|
+
['Preciziei'], ['Valea Ialomitei', 'Valea Ialomiței'], ['Romancierilor'], ['Parc Drumul Taberei'], ['Favorit'], ['Orizont'], ['Academia Militara', 'Academia Militară'],
|
|
167
|
+
]),
|
|
168
|
+
residentialComplexes: entries([
|
|
169
|
+
['One Herastrau Park', 'One Herăstrău Park'], ['One Floreasca City'], ['One Verdi Park'], ['Up-site Bucharest', 'Up Site Bucharest'],
|
|
170
|
+
['Aviatiei Park', 'Aviației Park'], ['Cortina North'], ['Cortina Academy'], ['Cloud9 Residence'], ['Luxuria Residence'],
|
|
171
|
+
['Exigent Plaza Residence'], ['Plaza Residence'], ['21 Residence'], ['Novum Residence'], ['Belvedere Residences'], ['Global Residence Monolitului'],
|
|
172
|
+
]),
|
|
173
|
+
streets: entries([
|
|
174
|
+
['Calea Victoriei'], ['Bulevardul Unirii', 'Bd. Unirii', 'Bulevardul Unirii București'], ['Bulevardul Iuliu Maniu', 'Bd. Iuliu Maniu'],
|
|
175
|
+
['Bulevardul Timișoara', 'Bulevardul Timisoara', 'Bd. Timișoara'], ['Splaiul Independenței', 'Splaiul Independentei'],
|
|
176
|
+
['Calea Moșilor', 'Calea Mosilor'], ['Calea Dorobanților', 'Calea Dorobantilor'], ['Șoseaua Colentina', 'Soseaua Colentina'],
|
|
177
|
+
['Șoseaua Ștefan cel Mare', 'Soseaua Stefan cel Mare'], ['Bulevardul General Gheorghe Magheru', 'Bd. Magheru'],
|
|
178
|
+
]),
|
|
179
|
+
landmarks: entries([
|
|
180
|
+
['Palace of Parliament', 'Palatul Parlamentului', 'Casa Poporului', 'Дворец Парламента'], ['Old Town', 'Centrul Vechi', 'Lipscani', 'Старый город'],
|
|
181
|
+
['King Michael I Park', 'Parcul Regele Mihai I', 'Parcul Herăstrău', 'Herastrau Park'], ['AFI Cotroceni', 'AFI Palace Cotroceni'],
|
|
182
|
+
['Gara de Nord', 'București Nord', 'Северный вокзал Бухареста'], ['Piața Romană', 'Piata Romana'], ['Piața Victoriei', 'Piata Victoriei'],
|
|
183
|
+
]),
|
|
184
|
+
}),
|
|
185
|
+
Brasov: Object.freeze({
|
|
186
|
+
microdistricts: entries([
|
|
187
|
+
['Tractorul'], ['Coresi'], ['Astra'], ['Racadau', 'Răcădău'], ['Bartolomeu'], ['Noua'], ['Darste', 'Dârste'], ['Schei', 'Șchei'],
|
|
188
|
+
['Centrul Civic'], ['Centrul Vechi'], ['Florilor'], ['Scriitorilor'], ['Craiter'], ['Stupini'],
|
|
189
|
+
]),
|
|
190
|
+
residentialComplexes: entries([
|
|
191
|
+
['Coresi Avantgarden', 'Avantgarden Coresi'], ['Avantgarden3', 'Avantgarden 3'], ['Urban Plaza'], ['Qualis', 'Qualis Residence'],
|
|
192
|
+
['Isaran Residence'], ['Maurer Residence Brasov', 'Maurer Residence Brașov'], ['Grandis Residence', 'Grandis'], ['Cosmopolit Residence'],
|
|
193
|
+
['Alphaville Arena'], ['Mountain View Residence'],
|
|
194
|
+
]),
|
|
195
|
+
streets: entries([['Calea București', 'Calea Bucuresti'], ['Strada Republicii'], ['Bulevardul Griviței', 'Bulevardul Grivitei'], ['Strada Lungă', 'Strada Lunga']]),
|
|
196
|
+
landmarks: entries([['Piața Sfatului', 'Piata Sfatului'], ['Coresi Shopping Resort', 'Coresi Mall'], ['Brașov Railway Station', 'Gara Brașov', 'Gara Brasov']]),
|
|
197
|
+
}),
|
|
198
|
+
}),
|
|
199
|
+
UA: Object.freeze({
|
|
200
|
+
Kyiv: Object.freeze({
|
|
201
|
+
districts: entries([
|
|
202
|
+
['Podilskyi', 'Подільський район', 'Подольский район'], ['Pecherskyi', 'Печерський район', 'Печерский район'],
|
|
203
|
+
['Obolonskyi', 'Оболонський район', 'Оболонский район'], ['Shevchenkivskyi', 'Шевченківський район', 'Шевченковский район'],
|
|
204
|
+
['Solomianskyi', 'Солом’янський район', 'Соломенский район'], ['Darnytskyi', 'Дарницький район', 'Дарницкий район'],
|
|
205
|
+
['Holosiivskyi', 'Голосіївський район', 'Голосеевский район'], ['Dniprovskyi', 'Дніпровський район', 'Днепровский район'],
|
|
206
|
+
['Sviatoshynskyi', 'Святошинський район', 'Святошинский район'], ['Desnianskyi', 'Деснянський район', 'Деснянский район'],
|
|
207
|
+
]),
|
|
208
|
+
microdistricts: entries([
|
|
209
|
+
['Pozniaky', 'Позняки'], ['Osokorky', 'Осокорки'], ['Kharkivskyi', 'Харківський масив', 'Харьковский массив'],
|
|
210
|
+
['Troyeshchyna', 'Троєщина', 'Троещина'], ['Vynohradar', 'Виноградар'], ['Obolon', 'Оболонь'], ['Teremky', 'Теремки'],
|
|
211
|
+
['Holosiiv', 'Голосіїв', 'Голосеево'], ['Solomianka', 'Солом’янка', 'Соломенка'], ['Lukianivka', 'Лук’янівка', 'Лукьяновка'],
|
|
212
|
+
['Nyvky', 'Нивки'], ['Sviatoshyn', 'Святошин'], ['Borshchahivka', 'Борщагівка', 'Борщаговка'], ['Pechersk', 'Печерськ', 'Печерск'], ['Podil', 'Поділ', 'Подол'],
|
|
213
|
+
]),
|
|
214
|
+
metro: entries([
|
|
215
|
+
['Khreshchatyk', 'Хрещатик', 'Крещатик'], ['Maidan Nezalezhnosti', 'Майдан Незалежності', 'Площадь Независимости'],
|
|
216
|
+
['Zoloti Vorota', 'Золоті ворота', 'Золотые ворота'], ['Universytet', 'Університет', 'Университет'], ['Vokzalna', 'Вокзальна', 'Вокзальная'],
|
|
217
|
+
['Osokorky', 'Осокорки'], ['Pozniaky', 'Позняки'], ['Livoberezhna', 'Лівобережна', 'Левобережная'], ['Lukianivska', 'Лук’янівська', 'Лукьяновская'],
|
|
218
|
+
['Palats Ukraina', 'Палац Україна', 'Дворец Украина'], ['Olimpiiska', 'Олімпійська', 'Олимпийская'], ['Pecherska', 'Печерська', 'Печерская'],
|
|
219
|
+
]),
|
|
220
|
+
residentialComplexes: entries([
|
|
221
|
+
['Respublika', 'Республіка ЖК', 'Республика ЖК'], ['Fayna Town', 'Файна Таун'], ['UNIT.Home', 'Юнит Хоум'], ['Rybalsky', 'Рибальський', 'Рыбальский'],
|
|
222
|
+
['Tetris Hall', 'Тетрис Холл'], ['French Quarter 2', 'Французький квартал 2', 'Французский квартал 2'],
|
|
223
|
+
['Novopecherski Lypky', 'Новопечерські Липки', 'Новопечерские Липки'], ['Great', 'ЖК Great'], ['Seven', 'ЖК Seven'],
|
|
224
|
+
['Comfort Town', 'Комфорт Таун'], ['Warszawski Plus', 'Варшавський Плюс', 'Варшавский Плюс'], ['Creator City', 'Креатор Сіті'],
|
|
225
|
+
]),
|
|
226
|
+
streets: entries([
|
|
227
|
+
['Khreshchatyk Street', 'вулиця Хрещатик', 'улица Крещатик'], ['Velyka Vasylkivska Street', 'Велика Васильківська', 'Большая Васильковская', 'Червоноармійська'],
|
|
228
|
+
['Beresteiskyi Avenue', 'Берестейський проспект', 'проспект Берестейский', 'проспект Перемоги', 'проспект Победы'],
|
|
229
|
+
['Lesi Ukrainky Boulevard', 'бульвар Лесі Українки', 'бульвар Леси Украинки'], ['Saksahanskoho Street', 'вулиця Саксаганського', 'улица Саксаганского'],
|
|
230
|
+
['Antonovycha Street', 'вулиця Антоновича', 'улица Антоновича', 'Горького'], ['Dniprovska Naberezhna', 'Дніпровська набережна', 'Днепровская набережная'],
|
|
231
|
+
['Mykoly Bazhana Avenue', 'проспект Миколи Бажана', 'проспект Николая Бажана'], ['Hlybochytska Street', 'вулиця Глибочицька', 'улица Глубочицкая'],
|
|
232
|
+
]),
|
|
233
|
+
landmarks: entries([
|
|
234
|
+
['Maidan Nezalezhnosti', 'Майдан Незалежності', 'Площадь Независимости'], ['Kyiv-Pechersk Lavra', 'Києво-Печерська лавра', 'Киево-Печерская лавра'],
|
|
235
|
+
['Golden Gate', 'Золоті ворота', 'Золотые ворота'], ['Olimpiyskiy Stadium', 'НСК Олімпійський', 'НСК Олимпийский'],
|
|
236
|
+
['Andriyivskyy Descent', 'Андріївський узвіз', 'Андреевский спуск'], ['Kyiv Central Railway Station', 'Центральний вокзал Київ', 'Киевский вокзал'],
|
|
237
|
+
]),
|
|
238
|
+
}),
|
|
239
|
+
Kharkiv: Object.freeze({
|
|
240
|
+
districts: entries([
|
|
241
|
+
['Shevchenkivskyi', 'Шевченківський район', 'Шевченковский район'], ['Kyivskyi', 'Київський район', 'Киевский район'],
|
|
242
|
+
['Saltivskyi', 'Салтівський район', 'Салтовский район'], ['Nemyshlianskyi', 'Немишлянський район', 'Немышлянский район'],
|
|
243
|
+
['Industrialnyi', 'Індустріальний район', 'Индустриальный район'], ['Slobidskyi', 'Слобідський район', 'Слободской район'],
|
|
244
|
+
['Osnovianskyi', 'Основ’янський район', 'Основянский район'], ['Novobavarskyi', 'Новобаварський район', 'Новобаварский район'],
|
|
245
|
+
['Kholodnohirskyi', 'Холодногірський район', 'Холодногорский район'],
|
|
246
|
+
]),
|
|
247
|
+
microdistricts: entries([
|
|
248
|
+
['Saltivka', 'Салтівка', 'Салтовка'], ['Oleksiivka', 'Олексіївка', 'Алексеевка'], ['Pavlove Pole', 'Павлове Поле', 'Павлово Поле'],
|
|
249
|
+
['Kholodna Hora', 'Холодна Гора', 'Холодная Гора'], ['HTZ', 'ХТЗ'], ['Nova Bavariia', 'Нова Баварія', 'Новая Бавария'],
|
|
250
|
+
['Zhykhar', 'Жихор'], ['Odeska', 'Одеська', 'Одесская'], ['Rohan', 'Рогань'], ['Horizont', 'Горизонт'],
|
|
251
|
+
]),
|
|
252
|
+
metro: entries([
|
|
253
|
+
['Kholodna Hora', 'Холодна гора', 'Холодная гора'], ['Vokzalna', 'Вокзальна', 'Південний вокзал', 'Южный вокзал'],
|
|
254
|
+
['Tsentralnyi Rynok', 'Центральний ринок', 'Центральный рынок'], ['Maidan Konstytutsii', 'Майдан Конституції', 'Площадь Конституции'],
|
|
255
|
+
['Sportyvna', 'Спортивна'], ['Zavod imeni Malysheva', 'Завод імені Малишева', 'Завод имени Малышева'], ['Turboatom', 'Турбоатом'],
|
|
256
|
+
['Palats Sportu', 'Палац Спорту', 'Дворец Спорта'], ['Studentska', 'Студентська', 'Студенческая'], ['Heroiv Pratsi', 'Героїв Праці', 'Героев Труда'],
|
|
257
|
+
['Peremoha', 'Перемога', 'Победа'], ['Oleksiivska', 'Олексіївська', 'Алексеевская'], ['Naukova', 'Наукова', 'Научная'],
|
|
258
|
+
['Derzhprom', 'Держпром'], ['Arkhitektora Beketova', 'Архітектора Бекетова', 'Архитектора Бекетова'],
|
|
259
|
+
]),
|
|
260
|
+
residentialComplexes: entries([
|
|
261
|
+
['Manhattan', 'ЖК Манхеттен'], ['River Town', 'Ривер Таун'], ['Hydropark', 'ЖК Гідропарк', 'ЖК Гидропарк'],
|
|
262
|
+
['Sokolnyky', 'ЖК Сокільники', 'ЖК Сокольники'], ['Pavlovsky Kvartal', 'Павлівський квартал', 'Павловский квартал'],
|
|
263
|
+
['Levada', 'ЖК Левада'], ['Mira', 'ЖК Миру', 'ЖК Мира'], ['Nimeckyi Proekt', 'Німецький проект', 'Немецкий проект'],
|
|
264
|
+
]),
|
|
265
|
+
streets: entries([
|
|
266
|
+
['Sumska Street', 'вулиця Сумська', 'улица Сумская'], ['Nauky Avenue', 'проспект Науки'],
|
|
267
|
+
['Heroiv Kharkova Avenue', 'проспект Героїв Харкова', 'проспект Героев Харькова', 'Московський проспект', 'Московский проспект'],
|
|
268
|
+
['Saltivske Highway', 'Салтівське шосе', 'Салтовское шоссе'], ['Poltavskyi Shliakh Street', 'Полтавський Шлях', 'Полтавский Шлях'],
|
|
269
|
+
['Klochkivska Street', 'вулиця Клочківська', 'улица Клочковская'],
|
|
270
|
+
]),
|
|
271
|
+
landmarks: entries([
|
|
272
|
+
['Freedom Square', 'майдан Свободи', 'площадь Свободы'], ['Derzhprom', 'Держпром', 'Госпром'], ['Barabashovo Market', 'Барабашово', 'ринок Барабашово'],
|
|
273
|
+
['Kharkiv-Pasazhyrskyi Station', 'Харків-Пасажирський', 'Харьков-Пассажирский', 'Південний вокзал', 'Южный вокзал'],
|
|
274
|
+
]),
|
|
275
|
+
}),
|
|
276
|
+
Odesa: Object.freeze({
|
|
277
|
+
microdistricts: entries([
|
|
278
|
+
['Arkadia', 'Аркадія', 'Аркадия'], ['Moldavanka', 'Молдаванка'], ['Tairova', 'Таїрова', 'Таирова'], ['Cheryomushky', 'Черемушки'],
|
|
279
|
+
['Fontan', 'Фонтан'], ['Luzanivka', 'Лузанівка', 'Лузановка'], ['Peresyp', 'Пересип', 'Пересыпь'], ['Slobidka', 'Слобідка', 'Слободка'],
|
|
280
|
+
['Kotivskoho', 'селище Котовського', 'поселок Котовского'],
|
|
281
|
+
]),
|
|
282
|
+
residentialComplexes: entries([
|
|
283
|
+
['Kadorr City', 'Кадорр Сіті', 'Кадорр Сити'], ['44 Pearl', '44 Жемчужина', '44 Перлина'], ['51 Pearl', '51 Жемчужина', '51 Перлина'],
|
|
284
|
+
['Elegia Park', 'Елегія Парк', 'Элегия Парк'], ['Sea View', 'Сі Вью', 'Си Вью'], ['Unity Towers', 'Юніті Тауерс', 'Юнити Тауэрс'],
|
|
285
|
+
['Gagarin Plaza', 'Гагарін Плаза', 'Гагарин Плаза'], ['Otrada Sky', 'Отрада Скай'],
|
|
286
|
+
]),
|
|
287
|
+
streets: entries([
|
|
288
|
+
['Derybasivska Street', 'вулиця Дерибасівська', 'улица Дерибасовская'], ['Hretska Street', 'вулиця Грецька', 'улица Греческая'],
|
|
289
|
+
['Kanatna Street', 'вулиця Канатна', 'улица Канатная'], ['Frantsuzky Boulevard', 'Французький бульвар', 'Французский бульвар'],
|
|
290
|
+
['Velyka Arnautska Street', 'Велика Арнаутська', 'Большая Арнаутская'], ['Panteleimonivska Street', 'Пантелеймонівська', 'Пантелеймоновская'],
|
|
291
|
+
['Fontanska Road', 'Фонтанська дорога', 'Фонтанская дорога'], ['Liustdorfska Road', 'Люстдорфська дорога', 'Люстдорфская дорога'],
|
|
292
|
+
]),
|
|
293
|
+
landmarks: entries([
|
|
294
|
+
['Arcadia', 'Аркадія', 'Аркадия'], ['Prymorskyi Boulevard', 'Приморський бульвар', 'Приморский бульвар'],
|
|
295
|
+
['Pryvoz Market', 'ринок Привоз', 'рынок Привоз'], ['Odesa Railway Station', 'Одеський вокзал', 'Одесский вокзал'],
|
|
296
|
+
]),
|
|
297
|
+
}),
|
|
298
|
+
Dnipro: Object.freeze({
|
|
299
|
+
microdistricts: entries([
|
|
300
|
+
['Peremoha', 'Перемога', 'Победа'], ['Topolia', 'Тополя'], ['Sokil', 'Сокіл', 'Сокол'], ['Parus', 'Парус'],
|
|
301
|
+
['Pokrovskyi', 'Покровський', 'Комунар', 'Коммунар'], ['Livoberezhnyi', 'Лівобережний', 'Левобережный'],
|
|
302
|
+
['Soniachnyi', 'Сонячний', 'Солнечный'], ['Kalinovskyi', 'Калиновський', 'Калиновский'], ['Pivnichnyi', 'Північний', 'Северный'],
|
|
303
|
+
]),
|
|
304
|
+
residentialComplexes: entries([
|
|
305
|
+
['Bartolomeo Resort Town', 'Бартоломео'], ['River Park', 'Рівер Парк', 'Ривер Парк'], ['Felicita', 'Феліціта', 'Феличита'],
|
|
306
|
+
['Geneva', 'Женева ЖК'], ['Mayak', 'ЖК Маяк'], ['Manhattan', 'Манхеттен Дніпро', 'Манхеттен Днепр'], ['Salyut', 'ЖК Салют'],
|
|
307
|
+
]),
|
|
308
|
+
streets: entries([
|
|
309
|
+
['Dmytra Yavornytskoho Avenue', 'проспект Дмитра Яворницького', 'проспект Дмитрия Яворницкого', 'проспект Карла Маркса'],
|
|
310
|
+
['Naberezhna Peremohy', 'Набережна Перемоги', 'Набережная Победы'], ['Oleksandra Polia Avenue', 'проспект Олександра Поля', 'проспект Александра Поля'],
|
|
311
|
+
['Slobozhanskyi Avenue', 'Слобожанський проспект', 'Слобожанский проспект', 'Правди проспект'],
|
|
312
|
+
]),
|
|
313
|
+
landmarks: entries([['Most City', 'Мост-Сіті', 'Мост-Сити'], ['Dnipro Railway Station', 'Дніпро-Головний', 'Днепр-Главный'], ['Menorah Center', 'Менора']]),
|
|
314
|
+
}),
|
|
315
|
+
Lviv: Object.freeze({
|
|
316
|
+
microdistricts: entries([
|
|
317
|
+
['Sykhiv', 'Сихів', 'Сихов'], ['Levandivka', 'Левандівка', 'Левандовка'], ['Riasne', 'Рясне'], ['Pidzamche', 'Підзамче', 'Подзамче'],
|
|
318
|
+
['Holosko', 'Голоско'], ['Pasichna', 'Пасічна', 'Пасечная'], ['Pohulianka', 'Погулянка'], ['Znesinnia', 'Знесіння', 'Знесенье'], ['Klepariv', 'Клепарів', 'Клепаров'],
|
|
319
|
+
]),
|
|
320
|
+
residentialComplexes: entries([
|
|
321
|
+
['Great Britain', 'ЖК Велика Британія', 'Велика Британія'], ['Avalon Yard', 'Авалон Ярд'], ['Avalon Flex', 'Авалон Флекс'],
|
|
322
|
+
['Semitsvit', 'Семицвіт', 'Семицвет'], ['Parus City', 'Парус Сіті', 'Парус Сити'], ['Viking Park', 'Вікінг Парк', 'Викинг Парк'],
|
|
323
|
+
['Misto Trav', 'Місто Трав', 'Город Трав'], ['Washington City', 'Вашингтон Сіті'],
|
|
324
|
+
]),
|
|
325
|
+
streets: entries([
|
|
326
|
+
['Svobody Avenue', 'проспект Свободи', 'проспект Свободы'], ['Horodotska Street', 'вулиця Городоцька', 'улица Городоцкая'],
|
|
327
|
+
['Shevchenka Street', 'вулиця Шевченка', 'улица Шевченко'], ['Stryiska Street', 'вулиця Стрийська', 'улица Стрыйская'],
|
|
328
|
+
['Lychakivska Street', 'вулиця Личаківська', 'улица Лычаковская'], ['Zelena Street', 'вулиця Зелена', 'улица Зеленая'],
|
|
329
|
+
['Kulparkivska Street', 'вулиця Кульпарківська', 'улица Кульпарковская'],
|
|
330
|
+
]),
|
|
331
|
+
landmarks: entries([
|
|
332
|
+
['Rynok Square', 'площа Ринок', 'площадь Рынок'], ['Lviv Opera', 'Львівська опера', 'Львовская опера'], ['Lviv Railway Station', 'Головний залізничний вокзал Львів', 'Львовский вокзал'],
|
|
333
|
+
]),
|
|
334
|
+
}),
|
|
335
|
+
}),
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
// Ukraine-wide extension retained as a separate export for compatibility while
|
|
339
|
+
// sharing the same entry constructor and regex behavior.
|
|
340
|
+
export const UA_EXTRA_LOCATION_DICTIONARIES = Object.freeze({
|
|
341
|
+
Zaporizhzhia: Object.freeze({
|
|
342
|
+
districts: entries([
|
|
343
|
+
['Oleksandrivskyi','Олександрівський район','Александровский район'],['Zavodskyi','Заводський район','Заводской район'],
|
|
344
|
+
['Komunarskyi','Комунарський район','Коммунарский район'],['Dniprovskyi','Дніпровський район','Днепровский район'],
|
|
345
|
+
['Voznesenivskyi','Вознесенівський район','Вознесеновский район'],['Khortytskyi','Хортицький район','Хортицкий район'],['Shevchenkivskyi','Шевченківський район','Шевченковский район'],
|
|
346
|
+
]),
|
|
347
|
+
microdistricts: entries([
|
|
348
|
+
['Khortytsia','Хортиця','Хортица'],['Baburka','Бабурка'],['Borodynskyi','Бородинський','Бородинский'],['Osypenkivskyi','Осипенківський','Осипенковский'],
|
|
349
|
+
['Pivdennyi','Південний','Южный'],['Kosmichnyi','Космічний','Космический'],['Shevchenkivskyi','Шевченківський','Шевченковский'],
|
|
350
|
+
]),
|
|
351
|
+
residentialComplexes: entries([['River Hall','Рівер Холл','Ривер Холл'],['Aleksandrovsky 1','Олександрівський 1','Александровский 1'],['Comfort City','Комфорт Сіті','Комфорт Сити'],['Borodino','ЖК Бородіно','ЖК Бородино']]),
|
|
352
|
+
}),
|
|
353
|
+
Vinnytsia: Object.freeze({
|
|
354
|
+
microdistricts: entries([['Vyshenka','Вишенька'],['Podillia','Поділля','Подолье'],['Slovianska','Слов’янка','Славянка'],['Zamostia','Замостя'],['Tyazhyliv','Тяжилів','Тяжилов'],['Stare Misto','Старе місто','Старый город'],['Akademichnyi','Академічний','Академический'],['Piatnychany','П’ятничани','Пятничаны']]),
|
|
355
|
+
residentialComplexes: entries([['Turkish City','Турецьке містечко','Турецкий городок'],['Premier Tower','Прем’єр Тауер','Премьер Тауэр'],['Family House','Фемілі Хаус','Family House Vinnytsia'],['Podillia City','Поділля Сіті','Подолье Сити'],['Andorra','ЖК Андорра']]),
|
|
356
|
+
}),
|
|
357
|
+
'Ivano-Frankivsk': Object.freeze({
|
|
358
|
+
microdistricts: entries([['Pasichna','Пасічна','Пасечная'],['BAM','БАМ'],['Kaskad','Каскад'],['Pozitron','Позитрон'],['Knyahynyn','Княгинин'],['Vovchynets','Вовчинець','Вовчинец'],['Hirka','Гірка','Горка'],['Tsentr','Центр']]),
|
|
359
|
+
residentialComplexes: entries([['Manhattan UP','Манхеттен UP'],['Main House','Мейн Хаус'],['Parus','ЖК Парус'],['Family Plaza','Фемілі Плаза'],['Central Park','Централ Парк'],['Millennium','Міленіум','Миллениум'],['Knyahynyn','ЖК Княгинин']]),
|
|
360
|
+
}),
|
|
361
|
+
Chernivtsi: Object.freeze({
|
|
362
|
+
microdistricts: entries([['Prospekt','Проспект'],['Komarova','Комарова'],['Hraviton','Гравітон','Гравитон'],['Sadgora','Садгора'],['Roscha','Роша'],['Kalynivskyi Rynok','Калинівський ринок','Калиновский рынок'],['Tsentr','Центр']]),
|
|
363
|
+
residentialComplexes: entries([['Vodohrai','Водограй'],['Comfort Hall','Комфорт Холл'],['Family House','Фемілі Хаус Чернівці','Family House Chernivtsi'],['City Park','Сіті Парк','Сити Парк'],['Compass','Компас']]),
|
|
364
|
+
}),
|
|
365
|
+
Uzhhorod: Object.freeze({
|
|
366
|
+
microdistricts: entries([['Bozdosh','Боздош'],['Novyi Raion','Новий район','Новый район'],['Shakhta','Шахта'],['Radanka','Радванка'],['Domanyntsi','Доманиці','Доманицы'],['Tsentr','Центр']]),
|
|
367
|
+
residentialComplexes: entries([['Park Land','Парк Ленд'],['Crystal','Крістал','Кристал'],['Sherwood','Шервуд'],['Green Land','Грін Ленд','Грин Ленд'],['Resident','Резидент'],['Bavaria','Баварія','Бавария']]),
|
|
368
|
+
}),
|
|
369
|
+
Mukachevo: Object.freeze({ microdistricts: entries([['Rosvyhovo','Росвигово'],['Pidhoriany','Підгоряни','Подгоряны'],['Palanka','Паланок'],['Tsentr','Центр']]), residentialComplexes: entries([['Central Park Mukachevo','Централ Парк Мукачево'],['Dream City','Дрім Сіті','Дрим Сити'],['Green Yard','Грін Ярд','Грин Ярд']]) }),
|
|
370
|
+
Lutsk: Object.freeze({ microdistricts: entries([['33rd District','33 мікрорайон','33 микрорайон'],['40th District','40 мікрорайон','40 микрорайон'],['55th District','55 мікрорайон','55 микрорайон'],['Teremnivskyi','Теремнівський','Теремновский'],['Hnidava','Гнідава','Гнидава'],['Kichkarivka','Кічкарівка','Кичкаревка'],['Vyshkiv','Вишків','Вышков']]), residentialComplexes: entries([['Caramel Residence','Карамель Резиденс'],['Dream Town','Дрім Таун','Дрим Таун'],['Style Up','Стайл Ап'],['Oselya Park','Оселя Парк'],['Supernova','Супернова']]) }),
|
|
371
|
+
Rivne: Object.freeze({ microdistricts: entries([['Pivnichnyi','Північний','Северный'],['Yuvileinyi','Ювілейний','Юбилейный'],['Boyarka','Боярка'],['Basiv Kut','Басів Кут','Басов Кут'],['Shchaslyve','Щасливе','Счастливое'],['Tsentr','Центр']]), residentialComplexes: entries([['Shchaslyve','ЖК Щасливе','ЖК Счастливое'],['Spectrum','Спектрум'],['Pokrovskyi','Покровський','Покровский'],['Riverside','Ріверсайд','Риверсайд'],['Family City','Фемілі Сіті','Фемили Сити']]) }),
|
|
372
|
+
Ternopil: Object.freeze({ microdistricts: entries([['BAM','БАМ'],['Druzhba','Дружба'],['Skhidnyi','Східний','Восточный'],['Kanada','Канада'],['Alaska','Аляска'],['Novyi Svit','Новий Світ','Новый Свет'],['Kutkivtsi','Кутківці','Кутковцы'],['Tsentr','Центр']]), residentialComplexes: entries([['Manhattan','Манхеттен Тернопіль','Манхеттен Тернополь'],['Varshavskyi','Варшавський','Варшавский'],['Panorama','Панорама'],['Beverly Hills','Беверлі Хіллз','Беверли Хиллз'],['Krona Park','Крона Парк']]) }),
|
|
373
|
+
Khmelnytskyi: Object.freeze({ microdistricts: entries([['Ozerna','Озерна'],['Vystavka','Виставка'],['Pivdennyi-Zakhid','Південно-Західний','Юго-Западный'],['Rakove','Ракове'],['Hrechany','Гречани'],['Dubove','Дубове'],['Lezneve','Лезневе'],['Tsentr','Центр']]), residentialComplexes: entries([['Urban House','Урбан Хаус'],['Dream Park','Дрім Парк','Дрим Парк'],['Avila','Авіла','Авила'],['Harmony Garden','Гармоні Гарден'],['Spring Town','Спрінг Таун','Спринг Таун']]) }),
|
|
374
|
+
Zhytomyr: Object.freeze({ microdistricts: entries([['Korbutivka','Корбутівка','Корбутовка'],['Polova','Польова','Полевая'],['Kroshnia','Крошня'],['Bohuniia','Богунія','Богуния'],['Malovanka','Мальованка','Малеванка'],['Smolianka','Смолянка'],['Tsentr','Центр']]), residentialComplexes: entries([['Grand City Dombrovskyi','Гранд Сіті Домбровський','Гранд Сити Домбровский'],['Domashnii 2','Домашній 2','Домашний 2'],['River City','Рівер Сіті','Ривер Сити'],['Premiere Hall','Прем’єр Холл','Премьер Холл']]) }),
|
|
375
|
+
Cherkasy: Object.freeze({ microdistricts: entries([['Mytnytsia','Митниця'],['Pivdenno-Zakhidnyi','Південно-Західний','Юго-Западный'],['Kazbet','Казбет'],['Khimpaselyshche','Хімселище','Химпоселок'],['D','Мікрорайон Д','Микрорайон Д'],['Tsentr','Центр']]), residentialComplexes: entries([['Andorra','Андорра Черкаси','Андорра Черкассы'],['Symfonia','Симфонія','Симфония'],['City Park Cherkasy','Сіті Парк Черкаси','Сити Парк Черкассы'],['Pershyi Parkovyi','Перший Парковий','Первый Парковый']]) }),
|
|
376
|
+
Poltava: Object.freeze({ microdistricts: entries([['Almaznyi','Алмазний','Алмазный'],['Levada','Левада'],['Polovky','Половки'],['Brailky','Браїлки','Браилки'],['Ohnivka','Огнівка','Огневка'],['Podil','Поділ','Подол'],['Dublianshchyna','Дублянщина'],['Tsentr','Центр']]), residentialComplexes: entries([['City Park Poltava','Сіті Парк Полтава','Сити Парк Полтава'],['Petrivskyi Kvartal','Петрівський квартал','Петровский квартал'],['Standard','Стандарт ЖК'],['European','Європейський','Европейский'],['Family Park','Фемілі Парк','Фемили Парк']]) }),
|
|
377
|
+
Chernihiv: Object.freeze({ microdistricts: entries([['Masany','Масани'],['Rokossovskoho','Рокоссовського','Рокоссовского'],['Sherstianka','Шерстянка'],['Bobrovytsia','Бобровиця'],['Podusivka','Подусівка','Подусовка'],['ZAZ','ЗАЗ'],['Tsentr','Центр']]), residentialComplexes: entries([['Forest','Форест Чернігів','Форест Чернигов'],['Art House','Арт Хаус'],['Kyevske','Київське','Киевское'],['Rich Town','Річ Таун','Рич Таун'],['Parus','Парус Чернігів','Парус Чернигов']]) }),
|
|
378
|
+
Sumy: Object.freeze({ microdistricts: entries([['Kharkivska','Харківська','Харьковская'],['Prokofieve','Прокоф’єва','Прокофьева'],['Zarichnyi','Зарічний','Заречный'],['Kurskyi','Курський','Курский'],['Romenska','Роменська','Роменская'],['Khimhorodok','Хіммістечко','Химгородок'],['Tsentr','Центр']]), residentialComplexes: entries([['Premier','Прем’єр Суми','Премьер Сумы'],['Eurodom','Євродім','Евродом'],['Panorama','Панорама Суми','Панорама Сумы']]) }),
|
|
379
|
+
Mykolaiv: Object.freeze({ districts: entries([['Tsentralnyi','Центральний район','Центральный район'],['Zavodskyi','Заводський район','Заводской район'],['Inhulskyi','Інгульський район','Ингульский район'],['Korabelnyi','Корабельний район','Корабельный район']]), microdistricts: entries([['Namiv','Намив','Намыв'],['Pivnichnyi','Північний','Северный'],['Soliani','Соляні','Соляные'],['Raketne Urochyshche','Ракетне Урочище','Ракетное Урочище'],['Tsentr','Центр']]) }),
|
|
380
|
+
Kropyvnytskyi: Object.freeze({ microdistricts: entries([['Kovalivka','Ковалівка','Ковалевка'],['Balashivka','Балашівка','Балашовка'],['Nova Balashivka','Нова Балашівка','Новая Балашовка'],['Cheremushky','Черемушки'],['Hirnychyi','Гірничий','Горняцкий'],['Ozernyi','Озерний','Озерный'],['Tsentr','Центр']]) }),
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
export const UA_REGION_ENTRIES = lexiconEntries(UA_REGION_LEXICON);
|
|
384
|
+
|
|
385
|
+
export const UA_SECONDARY_CITIES = Object.freeze({
|
|
386
|
+
Irpin: { aliases: ['Ірпінь','Ирпень','Irpin'], microdistricts: entries([['Central','Центр'],['Rich Town area','Річ Таун','Рич Таун'],['Synergia area','Синергія','Синергия']]) },
|
|
387
|
+
Bucha: { aliases: ['Буча','Bucha'], microdistricts: entries([['Central','Центр'],['Lisova Bucha','Лісова Буча','Лесная Буча']]) },
|
|
388
|
+
Brovary: { aliases: ['Бровари','Бровары','Brovary'], microdistricts: entries([['Massyv','Масив','Массив'],['Torhmash','Торгмаш']]) },
|
|
389
|
+
Vyshhorod: { aliases: ['Вишгород','Вышгород','Vyshhorod'] },
|
|
390
|
+
'Bila Tserkva': { aliases: ['Біла Церква','Белая Церковь','Bila Tserkva'] },
|
|
391
|
+
Boryspil: { aliases: ['Бориспіль','Борисполь','Boryspil'] },
|
|
392
|
+
Izmail: { aliases: ['Ізмаїл','Измаил','Izmail'] },
|
|
393
|
+
Chornomorsk: { aliases: ['Чорноморськ','Черноморск','Chornomorsk','Іллічівськ','Ильичевск','Illichivsk'] },
|
|
394
|
+
Mukachevo: { aliases: ['Мукачево','Мукачеве','Mukachevo','Mukacheve'] },
|
|
395
|
+
Truskavets: { aliases: ['Трускавець','Трускавец','Truskavets'] },
|
|
396
|
+
Drohobych: { aliases: ['Дрогобич','Дрогобыч','Drohobych'] },
|
|
397
|
+
KryvyiRih: { aliases: ['Кривий Ріг','Кривой Рог','Kryvyi Rih','Krivoy Rog'] },
|
|
398
|
+
Kremenchuk: { aliases: ['Кременчук','Кременчуг','Kremenchuk'] },
|
|
399
|
+
Uman: { aliases: ['Умань','Uman'] },
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
for (const data of Object.values(UA_SECONDARY_CITIES)) {
|
|
403
|
+
data.re = aliasesToRegex(data.aliases || []);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
export function matchUkraineRegion(text) {
|
|
407
|
+
return UA_REGION_ENTRIES.find((entry) => entry.re.test(String(text || ''))) || null;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
export function matchUkraineSecondaryCity(text) {
|
|
411
|
+
for (const [city, data] of Object.entries(UA_SECONDARY_CITIES)) {
|
|
412
|
+
if (data.re.test(String(text || ''))) return { city, ...data };
|
|
413
|
+
}
|
|
414
|
+
return null;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
export function dictionaryFor(countryCode, city) {
|
|
418
|
+
if (countryCode === 'UA' && UA_EXTRA_LOCATION_DICTIONARIES[city]) {
|
|
419
|
+
return { ...UA_EXTRA_LOCATION_DICTIONARIES[city], ...(LOCATION_DICTIONARIES.UA?.[city] || {}) };
|
|
420
|
+
}
|
|
421
|
+
return LOCATION_DICTIONARIES[countryCode]?.[city] || null;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
export function locationCities(countryCode) {
|
|
425
|
+
if (countryCode !== 'UA') return LOCATION_DICTIONARIES[countryCode] || {};
|
|
426
|
+
const legacy = { ...UA_EXTRA_LOCATION_DICTIONARIES, ...(LOCATION_DICTIONARIES.UA || {}) };
|
|
427
|
+
const names = [...new Set([
|
|
428
|
+
...Object.keys(legacy),
|
|
429
|
+
...Object.keys(UA_MAJOR_LOCATION_EXTENSIONS),
|
|
430
|
+
...Object.keys(UA_REGIONAL_LOCATION_EXTENSIONS),
|
|
431
|
+
...Object.keys(UA_SECONDARY_LOCATION_EXTENSIONS),
|
|
432
|
+
...Object.keys(UA_METRO_LOCATION_EXTENSIONS),
|
|
433
|
+
])];
|
|
434
|
+
return Object.freeze(Object.fromEntries(names.map((city) => [
|
|
435
|
+
city,
|
|
436
|
+
mergeLocationCityDictionaries(
|
|
437
|
+
legacy[city],
|
|
438
|
+
UA_MAJOR_LOCATION_EXTENSIONS[city],
|
|
439
|
+
UA_REGIONAL_LOCATION_EXTENSIONS[city],
|
|
440
|
+
UA_SECONDARY_LOCATION_EXTENSIONS[city],
|
|
441
|
+
UA_METRO_LOCATION_EXTENSIONS[city],
|
|
442
|
+
),
|
|
443
|
+
])));
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
export function matchDictionaryLocation(text, countryCode, city = null) {
|
|
447
|
+
const country = locationCities(countryCode);
|
|
448
|
+
const cities = city && country[city] ? [[city, country[city]]] : Object.entries(country);
|
|
449
|
+
for (const [cityName, data] of cities) {
|
|
450
|
+
for (const type of ['districts', 'microdistricts', 'residentialComplexes', 'metro', 'streets', 'landmarks']) {
|
|
451
|
+
const match = (data[type] || []).find((entry) => entry.re.test(String(text || '')));
|
|
452
|
+
if (match) return { city: cityName, type, name: match.name, aliases: match.aliases };
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
return null;
|
|
456
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const MONEY_NUMBER_PATTERN: string;
|
|
2
|
+
export const MONEY_SCALE_PATTERN: string;
|
|
3
|
+
export const MONEY_RANGE_RE: RegExp;
|
|
4
|
+
export const MONEY_SINGLE_RE: RegExp;
|
|
5
|
+
export function parseNumericAmount(raw: unknown): number | null;
|
|
6
|
+
export function moneyScaleMultiplier(raw: unknown): number;
|
|
7
|
+
export function parseScaledAmount(raw: unknown, scale?: unknown): number | null;
|
|
8
|
+
export function moneyCurrencyCandidatesFromText(value: unknown): readonly string[];
|
|
9
|
+
export function moneyCurrencyFromText(value: unknown, fallbackCurrency?: string | null): string | null;
|
|
10
|
+
export function moneyCurrencyPattern(): string;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { aliasesOf, findCanonical } from './normalization.js';
|
|
2
|
+
import {
|
|
3
|
+
CURRENCY_SYMBOL_CANDIDATES,
|
|
4
|
+
CURRENCY_TERMS,
|
|
5
|
+
NUMBER_MULTIPLIERS,
|
|
6
|
+
} from './money-lexicon.js';
|
|
7
|
+
|
|
8
|
+
export const MONEY_NUMBER_PATTERN = '\\d{1,3}(?:[ \\u00a0.,]\\d{3})+|\\d+(?:[.,]\\d+)?';
|
|
9
|
+
export const MONEY_SCALE_PATTERN = 'k|к|тыс\\.?|тысяч(?:а|и)?|тис\\.?|thousand|ming|мың|m|м|млн\\.?|mln|million|миллион(?:ов)?|мільйон(?:ів)?|bn|млрд|mlrd|billion';
|
|
10
|
+
export const MONEY_RANGE_RE = new RegExp(`(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?\\s*(?:-|–|—|до|to|bis|dan\\s+gacha)\\s*(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?`, 'iu');
|
|
11
|
+
export const MONEY_SINGLE_RE = new RegExp(`(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?(?=$|[^\\p{L}\\p{N}_])`, 'giu');
|
|
12
|
+
|
|
13
|
+
export function parseNumericAmount(raw) {
|
|
14
|
+
let value = String(raw || '').replace(/\u00a0/g, ' ').trim();
|
|
15
|
+
if (!value) return null;
|
|
16
|
+
const grouped = /\d[ ,.]\d{3}(?:[ ,.]\d{3})*/.test(value);
|
|
17
|
+
if (grouped) value = value.replace(/[ ,.]/g, '');
|
|
18
|
+
else value = value.replace(/\s+/g, '').replace(',', '.');
|
|
19
|
+
const parsed = Number(value);
|
|
20
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function moneyScaleMultiplier(raw) {
|
|
24
|
+
if (!raw) return 1;
|
|
25
|
+
return findCanonical(raw, NUMBER_MULTIPLIERS)?.multiplier || 1;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function parseScaledAmount(raw, scale) {
|
|
29
|
+
const value = parseNumericAmount(raw);
|
|
30
|
+
return value == null ? null : value * moneyScaleMultiplier(scale);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function explicitCurrencyFromText(value) {
|
|
34
|
+
const text = String(value || '');
|
|
35
|
+
// Ambiguous glyphs are removed so they cannot hide an explicit ISO/name token.
|
|
36
|
+
const lexicalText = text.replace(/[$¥¥]/g, ' ');
|
|
37
|
+
return findCanonical(lexicalText, CURRENCY_TERMS, { partial: true })?.canonical || null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function moneyCurrencyCandidatesFromText(value) {
|
|
41
|
+
const text = String(value || '');
|
|
42
|
+
const candidates = [];
|
|
43
|
+
const add = (currency) => {
|
|
44
|
+
if (currency && !candidates.includes(currency)) candidates.push(currency);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
add(explicitCurrencyFromText(text));
|
|
48
|
+
|
|
49
|
+
for (const [symbol, currencies] of Object.entries(CURRENCY_SYMBOL_CANDIDATES)) {
|
|
50
|
+
if (!text.includes(symbol)) continue;
|
|
51
|
+
for (const currency of currencies) add(currency);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (!candidates.length) {
|
|
55
|
+
add(findCanonical(text, CURRENCY_TERMS, { partial: true })?.canonical);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return Object.freeze(candidates);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function moneyCurrencyFromText(value, fallbackCurrency = null) {
|
|
62
|
+
const explicit = explicitCurrencyFromText(value);
|
|
63
|
+
if (explicit) return explicit;
|
|
64
|
+
|
|
65
|
+
const candidates = moneyCurrencyCandidatesFromText(value);
|
|
66
|
+
if (!candidates.length) return fallbackCurrency;
|
|
67
|
+
const fallback = String(fallbackCurrency || '').trim().toUpperCase();
|
|
68
|
+
if (fallback && candidates.includes(fallback)) return fallback;
|
|
69
|
+
return candidates[0];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function escapeRegex(value) {
|
|
73
|
+
return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function moneyCurrencyPattern() {
|
|
77
|
+
return [...new Set(CURRENCY_TERMS.flatMap((entry) => [entry.canonical, ...aliasesOf(entry)]).filter(Boolean))]
|
|
78
|
+
.sort((a, b) => String(b).length - String(a).length)
|
|
79
|
+
.map(escapeRegex)
|
|
80
|
+
.join('|');
|
|
81
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const CURRENCY_TERMS: readonly import('../index.d.ts').LexiconEntity[];
|
|
2
|
+
export const CURRENCY_SYMBOL_CANDIDATES: Readonly<Record<string, readonly string[]>>;
|
|
3
|
+
export const SALARY_PERIODS: readonly import('../index.d.ts').LexiconEntity[];
|
|
4
|
+
export const SALARY_MODIFIERS: Readonly<Record<string, import('../index.d.ts').LexiconEntity>>;
|
|
5
|
+
export const NUMBER_MULTIPLIERS: readonly import('../index.d.ts').LexiconEntity[];
|