Алгоритм замены первой буквы в названиях улиц?

Dzen

Новичок
Добрый день,

Какой алгоритм был бы наиболее простым и удобным, если у нас есть массив, список слов:

светофоры на улице строителей
переходы на ленинском проспекте
ширина дороги ленинского проспекта
и т.д. по разным улицам города.

И хотелось бы названия сделать с большой буквы, т.е.:

светофоры на улице Строителей
переходы на Ленинском проспекте
ширина дороги Ленинского проспекта

Какой алгоритм был бы правильным?

Сделать кучу :
PHP:
 if (preg_match(‘ /строител/’,$element_massiva))
А дальше полученную строку разбивать по пробелам на массив, опять регуляркой искать где этот элемент с названием улицы, делать ему ucfirst и опять склеивать массив в строку.
Или как-то более адекватно и проще можно сделать?
 

billyrubin

Новичок
Увы, это не список слов, а список словосочетаний. Откуда, кстати, он такой берется? Если ручками кто-то написал, то надо заставить переписать с большой буквы и бить по рукам за неправильное написание в дальнейшем…

Если у вас всегда есть слово «улица (-е, -ы, …)» перед названием улицы, слово «проспект (-е, -а, …)» после названия проспекта и т. п., то можно попробовать написать регулярки, которые это схватят (падежные окончания стоит отбросить). А менять функцией preg_replace. Можно передать сразу массив искомых шаблонов и исходных данных. Строка замены при этом может выглядеть примерно так: ucfirst($1), где $1 — подмаска, совпавшая с названием улицы.

Иначе — как вам, например, такое словосочетание: «забастовка строителей на улице строителей»?
 

ossorian

Новичок
Занимался подобной головоломкой, так как необходимо было найти адрес в изначально непредсказуемом тексте.
1. Складывается впечатление, что словосочетания кто-то специально привёл к нижнему регистру - тогда нужно найти источник.
Иначе, billyrubin - чётко указал на проблему. Нет никакой гарантии, что улицы не будут повторять обычные слова.

2. Если словосочетаний немного - то лучше всего заточить их под спец регулярку или вообще массив значений - если много - то выход писать алгоритм поиска и потом его отлаживать, добавляя всё новые условия, сводя вк минимуму ошибки. Неплохо было бы найти базу данных улиц. (У меня в Хабаровске и всё же поменьше).

Крайне важно привязаться к корням слов "улиц" и "проспект", "бульв" и т.п.

Но думаю, в любом случае процент ошибки будет оставаться. Если реально есть какой-то алгоритм, сводящий к минимуму процент ошибок - буду весьма признателен, если кто-то его подскажет.

Самое интересное, что человек решает подобные задания чисто интуитивно, без всяких сложных вычислений.
 
Сверху