lina666
@lina666
Изучаю веб ЯП.

Перебор массива?

Пишу парсер для сайта, заказчик дал задание при парсинге сайта нужно получить город из строки и добавить в БД (для wordpress), но строки выходят разные к примеру:
Продам что-то Киев
Обменяю что-то, в Киеве
Куплю что то :: Киев можно
Проблема в том что названия городов иногда попадаются и с маленькой буквы, сам парсер жрет довольно много памяти, нужно оптимальное решение
  • Вопрос задан
  • 817 просмотров
Решения вопроса 2
Immortal_pony
@Immortal_pony Куратор тега PHP
Если набор городов фиксированный, то можно так:
function extractCity($str) {
    $cities = ["киев"=>["kyiv", "київ"], "одесса", "днепр"];
    foreach ($cities as $city=>$aliases) {
        $city = is_numeric($city) ? $aliases : $city;
        if (mb_strpos(mb_strtolower($str), $city) !== false) {
            return $city;
        }
        if (is_array($aliases)) {
            foreach ($aliases as $alias) {
                if (mb_strpos(mb_strtolower($str), $alias) !== false) {
                    return $city;
                }
            }
        }
    }
    return "не определен";
}

var_dump(extractCity("Продам что-то Киев")); // string(8) "киев"
var_dump(extractCity("Обменяю что-то, в Киеве")); // string(8) "киев"
var_dump(extractCity("Куплю що то :: Київ можна")); // string(8) "киев"
var_dump(extractCity("Продам что-то Москве")); // string(23) "не определен"


Если набор городов не фиксированный, то тогда необходмио подключать более умный пасрсер текста типа Наташи
Ответ написан
Комментировать
@antares4045
Ваша задача называется "стемминг" решений у неё много, причём преимущественно плохих, но для русского языка есть например яндексовский mystem, имеющий отличную точность и скорость, при всём этом ещё и почти не требовательный к ресурсам. Но я, признаться честно, не помню как у него с лицензией на коммерческое использование. Как бы то не было, узнав правильное название вашей задачи, я надеюсь, вы быстро выгуглите решение.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 20:24
10000 руб./за проект
24 апр. 2024, в 19:51
1000 руб./за проект