-
Notifications
You must be signed in to change notification settings - Fork 21
/
RefineAddressML
36 lines (26 loc) · 3.44 KB
/
RefineAddressML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Дан набор адресов в произвольном формате (1-й столбец файла https://github.com/PeacockTeam/new-job/blob/master/geo.csv).
Необходимо нормализовать адреса - привести их к единообразному виду, сделать так чтобы одинаковые или похожие семантически адреса после преобразования были похоже и лексикографически (минимизировано расстояние Левенштейна) (пример результата - второй столбец вышеуказанного файла).
Пример:
Пусть есть 2 адреса.
Россия, город Москва, Ленинградский проспект, строение 167, офис 144, красная дверь
Москва, Ленинградский пр-т, 166
Человеку очевидно что эти адреса находятся рядом, но механизмы геокодинга или сравнения строк не могут это определить. Поэтому адреса нужно нормализовывать. Причем стратегия нормализации может быть разная.
Для вышеуказанных адресов например может быть предложены такие варианты:
Москва, Ленинградский, 167
Москва, Ленинградский, 166
или
РФ, г. Москва, Ленинградский пр-т, 167, 144
РФ, г. Москва, Ленинградский пр-т, 168, -
Первая стратегия предпочтительна если большая часть адресов не имеет информации о квартире или офисе. Вторая кроме того не перепутает Ленинградскую улицу с Ленинградским проспектом.
Пример подхода:
Делать мутацию
Считать критерий
В зависимости от успешности отменять мутацию или применять следующую
Тезисы к выполнению:
- Нельзя просто взять и выполнить N регулярок
- Нужно оценивать свой результат например отталкиваясь от оригинальной выборки (совакупное расстояние левенштейна должно быть меньше)
- Ваш подход должен быть итеративным - множество результатов которые постепенно улучшаются
- Адреса можно разбить на вектора состоящие из отдельных слов.
- Разумно использовать генетический алгоритм.
- Критерием успешности мутации можно считать суммарное расстояние Левенштейна по всей обучающей выборке (как с учетом векторизации так и без нее)
- Для кандидатов в мутации можно использовать наиболее часто встречающиеся изменения грязных и чистых строк (предварительно посчитать дифом)