Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Эта задача выглядит проще в предположении что в исходной базе все улицы будут написаны «корректно» — соответственно проверять опечатки не нужно…
В общем, посыл такой: осторожнее с регулярками.
Осмелюсь всё-таки обратить внимание что речь шла не об обычных (perl-ового типа) выражениях — обычные всё-таки катастрофически не подходят для нашей с вами цели.
разница между «Московская» и «Маяковская» находится в пределах допустимой погрешности с точки зрения анализатора — и прилось его сделать чуть умнее
В данном случае синтаксис не принципиален.
Вы же пишете что у вас сравнение с пороговым значением в 75%
Ну поскольку я пробовал задачу решать разными способами, имею некоторые основания полагать что… хм… не сам синтаксис, но принцип сопоставления с выражением (выражаемый синтаксисом) имеет значение.
0.02% давали ложные сопоставления
Я плохо знаком с реализуемым вами процессом для пользователей (точнее не знаком) поэтому не могу оценить — например, возможно ли в вашем случае уточнение с помощью названия города или нет…
И выражение «ошибки неприемлемы» я честно говоря не до конца понимаю. Есть технологический параметр — цена ошибки… Вы наверное не имеете в виду что в вашем случае он бесконечный? Или я наверное не до конца понимаю какую задачу вы решаете.
Правда был ещё такой критерий — сложность добавления новых топонимов в список (фактически на это требуется программист). Я думаю в вашем случае этой проблемы нет, если я верно понял…
//... {= [^ Беловодский, Евпаторский, Зеленков, Крапивный, Лагерный, Ловизский, Нейшлотский, Павский, Рабочий, Рощинский, Санаторный, Сахарный, Сосновый, Учебный, Центральный, Школьный, [(^(#1:6),8)~N,(?[(?-),й]),верхн*]|$N_Верхний, [^Новосил*, [Ново,(?-),сильц*]]|Новосильцевский ]~U, [?(@PEREULOK)] } |$U_пер., //...
[(^(#1:6),8)~N,(?[(?-),й]),верхн*]|$N_Верхний
сделало бы «Верхним» «1-й Верхне-Профинтерновский переулок»
Разбор адресов «нечёткими регулярными выражениями»