Если вы хотите что-то парсить, это значит, что этого "чего-то" очень-очень много. Тем более, если хотите применять ML. В этом случае нужна еще и обучающая выборка, где есть много-премного примеров входных данных в размеченном виде.
К примеру на сайте службы доставки есть районы, где они работают
Из вопроса не ясно сколько "грязных" данных есть. Неужели на одном единственном сайте службы доставки НАСТОЛЬКО много адресов в таким виде? Или таких сайтов миллион?
Паресеры и ML превосходят возможности человеческой обработки только на больших, очень больших масштабах.
Из вашего вопроса складывается впечатление, что вы спрашиваете как сделать некий парсер, который будет парсить ЛЮБЫЕ грязные данные произвольного вида и типа в любых количествах.
Детализируйте свой вопрос, Показывайте больше примеров.
Сильного ИИ ещё не существует (а когда появится, он будет не менее ленив, чем те, кому призван помогать).
Для вас с вашим слишком общим вопросом есть только общие рекомендации.
извлеките данные в текстовом виде;
- просмотрите глазами: если писать парсер дольше, чем перелопатить вручную, а при пополнении в датасет может прийти совершенно нового вида мусор, то парсер не нужен, обрабатывайте руками;
- настраивайте обработку датасета по ступенчатой схеме так, чтобы на каждой ступени происходили минимальные не калечащие изменения как можно большего объёма данных, а выхлоп передавался на следующую ступень без потери данных предыдущего шага;
- просматривайте изменения, затронутые каждым шагом, если видите порчу данных, делайте дополнительные промежуточные шаги;
- серией ступеней из простых замен по шаблону и рег-экспу делайте текст более структурированным: заменяйте разделители по паттернам, экранируйте или удаляйте содержимое скобок, заменяйте кавычки на однотипные, убирайте мусорные элементы, которые гарантированно не дадут сведений о полезных данных; раскрывайте аббревиатуры и сокращения, приводите синонимы к одному из вариантов...
- на каком-то этапе ваш входной датасет должен превратиться из монолитного текста в CSV-поток с одной единицей данных на строку;
- дальше так же ступенчато делайте чистку и дедупликацию потока, разделяйте записи на отдельные поля, выделяйте новые атрибуты.
Постройте пайп-лайн так, чтобы изменения, внесённые каждым шагом можно было анализировать в виде диффа. Сделайте отдельный аналитический "вью", где будут видны только затронутые правкой ступени данные. Сразу видно будет косяки и калечащие изменения.
Считайте статистику правок каждой ступенью, реагируйте на крайней случаи.
Важно, что на каждом этапе энтропия датасета должна уменьшаться. Любая потеря данных вредна, поскольку заметить, скажем, что у вас "г." обозначает не только город, но и, к примеру, "гражданский" в большом количестве топонимов в конце обработки -- это фатально. Вы запутаетесь. Нужно выносить удаляемые данные в отдельные поля и оставлять возможность делать по ним анализ на более поздних этапах.
В целом исходный датасет у вас всегда созранён и всегда можно быстро повторить шаги.
Сохраняйте этапы написания парсера в системе контроля версий, делайте чаще коммиты с внятными описнаиями.
И да хранит вас Кнут и Страуструп.