Как лучше всего почистить КЛАДР?

Есть стандартная база КЛАДР, но там очень много населенных пунктов с названиями которые тяжело искать, например есть добавления как "сдт", ищет точное совпадение, и оно очень мешает, может у кого то уже есть база почищена, или кто то подскажет как лучше всего убрать регионы которые трудно искать, например как "Овинчище(садоводческое товарищество)" такое добавление совсем не к месту "садоводческое товарищество"
  • Вопрос задан
  • 2321 просмотр
Пригласить эксперта
Ответы на вопрос 2
qmax
@qmax
программер
Делал примерно так с базой фиас, засовывая её в монгодб на питоне.
Не совпадает ни одного пункта, но идея, думаю, ясна :)
namstrip = re.compile(' *\([^)]*\) *') # всякая хрень в скобочках
namsplit = re.compile('\W+') # небуквы
namnum = re.compile('([0-9]+)[\w-]+') # 5ый, 6-ой, 101км, итп
num = re.compile('^[0-9]+') # числа
def idx_name(name):
    name = name.lower()
    name = namstrip.sub(' ', name) # нахер всё в скобочках
    name = namnum.sub('\\1', name) # 5ый, 6-ой, 101км -> 5, 6, 101
    namelems = namsplit.split(name) # разбить на слова
    namelems = filter(lambda e: len(e) > 1 or num.match(e), namelems) # оставить числа и длиннее 1 букв
    return list(namelems)

результат - писался в поле name_idx и индексировался
Ответ написан
Лучше его не чистить, а искать не по точному совпадению, а по началу названия. В большинстве случаев, в скобках указывается разъяснение, в каком именно месте расположен населенный пункт. Если в одном районе находятся два населенных пункта одного типа (хутор, деревня...) и с одинаковыми названиями, то, убрав информацию в скобках, вы никогда не сможете их различить.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы