@b_a_y
Python, Selenium

Как при помощи Python найти во множестве docx документах все упомянутые города и улицы?

Всем привет.
Имеется около 40ка документов формата (.docx). В этих документах присутствует упоминание городов и улиц, формата "г. Москва, ул. Ленина 40" и так далее. Города в документах разные, в одном документе может быть несколько городов. Каждый документ состоит из 20-30 страниц текста.
Требуется выдернуть из всех этих документов именно город, улицу и номер дома, после чего поместить все эти данные в excel таблицу с столбцами:
1) Порядковый номер
2) Город
3) Улица, номер дома
4) Путь к файлу, где был найден данный город, улица, дом

К примеру, вот так выглядит текст в исходном варианте и нужно выдернуть именно это -
5eb779153b415362245704.png

А вот так должно получиться -
5eb7798263828701201013.png

Помогите пожалуйста, натолкните на мысль как это сделать. Очень признателен буду.
  • Вопрос задан
  • 714 просмотров
Решения вопроса 1
@b_a_y Автор вопроса
Python, Selenium
По поводу обработки текста, вопрос решен. По поводу вставки в excel, думаю проблем ни у кого не будет.
Вот пара ссылок на статьи, которые помогли мне написать регулярку -

Сама же регулярка, которая у меня получилась выглядит вот так
(г|снт|п)(\.|\,|\s)(\s|\.|.|\D*|\D*\,|\D*.|\D*\s\-|\w*|\W*)(ул|пер|б-р|просп|пр-кт|пр)(\.|\,|\s)(\D*\s|\D*\,|\D*.|\D*\s\-)([\d*\s]{1,3})

Да, я понимаю, что для кого то она покажется убогой, но в моем вопросе, она на 100% справляется :-)
Находит адреса в следующих форматах, например: "г Кемерово ул Проездная 531; г. Москва, ул. Карамшина 222; г, Новокузнецк, ул. 1-ая Стахановская 423; Г. Нижние Патрубки, ул. Оккупация 10;п, Металлплощадка ул, Западная д. 12" и так делее...
p.s. адреса вымышлены
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
У вас вопрос довольно обширный:
1. Выделить текст из docx
2. Обработать текст и получить адреса
3. Вставить в Excel
Я остановлюсь на той части, которая на мой взгляд вызывает наибольшие затруднения - на втором этапе, на остальные - ответ легко ищется.

Вытягиваете из документа текст
Далее регулярками вытягиваете что вам надо

Вот к примеру на скорую руку набросал. Вы можете вариациями дополнить:
regexp = "((г|город|пгт|ст|с)(\.|\s)\w+,.*(ул|улица|пр|проспект|проулок|проезд)(\.|\s).*?\d+?)\D+"
address = re.findall(regexp, str1, re.IGNORECASE)

5eb7a38b2ae72656020135.png
Ответ написан
@Iv_and_S
1. Читаем текст pip install python-docx
2. пишем регулярку по поиску нужной подстроки. это самая заморочная часть. тут надо смотреть структуру документов , если есть какие то общие шаблоны типа "присутствует..." или "г. * ул. * цифры улицы" то надо цепляться за них в регулярке. также для проверки можно сверять найденные регуляркой значения, со списком городов, для проверки корректности результата.
только его надо где то предварительно стянуть)
3. пишем в excelpip install openpyxl
Все это в цикле по одному документу , и второй уровень цикла - по параграфам в документе.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы