@whiteslove/parsing-lexicon 0.6.13 → 0.6.14
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 +1 -1
- package/src/geography-detection.js +13 -2
- package/src/geography.js +1 -1
- package/src/kg-bishkek-residential-extensions.js +15 -0
- package/src/kg-jalal-abad-location-extensions.js +36 -0
- package/src/kg-karakol-location-extensions.js +43 -0
- package/src/kg-location-extensions.js +4 -0
- package/src/kg-osh-location-extensions.js +38 -1
- package/src/kz-almaty-cleaned-residential-extensions.js +1 -0
- package/src/kz-city-residential-extensions.js +18 -0
- package/src/kz-kostanay-location-extensions.js +8 -0
- package/src/kz-microdistrict-extensions.js +16 -0
- package/src/kz-pavlodar-location-extensions.js +3 -0
- package/src/locations-runtime.js +31 -11
- package/src/uz-bukhara-location-extensions.js +5 -0
- package/src/uz-tashkent-context-extensions.js +3 -0
package/package.json
CHANGED
|
@@ -33,14 +33,25 @@ const COUNTRY_MATCHERS = COUNTRIES.map((item) => {
|
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
const US_STATE_RE = /\b[A-Z][A-Za-z.'-]+(?:\s+[A-Z][A-Za-z.'-]+){0,3}\s*,?\s+(?:AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY|DC)\b/;
|
|
36
|
-
const CITY_CONTEXT_RE = /(?:shahr(?:i)?|город(?:а|е|у|ом)?|city|viloyat(?:i)?|област\p{L}{0,4})/iu;
|
|
36
|
+
const CITY_CONTEXT_RE = /(?:shahr(?:i)?|шаар(?:ы|ында|ына|ынан)?|город(?:а|е|у|ом)?|city|viloyat(?:i)?|област\p{L}{0,4})/iu;
|
|
37
|
+
|
|
38
|
+
function matchedAliasNeedsContext(item, matchedText) {
|
|
39
|
+
if (item.contextRequired === true) return true;
|
|
40
|
+
const guarded = item.contextRequiredAliases || [];
|
|
41
|
+
if (!guarded.length) return false;
|
|
42
|
+
const matched = normalizeForMatch(matchedText);
|
|
43
|
+
return guarded.some((alias) => {
|
|
44
|
+
const normalized = normalizeForMatch(alias);
|
|
45
|
+
return normalized && (matched === normalized || matched.startsWith(normalized));
|
|
46
|
+
});
|
|
47
|
+
}
|
|
37
48
|
|
|
38
49
|
function cityTextMatch(text, matcher) {
|
|
39
50
|
const exact = text.match(matcher.exact);
|
|
40
51
|
const inflected = exact || !matcher.inflected ? null : text.match(matcher.inflected);
|
|
41
52
|
const match = exact || inflected;
|
|
42
53
|
if (!match) return null;
|
|
43
|
-
if (!matcher.item
|
|
54
|
+
if (!matchedAliasNeedsContext(matcher.item, match[0])) return match;
|
|
44
55
|
|
|
45
56
|
const start = match.index ?? 0;
|
|
46
57
|
const end = start + match[0].length;
|
package/src/geography.js
CHANGED
|
@@ -59,7 +59,7 @@ export const RO_CITIES = Object.freeze([...RO_CITIES_BASE, ...RO_CITY_EXTENSIONS
|
|
|
59
59
|
export const KG_CITIES = Object.freeze([
|
|
60
60
|
entity('Bishkek', { ky: ['Бишкек'], ru: ['Бишкек'], en: ['Bishkek'], kk: ['Бішкек'], uzLatn: ['Bishkek'] }, { country: 'KG', type: 'city' }),
|
|
61
61
|
entity('Osh', { ky: ['Ош'], ru: ['Ош'], en: ['Osh'], kk: ['Ош'], uzLatn: ['Osh'] }, { country: 'KG', type: 'city' }),
|
|
62
|
-
entity('
|
|
62
|
+
entity('Manas', { ky: ['Манас', 'Манас шаары', 'Жалал-Абад', 'Жалал Абад'], ru: ['Манас', 'город Манас', 'Джалал-Абад', 'Джалал Абад'], en: ['Manas', 'Manas city', 'Jalal-Abad', 'Jalalabad'] }, { country: 'KG', type: 'city', contextRequiredAliases: ['Manas', 'Манас'] }),
|
|
63
63
|
entity('Karakol', { ky: ['Каракол'], ru: ['Каракол', 'Пржевальск'], en: ['Karakol', 'Przhevalsk'], kk: ['Қаракөл'], uzLatn: ['Karakol'] }, { country: 'KG', type: 'city' }),
|
|
64
64
|
entity('Tokmok', { ky: ['Токмок'], ru: ['Токмок'], en: ['Tokmok'] }, { country: 'KG', type: 'city' }),
|
|
65
65
|
entity('Naryn', { ky: ['Нарын'], ru: ['Нарын'], en: ['Naryn'] }, { country: 'KG', type: 'city' }),
|
|
@@ -13,6 +13,21 @@ export const KG_BISHKEK_RESIDENTIAL_EXTENSIONS = Object.freeze({
|
|
|
13
13
|
['TIANSHAN-1', 'Tianshan-1', 'TIAN SHAN-1', 'Tian Shan 1', 'Тяньшань-1', 'Тянь-Шань-1', 'ЖК TIANSHAN-1', 'ЖК Тянь-Шань-1', 'TIANSHAN-1 турак жай комплекси'],
|
|
14
14
|
['Anka Tower', 'ANKA Tower', 'ANKA TOWER', 'Анка Тауэр', 'Анка Тауэр турак жай комплекси', 'ЖК Anka Tower', 'ЖК Анка Тауэр', 'Anka Tower турак жай комплекси'],
|
|
15
15
|
['УРПАК', 'Урпак', 'URPAK', 'Urpak', 'ЖК УРПАК', 'ЖК Урпак', 'жилой комплекс УРПАК', 'УРПАК турак жай комплекси', 'Urpak турак жай комплекси', 'Кут Урпак'],
|
|
16
|
+
['Французский квартал', 'ЖК Французский квартал', 'Французский Квартал', 'French Quarter', 'French quarter'],
|
|
17
|
+
['Аккула', 'ЖК Аккула', 'ЖК «Аккула»', 'Akkula'],
|
|
18
|
+
['Алтын Булак', 'ЖК Алтын Булак', 'ЖК «Алтын Булак»', 'Altyn Bulak'],
|
|
19
|
+
['Ботанический сад', 'ЖК Ботанический сад', 'ЖК «Ботанический сад»', 'Botanicheskiy Sad'],
|
|
20
|
+
['Флагман', 'ЖК Флагман', 'Жилой комплекс Флагман', 'Жилой комплекс "Флагман"', 'Flagman'],
|
|
21
|
+
['Хан-Теңири', 'Хан Теңири', 'Хан Тенгри', 'ЖК Хан-Теңири', 'ЖК "Хан-Теңири"', 'Khan Tengiri'],
|
|
22
|
+
['Кудайберген', 'ЖК Кудайберген', 'ЖК «Кудайберген»', 'Kudaybergen'],
|
|
23
|
+
['Панорама', 'ЖК Панорама', 'Жилой комплекс Панорама', 'Жилой Комплекс "Панорама"', 'Panorama'],
|
|
24
|
+
['Панорама 2', 'Панорама-2', 'ЖК Панорама 2', 'ЖК Панорама-2', 'Жилой комплекс "Панорама 2"', 'Panorama 2'],
|
|
25
|
+
['Сейтек', 'ЖК Сейтек', 'Жилой комплекс Сейтек', 'Seytek', 'Seitek'],
|
|
26
|
+
['Сымбат Classic', 'Сымбат Классик', 'ЖК Сымбат Classic', 'Жилой комплекс "Сымбат Classic"', 'Symbat Classic'],
|
|
27
|
+
['Тянь-Шань бермети', 'Тянь-Шань Бермети', 'ЖК Тянь-Шань бермети', 'ЖК «Тянь-Шань бермети»', 'Tyan-Shan Bermeti'],
|
|
28
|
+
['Южный', 'ЖК Южный', 'Жилой комплекс Южный', 'Жилой комплекс "Южный"', 'Yuzhny'],
|
|
29
|
+
['Легенда', 'ЖК Легенда', 'ЖК «Легенда»', 'Жилой комплекс Легенда', 'Legenda'],
|
|
30
|
+
['Meridian', 'MERIDIAN', 'Меридиан', 'ЖК Meridian', 'ЖК «Meridian»', 'Жилой комплекс Meridian'],
|
|
16
31
|
]),
|
|
17
32
|
}),
|
|
18
33
|
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { locationEntries } from './location-merge.js';
|
|
2
|
+
|
|
3
|
+
export const KG_JALAL_ABAD_LOCATION_EXTENSIONS = Object.freeze({
|
|
4
|
+
'Jalal-Abad': Object.freeze({
|
|
5
|
+
microdistricts: locationEntries([
|
|
6
|
+
['Микрорайон Курманбек', 'Курманбек микрорайон', 'мкр Курманбек'],
|
|
7
|
+
]),
|
|
8
|
+
residentialComplexes: locationEntries([
|
|
9
|
+
['Асман Резиденс 1', 'Асман Резиденс №1', 'ЖК Асман Резиденс 1', 'ЖК «Асман Резиденс 1»', 'ЖК «Асман Резиденс 1» (ГИК)'],
|
|
10
|
+
['Асман Резиденс 9', 'Асман Резиденс №9', 'ЖК Асман Резиденс 9', 'ЖК «Асман Резиденс 9»', 'ЖК «Асман Резиденс 9» (ГИК)'],
|
|
11
|
+
]),
|
|
12
|
+
streets: locationEntries([
|
|
13
|
+
['10-я улица Электорон'],
|
|
14
|
+
['2-я улица ПТФ'],
|
|
15
|
+
['5-я улица Электорон'],
|
|
16
|
+
['Абдукаимов көчөсү'],
|
|
17
|
+
['Улица Арстанбаева 1-я', 'Арстанбаева 1-я'],
|
|
18
|
+
['Улица Арстанбаева 2-я', 'Арстанбаева 2-я'],
|
|
19
|
+
['Барпы Рысбаев көчөсү'],
|
|
20
|
+
['Улица Чынгыза Айтматова 3 1-я', 'Чынгыза Айтматова 3 1-я'],
|
|
21
|
+
['Улица Чынгыза Айтматова 3 3-я', 'Чынгыза Айтматова 3 3-я'],
|
|
22
|
+
['Улица Чынгыза Айтматова 3 5-я', 'Чынгыза Айтматова 3 5-я'],
|
|
23
|
+
['Фабричная көчөсү'],
|
|
24
|
+
['Куренкеев көчөсү'],
|
|
25
|
+
['Улица Курортная', 'Курортная улица', 'ул. Курортная'],
|
|
26
|
+
['Лесная улица', 'улица Лесная', 'ул. Лесная', 'Лесной улице', 'на Лесной улице'],
|
|
27
|
+
['Островский көчөсү'],
|
|
28
|
+
['Проспект Тумонбая Байзакова', 'Тумонбая Байзакова проспект', 'Түмөнбай Байзаков проспекти', 'Түмөнбай Байзаков көчөсү (Москва)', 'проспекте Тумонбая Байзакова', 'на проспекте Тумонбая Байзакова'],
|
|
29
|
+
['Умаркулов Саке көчөсү'],
|
|
30
|
+
['Улица Жени-Жок', 'улица Жени жок', 'Жени-Жок көчөсү', 'улице Жени-Жок', 'на улице Жени-Жок'],
|
|
31
|
+
['Мурзакулов Урубай көчөсү'],
|
|
32
|
+
['Пролетар көчөсү'],
|
|
33
|
+
['Тоголок Молдо көчөсү'],
|
|
34
|
+
]),
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
@@ -4,6 +4,49 @@ export const KG_KARAKOL_LOCATION_EXTENSIONS = Object.freeze({
|
|
|
4
4
|
Karakol: Object.freeze({
|
|
5
5
|
microdistricts: locationEntries([
|
|
6
6
|
['Voshod', 'Восход', 'микрорайон Восход', 'мкр Восход', 'Восход микрорайон', 'Voshod microdistrict'],
|
|
7
|
+
['Кашка-Суу', 'Кашка Суу', 'Kashka-Suu', 'Kashka Suu', 'микрорайон Кашка-Суу', 'мкр Кашка-Суу', 'Кашка-Суу м-н'],
|
|
8
|
+
['Хан-Теңири', 'Хан Теңири', 'Хан-Тенгри', 'Хан Тенгри', 'Khan-Tengri', 'Khan Tengri', 'Khan Tengiri', 'микрорайон Хан-Теңири', 'микрорайон Хан-Тенгри', 'мкр Хан-Теңири', 'мкр Хан-Тенгри'],
|
|
9
|
+
]),
|
|
10
|
+
residentialComplexes: locationEntries([
|
|
11
|
+
['Karakol Residence', 'KARAKOL RESIDENCE', 'Karakol residence', 'ЖК Karakol Residence', 'жилой комплекс Karakol Residence', 'Karakol Residence турак жай комплекси'],
|
|
12
|
+
]),
|
|
13
|
+
streets: locationEntries([
|
|
14
|
+
['Улица Алдашева', 'Алдашева', 'ул. Алдашева', 'Aldasheva Street'],
|
|
15
|
+
['Улица Гебзе', 'Гебзе', 'ул. Гебзе', 'Gebze Street'],
|
|
16
|
+
['Улица Карасаева', 'Карасаева', 'ул. Карасаева', 'Karasaeva Street'],
|
|
17
|
+
['Улица Ленина', 'Ленина', 'ул. Ленина', 'Lenina Street'],
|
|
18
|
+
['Улица Пржевальского', 'Пржевальского', 'ул. Пржевальского', 'Przhevalskogo Street'],
|
|
19
|
+
['Улица Шопокова', 'Шопокова', 'ул. Шопокова', 'Shopokova Street'],
|
|
20
|
+
['Улица Токтогула', 'Токтогула', 'ул. Токтогула', 'Toktogula Street'],
|
|
21
|
+
['Улица Тыныстанова', 'Тыныстанова', 'ул. Тыныстанова', 'Tynystanova Street'],
|
|
22
|
+
['Улица Жамансариева', 'Жамансариева', 'ул. Жамансариева', 'Zhamansarieva Street'],
|
|
23
|
+
['Улица Ю. Абдрахманова', 'Ю. Абдрахманова', 'Абдрахманова Ю.', 'Абдрахманова Ю.улица', 'Абдрахманова Ю. улица', 'ул. Ю. Абдрахманова'],
|
|
24
|
+
['Арычная улица', 'Арычная', 'ул. Арычная'],
|
|
25
|
+
['Улица Н. Айтматовой', 'Н. Айтматовой', 'Айтматовой Н.', 'Айтматовой Н. улица', 'ул. Н. Айтматовой'],
|
|
26
|
+
['Улица Конкина', 'Конкина', 'Конкина улица', 'ул. Конкина'],
|
|
27
|
+
['Улица Кошевого', 'Кошевого', 'Кошевого улица', 'ул. Кошевого'],
|
|
28
|
+
['Улица Кыштобаева', 'Кыштобаева', 'Кыштобаева улица', 'ул. Кыштобаева'],
|
|
29
|
+
['Улица Мичурина', 'Мичурина', 'Мичурина улица', 'ул. Мичурина'],
|
|
30
|
+
['Молодёжная улица', 'Молодёжная', 'Молодежная', 'ул. Молодёжная', 'ул. Молодежная'],
|
|
31
|
+
['Московская улица', 'Московская', 'ул. Московская'],
|
|
32
|
+
['Улица Садыбекова', 'Садыбекова', 'Садыбекова улица', 'ул. Садыбекова'],
|
|
33
|
+
['Улица Шапак-баатыра', 'Шапак-баатыра', 'Шапак баатыра', 'Шапак-баатыра улица', 'ул. Шапак-баатыра'],
|
|
34
|
+
['Сталинградская улица', 'Сталинградская', 'ул. Сталинградская'],
|
|
35
|
+
['Улица Ворошилова', 'Ворошилова', 'Ворошилова улица', 'ул. Ворошилова'],
|
|
36
|
+
['Улица Жакшылык', 'Жакшылык', 'Жакшылык улица', 'ул. Жакшылык'],
|
|
37
|
+
['2-я улица Карасаева', '2 улица Карасаева', '2-я ул. Карасаева'],
|
|
38
|
+
['Улица Дербишева', 'Дербишева', 'ул. Дербишева'],
|
|
39
|
+
['Улица Кадыр аке 1-я', 'Кадыр аке 1-я', '1-я улица Кадыр аке'],
|
|
40
|
+
['Улица Кадыр аке 3-я', 'Кадыр аке 3-я', '3-я улица Кадыр аке'],
|
|
41
|
+
['Улица Кадыр аке 4-я', 'Кадыр аке 4-я', '4-я улица Кадыр аке'],
|
|
42
|
+
['Улица Кадыр аке 5-я', 'Кадыр аке 5-я', '5-я улица Кадыр аке'],
|
|
43
|
+
['Каракольская улица', 'Каракольская', 'ул. Каракольская'],
|
|
44
|
+
['Улица Кутманалиева', 'Кутманалиева', 'ул. Кутманалиева'],
|
|
45
|
+
['Улица Кузбасская 9-я', 'Кузбасская 9-я', '9-я Кузбасская улица'],
|
|
46
|
+
['Улица Кузбасская 10-я', 'Кузбасская 10-я', '10-я Кузбасская улица'],
|
|
47
|
+
['Улица Кузбасская 14-я', 'Кузбасская 14-я', '14-я Кузбасская улица'],
|
|
48
|
+
['Улица Масалиева', 'Масалиева', 'ул. Масалиева'],
|
|
49
|
+
['Улица Торгоева', 'Торгоева', 'ул. Торгоева'],
|
|
7
50
|
]),
|
|
8
51
|
}),
|
|
9
52
|
});
|
|
@@ -41,6 +41,7 @@ export const KG_LOCATION_EXTENSIONS = Object.freeze({
|
|
|
41
41
|
microdistricts: [
|
|
42
42
|
['Asanbay', 'Асанбай', 'Асанбай микрорайон', 'Асанбай кичирайону'],
|
|
43
43
|
['Jal', 'Джал', 'Жал', 'Джал микрорайон', 'Жал кичирайону'],
|
|
44
|
+
['Джал-15', 'Джал 15', 'Жал-15', 'Жал 15', 'мкр Джал-15', 'мкр. Джал-15', 'микрорайон Джал-15'],
|
|
44
45
|
['Tunguch', 'Тунгуч', 'Тунгуч микрорайон'],
|
|
45
46
|
['Ulan', 'Улан', 'Улан микрорайон'],
|
|
46
47
|
['Kok-Jar', 'Кок-Жар', 'Көк-Жар', 'Кок Жар', 'Көк Жар'],
|
|
@@ -50,7 +51,10 @@ export const KG_LOCATION_EXTENSIONS = Object.freeze({
|
|
|
50
51
|
['Vostok-5', 'Восток-5', 'Восток 5', '5-й микрорайон Восток'],
|
|
51
52
|
['Vostok-6', 'Восток-6', 'Восток 6', '6-й микрорайон Восток'],
|
|
52
53
|
['Dordoi', 'Дордой', 'Дордой массив', 'Дордой конушу'],
|
|
54
|
+
['Учкун', 'Учкун микрорайон', 'микрорайон Учкун', 'Учкун мкр'],
|
|
55
|
+
['Жилгородок Совмина', 'жилгородок Совмина', 'Жилгородок Совмин', 'Совмин жилгородок', 'Совмин'],
|
|
53
56
|
['3-й микрорайон', '3 микрорайон', '3 мкр', '3 мкр.', '3-й мкр', '3rd microdistrict'],
|
|
57
|
+
['6-й микрорайон', '6 микрорайон', '6 мкр', '6 мкр.', '6-й мкр', '6th microdistrict'],
|
|
54
58
|
['7-й микрорайон', '7 микрорайон', '7 мкр', '7 мкр.', '7-й мкр', '7th microdistrict'],
|
|
55
59
|
['8-й микрорайон', '8 микрорайон', '8 мкр', '8 мкр.', '8-й мкр', '8th microdistrict'],
|
|
56
60
|
['10-й микрорайон', '10 микрорайон', '10 мкр', '10 мкр.', '10-й мкр', '10th microdistrict'],
|
|
@@ -2,9 +2,16 @@ import { locationEntries } from './location-merge.js';
|
|
|
2
2
|
|
|
3
3
|
export const KG_OSH_LOCATION_EXTENSIONS = Object.freeze({
|
|
4
4
|
Osh: Object.freeze({
|
|
5
|
+
districts: locationEntries([
|
|
6
|
+
['Керме-Тоо', 'Керме Тоо', 'Kerme-Too', 'Kerme Too', 'МТУ Керме-Тоо', 'МАБ Керме-Тоо', 'Керме-Тоо муниципалдык аймагы'],
|
|
7
|
+
]),
|
|
5
8
|
microdistricts: locationEntries([
|
|
6
9
|
['Anar', 'Анар', 'микрорайон Анар', 'мкр Анар', 'Анар микрорайон', 'Anar microdistrict'],
|
|
7
10
|
['Tuleyken', 'Тулейкен', 'Толойкон', 'Төлөйкөн', 'микрорайон Тулейкен', 'микрорайон Толойкон', 'мкр Тулейкен', 'Tuleyken microdistrict', 'Toloikon microdistrict'],
|
|
11
|
+
['Кулатов', 'Т. Кулатова', 'Кулатова', 'микрорайон Кулатов', 'микрорайон Т. Кулатова', 'мкр Кулатов', 'Кулатов микрорайон', 'Кулатов кичи району'],
|
|
12
|
+
['ДЭУ-21', 'ДЭУ 21', 'DEU-21', 'DEU 21', 'микрорайон ДЭУ-21', 'мкр ДЭУ-21'],
|
|
13
|
+
['МЖК-2', 'МЖК 2', 'MZHK-2', 'MZHK 2', 'микрорайон МЖК-2', 'мкр МЖК-2'],
|
|
14
|
+
['Ошский', 'Ошский микрорайон', 'Ошском микрорайоне', 'микрорайон Ошский', 'мкр Ошский', 'Oshskiy microdistrict'],
|
|
8
15
|
]),
|
|
9
16
|
settlements: locationEntries([
|
|
10
17
|
['Кеңеш', 'Кенеш', 'Kenesh', 'Кеңеш айылы', 'село Кеңеш', 'село Кенеш'],
|
|
@@ -19,7 +26,37 @@ export const KG_OSH_LOCATION_EXTENSIONS = Object.freeze({
|
|
|
19
26
|
]),
|
|
20
27
|
residentialComplexes: locationEntries([
|
|
21
28
|
['Asman Residence 1', 'Asman Residence-1', 'ASMAN RESIDENCE 1', 'Асман Резиденс 1', 'Асман Резиденс-1', 'ЖК Asman Residence 1', 'ЖК Асман Резиденс 1', 'Asman Residence 1 турак жай комплекси'],
|
|
22
|
-
['Mon Paris', 'MON PARIS', 'Mon Paris Ош', 'Mon Paris Osh', 'ЖК Mon Paris', 'ЖК Мон Париж', 'Мон Париж', 'Мон Пари', 'жилой комплекс Мон Париж', 'Mon Paris турак жай комплекси'],
|
|
29
|
+
['Mon Paris', 'MON PARIS', 'Mon Paris Ош', 'Mon Paris Osh', 'ЖК Mon Paris', 'ЖК Мон Париж', 'Мон Париж', 'Мон Пари', 'жилой комплекс Мон Париж', 'Mon Paris турак жай комплекси', 'Ихлас Ош', 'ЖК Ихлас Ош', 'жилой комплекс Ихлас Ош', 'жилой комплекс "Ихлас Ош"'],
|
|
30
|
+
['Аристократ', 'ЖК Аристократ', 'жилой комплекс Аристократ', 'Аристократ, жилой комплекс'],
|
|
31
|
+
['Фрунзенский', 'ЖК Фрунзенский', 'жилой комплекс Фрунзенский', 'Фрунзенский, жилой комплекс'],
|
|
32
|
+
['Миллион', 'ЖК Миллион', 'жилой комплекс Миллион', 'Миллион, жилой комплекс'],
|
|
33
|
+
['Osh Plaza', 'OSH PLAZA', 'Ош Плаза', 'ЖК Osh Plaza', 'ЖК Ош Плаза', 'жилой комплекс Osh Plaza'],
|
|
34
|
+
['Сере', 'ЖК Сере', 'жилой комплекс Сере', 'Жилой комплекс "Сере"'],
|
|
35
|
+
['Ак-Бата', 'Ак Бата', 'ЖК Ак-Бата', 'ЖК Ак Бата', 'жилой комплекс Ак-Бата', 'Стройка ЖК «Ак-Бата»'],
|
|
36
|
+
['Ак-Бата 2', 'Ак Бата 2', 'ЖК Ак-Бата 2', 'ЖК Ак Бата 2', 'жилой комплекс Ак-Бата 2', 'Стройка ЖК «Ак-Бата 2»'],
|
|
37
|
+
['Манас', 'ЖК Манас', 'жилой комплекс Манас', 'Стройка ЖК «Манас»'],
|
|
38
|
+
['ЖК Сулайман Тоо', 'ЖК Сулайман-Тоо', 'жилой комплекс Сулайман Тоо', 'жилой комплекс Сулайман-Тоо', 'Жилой комплекс "Сулайман Тоо"'],
|
|
39
|
+
['Таберик', 'ЖК Таберик', 'жилой комплекс Таберик', 'Таберик, жилой комплекс'],
|
|
40
|
+
['Юджин', 'ЖК Юджин', 'жилой комплекс Юджин', 'Юджин, жилой комплекс'],
|
|
41
|
+
]),
|
|
42
|
+
streets: locationEntries([
|
|
43
|
+
['Аскар Шакиров көчөсү'],
|
|
44
|
+
['Асранкулов көчөсү'],
|
|
45
|
+
['Иминов көчөсү'],
|
|
46
|
+
['Келечек көчөсү'],
|
|
47
|
+
['Улица Хан-Ордо', 'ул. Хан-Ордо'],
|
|
48
|
+
['Улица Кочконова Турдали', 'ул. Кочконова Турдали'],
|
|
49
|
+
['Кулатов көчөсү'],
|
|
50
|
+
['Улица Курманжан датка', 'ул. Курманжан датка'],
|
|
51
|
+
['Улица Мамырова', 'ул. Мамырова'],
|
|
52
|
+
['Улица Монуева', 'ул. Монуева'],
|
|
53
|
+
['Улица Насирдинова', 'ул. Насирдинова'],
|
|
54
|
+
['Ошская улица', 'улица Ошская', 'ул. Ошская'],
|
|
55
|
+
['Улица Раимбекова', 'ул. Раимбекова'],
|
|
56
|
+
['Саргалчаев көчөсү'],
|
|
57
|
+
['Ташмамата Джумабаева улица', 'улица Ташмамата Джумабаева', 'ул. Ташмамата Джумабаева'],
|
|
58
|
+
['Тоголок Молдо көчөсү'],
|
|
59
|
+
['Төрөбек Абакир уулу көчөсү'],
|
|
23
60
|
]),
|
|
24
61
|
}),
|
|
25
62
|
});
|
|
@@ -69,6 +69,7 @@ export const KZ_ALMATY_CLEANED_RESIDENTIAL_EXTENSIONS = Object.freeze({
|
|
|
69
69
|
row('Шахристан', 'Shakhristan', 'Shahristan'),
|
|
70
70
|
row('Шугыла', 'Шұғыла', 'Shugyla', 'Shughyla', 'ЖК Шұғыла'),
|
|
71
71
|
row('Юбилейный', 'Yubileinyi', 'Yubileynyi'),
|
|
72
|
+
row('Премьера', 'Premiera', 'Премьера ЖК', 'ЖК Премьера'),
|
|
72
73
|
]),
|
|
73
74
|
}),
|
|
74
75
|
});
|
|
@@ -11,4 +11,22 @@ export const KZ_CITY_RESIDENTIAL_EXTENSIONS = Object.freeze({
|
|
|
11
11
|
['Трилистник', 'ЖК Трилистник', 'Жилой комплекс Трилистник'],
|
|
12
12
|
]),
|
|
13
13
|
}),
|
|
14
|
+
Shymkent: Object.freeze({
|
|
15
|
+
residentialComplexes: locationEntries([
|
|
16
|
+
['Кок-Жайлау', 'Кок жайлау', 'ЖК Кок-Жайлау', 'ЖК Кок жайлау', 'Жилой комплекс Кок жайлау'],
|
|
17
|
+
['Биик', 'БИИК', 'Biik', 'ЖК Биик', 'ЖК БИИК', 'жилой комплекс Биик'],
|
|
18
|
+
]),
|
|
19
|
+
}),
|
|
20
|
+
Taraz: Object.freeze({
|
|
21
|
+
residentialComplexes: locationEntries([
|
|
22
|
+
['Атшабар', 'Atshabar', 'ЖК Атшабар', 'жилой комплекс Атшабар'],
|
|
23
|
+
]),
|
|
24
|
+
}),
|
|
25
|
+
Oskemen: Object.freeze({
|
|
26
|
+
residentialComplexes: locationEntries([
|
|
27
|
+
['Оазис', 'ЖК Оазис', 'Жилой комплекс Оазис', 'Жилой Комплекс "Оазис"', 'Оазис жилой комплекс'],
|
|
28
|
+
['Рахат', 'ЖК Рахат', 'Рахат жилой комплекс'],
|
|
29
|
+
['Renesans', 'ЖК Renesans', 'ЖК "Renesans"', 'Жилой комплекс Renesans'],
|
|
30
|
+
]),
|
|
31
|
+
}),
|
|
14
32
|
});
|
|
@@ -3,14 +3,22 @@ import { locationEntries } from './location-merge.js';
|
|
|
3
3
|
export const KZ_KOSTANAY_LOCATION_EXTENSIONS = Object.freeze({
|
|
4
4
|
Kostanay: Object.freeze({
|
|
5
5
|
microdistricts: locationEntries([
|
|
6
|
+
['1-й микрорайон', '1 микрорайон', '1 мкр', '1 мкр.', '1-й мкр'],
|
|
7
|
+
['2-й микрорайон', '2 микрорайон', '2 мкр', '2 мкр.', '2-й мкр'],
|
|
6
8
|
['3-й микрорайон', '3 микрорайон', '3 мкр', '3 мкр.', '3-й мкр'],
|
|
7
9
|
['5-й микрорайон', '5 микрорайон', '5 мкр', '5 мкр.', '5-й мкр'],
|
|
10
|
+
['6-й микрорайон', '6 микрорайон', '6 мкр', '6 мкр.', '6-й мкр'],
|
|
11
|
+
['7-й микрорайон', '7 микрорайон', '7 мкр', '7 мкр.', '7-й мкр'],
|
|
12
|
+
['8-й микрорайон', '8 микрорайон', '8 мкр', '8 мкр.', '8-й мкр'],
|
|
8
13
|
['9-й микрорайон', '9 микрорайон', '9 мкр', '9 мкр.', '9-й мкр'],
|
|
9
14
|
['Наурыз', 'Микрорайон Наурыз', 'микрорайон Наурыз', 'мкр Наурыз', 'Nauryz'],
|
|
10
15
|
['Береке', 'Микрорайон Береке', 'микрорайон Береке', 'мкр Береке', 'Bereke'],
|
|
11
16
|
]),
|
|
12
17
|
residentialComplexes: locationEntries([
|
|
13
18
|
['Алтын Арман', 'Алтын-Арман', 'Altyn Arman', 'ЖК Алтын Арман', 'ЖК Алтын-Арман', 'жилой комплекс Алтын Арман'],
|
|
19
|
+
['Керемет', 'Keremet', 'ЖК Керемет', 'жилой комплекс Керемет'],
|
|
20
|
+
['Марсель', 'Marsel', 'Marseille', 'ЖК Марсель', 'жилой комплекс Марсель'],
|
|
21
|
+
['Rakhat', 'Рахат', 'ЖК Rakhat', 'ЖК Рахат', 'жилой комплекс Rakhat'],
|
|
14
22
|
]),
|
|
15
23
|
}),
|
|
16
24
|
});
|
|
@@ -1,27 +1,43 @@
|
|
|
1
1
|
import { locationEntries } from './location-merge.js';
|
|
2
2
|
|
|
3
3
|
export const KZ_MICRODISTRICT_EXTENSIONS = Object.freeze({
|
|
4
|
+
Almaty: Object.freeze({
|
|
5
|
+
microdistricts: locationEntries([
|
|
6
|
+
['1-й микрорайон', '1 микрорайон', '1 мкр', '1 мкр.', '1-й мкр', '1 microdistrict'],
|
|
7
|
+
['6-й микрорайон', '6 микрорайон', '6 мкр', '6 мкр.', '6-й мкр', '6 microdistrict'],
|
|
8
|
+
['12-й микрорайон', '12 микрорайон', '12 мкр', '12 мкр.', '12-й мкр', '12 microdistrict'],
|
|
9
|
+
]),
|
|
10
|
+
}),
|
|
4
11
|
Aktobe: Object.freeze({
|
|
5
12
|
microdistricts: locationEntries([
|
|
6
13
|
['1-й микрорайон', '1 микрорайон', '1 мкр', '1 мкр.', '1-й мкр'],
|
|
14
|
+
['2-й микрорайон', '2 микрорайон', '2 мкр', '2 мкр.', '2-й мкр'],
|
|
7
15
|
['3-й микрорайон', '3 микрорайон', '3 мкр', '3 мкр.', '3-й мкр'],
|
|
16
|
+
['4-й микрорайон', '4 микрорайон', '4 мкр', '4 мкр.', '4-й мкр'],
|
|
8
17
|
['8 microdistrict', '8-й микрорайон', '8 микрорайон', '8 мкр', '8 мкр.', '8-й мкр'],
|
|
9
18
|
]),
|
|
10
19
|
}),
|
|
11
20
|
Karaganda: Object.freeze({
|
|
12
21
|
microdistricts: locationEntries([
|
|
22
|
+
['15-й микрорайон', '15 микрорайон', '15 мкр', '15 мкр.', '15-й мкр'],
|
|
13
23
|
['16-й микрорайон', '16 микрорайон', '16 мкр', '16 мкр.', '16-й мкр'],
|
|
24
|
+
['19-й микрорайон', '19 микрорайон', '19 мкр', '19 мкр.', '19-й мкр'],
|
|
14
25
|
]),
|
|
15
26
|
}),
|
|
16
27
|
Shymkent: Object.freeze({
|
|
17
28
|
microdistricts: locationEntries([
|
|
18
29
|
['8-й микрорайон', '8 микрорайон', '8 мкр', '8 мкр.', '8-й мкр'],
|
|
30
|
+
['11-й микрорайон', '11 микрорайон', '11 мкр', '11 мкр.', '11-й мкр'],
|
|
19
31
|
['15-й микрорайон', '15 микрорайон', '15 мкр', '15 мкр.', '15-й мкр'],
|
|
20
32
|
['Нурсат', 'Микрорайон Нурсат', 'микрорайон Нурсат', 'мкр Нурсат'],
|
|
21
33
|
]),
|
|
22
34
|
}),
|
|
23
35
|
Taraz: Object.freeze({
|
|
24
36
|
microdistricts: locationEntries([
|
|
37
|
+
['Алатау', 'Микрорайон Алатау', 'микрорайон Алатау', 'мкр Алатау', 'Alatau'],
|
|
38
|
+
['Мынбулак', 'Микрорайон Мынбулак', 'микрорайон Мынбулак', 'мкр Мынбулак', 'Мыңбұлақ', 'Mynbulak'],
|
|
39
|
+
['Самал', 'Микрорайон Самал', 'микрорайон Самал', 'мкр Самал', 'Samal'],
|
|
40
|
+
['Шанырак', 'Микрорайон Шанырак', 'микрорайон Шанырак', 'мкр Шанырак', 'Шаңырақ', 'Shanyrak'],
|
|
25
41
|
['Улы Дала', 'Ұлы Дала', 'Микрорайон Улы Дала', 'микрорайон Улы Дала', 'мкр Улы Дала', 'Uly Dala'],
|
|
26
42
|
]),
|
|
27
43
|
}),
|
|
@@ -7,5 +7,8 @@ export const KZ_PAVLODAR_LOCATION_EXTENSIONS = Object.freeze({
|
|
|
7
7
|
['Сарыарка', 'Микрорайон Сарыарка', 'микрорайон Сарыарка', 'мкр Сарыарка', 'Saryarka'],
|
|
8
8
|
['Усольский', 'Усольский микрорайон', 'микрорайон Усольский', 'мкр Усольский', 'Usolsky'],
|
|
9
9
|
]),
|
|
10
|
+
residentialComplexes: locationEntries([
|
|
11
|
+
['Ирина', 'Irina', 'ЖК Ирина', 'жилой комплекс Ирина'],
|
|
12
|
+
]),
|
|
10
13
|
}),
|
|
11
14
|
});
|
package/src/locations-runtime.js
CHANGED
|
@@ -6,11 +6,13 @@ import {
|
|
|
6
6
|
matchUkraineSecondaryCity,
|
|
7
7
|
} from './locations.js';
|
|
8
8
|
import { LOCATION_LIST_KEYS, mergeLocationCountries } from './location-merge.js';
|
|
9
|
+
import { canonicalCity } from './geography.js';
|
|
9
10
|
import { KG_LOCATION_EXTENSIONS } from './kg-location-extensions.js';
|
|
10
11
|
import { KG_BISHKEK_STREET_EXTENSIONS } from './kg-bishkek-street-extensions.js';
|
|
11
12
|
import { KG_BISHKEK_RESIDENTIAL_EXTENSIONS } from './kg-bishkek-residential-extensions.js';
|
|
12
13
|
import { KG_OSH_LOCATION_EXTENSIONS } from './kg-osh-location-extensions.js';
|
|
13
14
|
import { KG_KARAKOL_LOCATION_EXTENSIONS } from './kg-karakol-location-extensions.js';
|
|
15
|
+
import { KG_JALAL_ABAD_LOCATION_EXTENSIONS } from './kg-jalal-abad-location-extensions.js';
|
|
14
16
|
import { KZ_DISTRICT_EXTENSIONS } from './kz-district-extensions.js';
|
|
15
17
|
import { KZ_SCRAPED_ADDRESS_EXTENSIONS as KZ_ADDRESS_EXTENSIONS } from './kz-address-extensions.js';
|
|
16
18
|
import { KZ_PRIMARY_ADDRESS_EXTENSIONS } from './kz-primary-address-extensions.js';
|
|
@@ -48,6 +50,24 @@ const UZ_RUNTIME_BASE_LOCATION_DICTIONARIES = Object.freeze({
|
|
|
48
50
|
}),
|
|
49
51
|
});
|
|
50
52
|
|
|
53
|
+
const KG_LEGACY_LOCATION_DICTIONARIES = mergeLocationCountries(
|
|
54
|
+
BASE_LOCATION_DICTIONARIES.KG || {},
|
|
55
|
+
KG_LOCATION_EXTENSIONS,
|
|
56
|
+
KG_BISHKEK_STREET_EXTENSIONS,
|
|
57
|
+
KG_BISHKEK_RESIDENTIAL_EXTENSIONS,
|
|
58
|
+
KG_OSH_LOCATION_EXTENSIONS,
|
|
59
|
+
KG_KARAKOL_LOCATION_EXTENSIONS,
|
|
60
|
+
KG_JALAL_ABAD_LOCATION_EXTENSIONS,
|
|
61
|
+
);
|
|
62
|
+
const {
|
|
63
|
+
'Jalal-Abad': legacyJalalAbadLocations,
|
|
64
|
+
...KG_CANONICAL_LOCATION_DICTIONARIES
|
|
65
|
+
} = KG_LEGACY_LOCATION_DICTIONARIES;
|
|
66
|
+
const KG_RUNTIME_LOCATION_DICTIONARIES = Object.freeze({
|
|
67
|
+
...KG_CANONICAL_LOCATION_DICTIONARIES,
|
|
68
|
+
Manas: KG_CANONICAL_LOCATION_DICTIONARIES.Manas || legacyJalalAbadLocations || Object.freeze({}),
|
|
69
|
+
});
|
|
70
|
+
|
|
51
71
|
export const LOCATION_DICTIONARIES = Object.freeze({
|
|
52
72
|
...BASE_LOCATION_DICTIONARIES,
|
|
53
73
|
UA: mergeLocationCountries(
|
|
@@ -79,18 +99,17 @@ export const LOCATION_DICTIONARIES = Object.freeze({
|
|
|
79
99
|
KZ_MICRODISTRICT_EXTENSIONS,
|
|
80
100
|
KZ_CITY_RESIDENTIAL_EXTENSIONS,
|
|
81
101
|
),
|
|
82
|
-
KG:
|
|
83
|
-
BASE_LOCATION_DICTIONARIES.KG || {},
|
|
84
|
-
KG_LOCATION_EXTENSIONS,
|
|
85
|
-
KG_BISHKEK_STREET_EXTENSIONS,
|
|
86
|
-
KG_BISHKEK_RESIDENTIAL_EXTENSIONS,
|
|
87
|
-
KG_OSH_LOCATION_EXTENSIONS,
|
|
88
|
-
KG_KARAKOL_LOCATION_EXTENSIONS,
|
|
89
|
-
),
|
|
102
|
+
KG: KG_RUNTIME_LOCATION_DICTIONARIES,
|
|
90
103
|
});
|
|
91
104
|
|
|
105
|
+
function canonicalDictionaryCity(countryCode, city) {
|
|
106
|
+
if (!city) return null;
|
|
107
|
+
return canonicalCity(city, countryCode) || city;
|
|
108
|
+
}
|
|
109
|
+
|
|
92
110
|
export function dictionaryFor(countryCode, city) {
|
|
93
|
-
|
|
111
|
+
const canonical = canonicalDictionaryCity(countryCode, city);
|
|
112
|
+
return canonical ? LOCATION_DICTIONARIES[countryCode]?.[canonical] || null : null;
|
|
94
113
|
}
|
|
95
114
|
|
|
96
115
|
export function locationCities(countryCode) {
|
|
@@ -99,7 +118,8 @@ export function locationCities(countryCode) {
|
|
|
99
118
|
|
|
100
119
|
export function matchDictionaryLocation(text, countryCode, city = null) {
|
|
101
120
|
const country = locationCities(countryCode);
|
|
102
|
-
const
|
|
121
|
+
const canonical = canonicalDictionaryCity(countryCode, city);
|
|
122
|
+
const cities = canonical && country[canonical] ? [[canonical, country[canonical]]] : Object.entries(country);
|
|
103
123
|
const value = String(text || '');
|
|
104
124
|
let best = null;
|
|
105
125
|
|
|
@@ -120,4 +140,4 @@ export function matchDictionaryLocation(text, countryCode, city = null) {
|
|
|
120
140
|
if (!best) return null;
|
|
121
141
|
const { start: _start, end: _end, ...result } = best;
|
|
122
142
|
return result;
|
|
123
|
-
}
|
|
143
|
+
}
|
|
@@ -4,6 +4,11 @@ export const UZ_BUKHARA_LOCATION_EXTENSIONS = Object.freeze({
|
|
|
4
4
|
Bukhara: Object.freeze({
|
|
5
5
|
microdistricts: locationEntries([
|
|
6
6
|
['1-й микрорайон', '1 микрорайон', '1 мкр', '1 мкр.', '1-й мкр'],
|
|
7
|
+
['2-й микрорайон', '2 микрорайон', '2 мкр', '2 мкр.', '2-й мкр'],
|
|
8
|
+
['3-й микрорайон', '3 микрорайон', '3 мкр', '3 мкр.', '3-й мкр'],
|
|
9
|
+
['4-й микрорайон', '4 микрорайон', '4 мкр', '4 мкр.', '4-й мкр'],
|
|
10
|
+
['5А микрорайон', '5а микрорайон', '5A микрорайон', '5А мкр', '5а мкр', '5A mkr'],
|
|
11
|
+
['7-й микрорайон', '7 микрорайон', '7 мкр', '7 мкр.', '7-й мкр'],
|
|
7
12
|
]),
|
|
8
13
|
}),
|
|
9
14
|
});
|
|
@@ -108,6 +108,9 @@ export const UZ_TASHKENT_CONTEXT_EXTENSIONS = Object.freeze({
|
|
|
108
108
|
'Turkiston Avenue', 'TJM Turkiston', 'ЖК Turkiston', 'Turkiston TJM', 'Turkiston turar joy majmuasi',
|
|
109
109
|
'Туркистон', 'ЖК Туркистон', 'Туркистон Авеню',
|
|
110
110
|
]),
|
|
111
|
+
residentialEntry('Karasaray', [
|
|
112
|
+
'Карасарай', 'ЖК Карасарай', 'Жилой комплекс Карасарай', 'Karasaray TJM', 'Karasaray turar joy majmuasi',
|
|
113
|
+
]),
|
|
111
114
|
]),
|
|
112
115
|
}),
|
|
113
116
|
});
|