Skip to content

Instantly share code, notes, and snippets.

@Bizunow
Last active November 14, 2017 12:57
Show Gist options
  • Save Bizunow/64741f9edad9d2a08b3a5edbc693a952 to your computer and use it in GitHub Desktop.
Save Bizunow/64741f9edad9d2a08b3a5edbc693a952 to your computer and use it in GitHub Desktop.
[Detect city] detect russian and ukrainian cities in text #php
// Usage: detectCity("Я живу в Москве"); // return "Москва"
function detectCity($text)
{
$cities = [
// Россия
// Миллионники
'Москва' => ['моск', 'msk', 'moskva', 'moscow', 'столица'],
'Санкт-Петербург' => ['петербург', 'peterburg', 'petersburg'],
'Волгоград' => ['волгоград', 'volgograd'],
'Владивосток' => ['владивосток', 'vladivostok'],
'Воронеж' => ['воронеж', 'vorone'],
'Екатеринбург' => ['екатеринбург', 'ekaterinburg'],
'Казань' => ['казан', 'kazan'],
'Калининград' => ['калининград', 'kaliningrad'],
'Краснодар' => ['краснодар', 'krasnodar', 'krd'],
'Красноярск' => ['красноярск', 'krasnoyarsk'],
'Нижний Новгород' => ['новгород', 'novgorod'],
'Новосибирск' => ['новосибирск', 'novosibirsk'],
'Омск' => ['омск', 'omsk'],
'Пермь' => ['перм', 'perm'],
'Ростов-на-Дону' => ['ростов', 'rostov'],
'Самара' => ['самар', 'samara'],
'Уфа' => ['уф', 'ufa'],
'Челябинск' => ['челябинск', 'chelyabinsk'],
// Крупнейшие
'Саратов' => ['саратов','saratov'],
'Тольятти' => ['тольятти','тольяти','togliatti'],
'Ижевск' => ['ижевск','izhevsk'],
'Барнаул' => ['барнаул','barnaul'],
'Ульяновск' => ['ульяновск','ulianovsk'],
'Иркутск' => ['иркутск','irkutsk'],
'Хабаровск' => ['хабаровск','khabarovsk'],
'Ярославль' => ['ярославль','Iaroslavl'],
'Махачкала' => ['махачкала','makhachkala','mahachkala'],
'Оренбург' => ['оренбург','orenburg'],
'Томск' => ['томск','tomsk'],
'Новокузнецк' => ['новокузнецк','novokuznetsk'],
'Кемерово' => ['кемерово','kemerovo'],
'Астрахань' => ['астрахан','astrakhan'],
'Рязань' => ['рязан','riazan','ryazan'],
'Пенза' => ['пенз','penza'],
'Липецк' => ['липецк','lipetsk'],
// Крупные
'Тула' => ['тула','tula'],
'Киров' => ['киров','kirov'],
'Чебоксары' => ['чебоксары','cheboksary'],
'Курск' => ['курск','kursk'],
'Улан-Удэ' => ['улан-удэ','ulan ude','улан удэ','улан уде'],
'Ставрополь' => ['ставрополь','stavropol'],
'Магнитогорск' => ['магнитогорск','magnitogorsk'],
'Иваново' => ['иваново','ivanovo'],
'Брянск' => ['брянск','briansk'],
'Сочи' => ['сочи','sochi'],
'Белгород' => ['белгород','belgorod'],
'Нижний Тагил' => ['нижний тагил','nizhnii tagil'],
'Архангельск' => ['архангельск','arkhangelsk'],
'Владимир' => ['владимир','vladimir'],
'Севастополь' => ['севастополь','sevastopol'],
'Чита' => ['чита','chita'],
'Калуга' => ['калуга','kaluga'],
'Сургут' => ['сургут','surgut'],
'Смоленск' => ['смоленск','smolensk'],
'Волжский' => ['волжский','volzhskii'],
'Курган' => ['курган','kurgan'],
'Орел' => ['орел','orel'],
'Череповец' => ['череповец','cherepovets'],
'Вологда' => ['вологда','vologda'],
'Владикавказ' => ['владикавказ','vladikavkaz'],
'Саранск' => ['саранск','saransk'],
'Мурманск' => ['мурманск','murmansk'],
'Якутск' => ['якутск','iakutsk'],
'Тамбов' => ['тамбов','tambov'],
'Грозный' => ['грозный','groznyi'],
'Стерлитамак' => ['стерлитамак','sterlitamak'],
'Кострома' => ['кострома','kostroma'],
// Украина
'Киев' => ['киев', 'kiev', 'київ'],
'Харьков' => ['харьков', 'harkov', 'charkov', 'харків'],
'Одесса' => ['одесса', 'odessa', 'одеса'],
'Днепропетровск' => ['днепропетровск', 'dnepropetrovsk', 'дніпропетровськ'],
'Донецк' => ['донецк', 'donetsk', 'донецьк'],
'Запорожье' => ['запорожье', 'zaporozhe', 'запоріжжя'],
'Львов' => ['львов', 'львов', 'львів'],
'Кривой Рог' => ['кривой рог', 'krivoy rog', 'кривий ріг'],
'Николаев' => ['николаев', 'nikolaev', 'миколаїв'],
'Мариуполь' => ['мариуполь', 'mariupol', 'маріуполь'],
'Луганск' => ['луганск', 'lugansk', 'луганськ'],
'Винница' => ['винница', 'vinnitsa', 'вінниця'],
'Макеевка' => ['макеевка', 'makeevka', 'макеевка'],
'Херсон' => ['херсон', 'herson', 'херсон'],
'Чернигов' => ['чернигов', 'chernigov', 'чернигов'],
'Полтава' => ['полтава', 'poltava'],
'Черкассы' => ['черкассы', 'cherkassyi', 'черкаси'],
'Горловка' => ['горловка', 'gorlovka', 'горловка'],
'Житомир' => ['житомир', 'zhitomir'],
'Сумы' => ['сумы', 'sumyi', 'суми'],
// СНГ
'Ташкент' => ['ташкент', 'tashkent'],
'Баку' => ['баку', 'baku'],
'Минск' => ['минск', 'minsk'],
'Брест' => ['брест', 'brest'],
'Алма-Ата' => ['алма-ата', 'alma-ata'],
'Ереван' => ['ереван', 'erevan'],
'Тбилиси' => ['тбилиси', 'tbilisi'],
'Талин' => ['талин', 'talin'],
'Вильнюс' => ['вильнюс', 'vilnius'],
'Астана' => ['астана', 'astana'],
'Рига' => ['рига', 'riga'],
'Бишкек' => ['бишкек', 'bishkek'],
'Кишинев' => ['кишинев', 'kishinev'],
'Душанбе' => ['душанбе', 'dushanbe'],
'Ашхабад' => ['ашхабад', 'ashkhabad'],
];
$text = mb_strtolower($text);
foreach ($cities as $cityName => $cityWordRoots) {
foreach ($cityWordRoots as $cityWordRoot) {
if (strpos($text, $cityWordRoot) !== false) {
return $cityName;
}
}
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment