Когда я делал это в прошлый раз, проблема была очень сложной, особенно. так как у меня были международные адреса, и различия между странами огромны. Добавьте к этому вариацию, добавленную людьми, и проблема становится довольно сложной даже для людей.
Я наконец-то создаю heuristi c (содержит его, например, PO BOX, вероятное название страны (grep wikipedia), может быть, названия городов), а затем бросил каждый оставшийся адрес в API карт Google. GM неплохо распознает адреса, но даже у них могут быть ложные срабатывания, поэтому, скорее всего, потребуется ручная проверка.
Я не использовал ML, потому что моя база данных адресов была "большой", но недостаточно большой для обучения особенно нам не хватало помеченных данных о тренировках.