2016-08-05 3 views
0

Я провел последние 2 месяца, работая над скриптом, который очищает, форматирует и геокодирует адреса. Это довольно успешно сейчас, однако, есть некоторые адреса, которые дают мне проблемы.Перестановка строки условно?

Например:

Адрес, такие как 7TH AVENUE 530 xxxxxxxxxxx отбитыми моя геолокация модуля к сбою. Вы можете предположить, что x - это другой текст. Другой текст не вызывает ошибок, это связано только с номером улицы, который появляется после проспекта. В настоящее время у меня есть фильтры в моей программе, чтобы усечь адрес после уличных суффиксов, таких как проспект, улица и т. Д. Из-за этого программа в конечном итоге отправит 7th avenue в модуль очистки, что неточно.

Как я могу зарегистрировать экземпляры, где есть группа чисел, непосредственно предшествующих суффиксу улицы, а затем переместить их в начало адреса. Затем я могу продолжить, как я уже есть, и усечь строку после суффикса.

Можно предположить, что у меня есть список всех уличных суффиксов по имени patterns.

Спасибо. Любая помощь приветствуется.

ДАЛЬНЕЙШАЯ РАЗРАБОТКА: мне нужно было бы выполнить эту перегруппировку строки, если группа чисел была 3 цифры или меньше, потому что почтовый индекс часто появляется после суффикса адреса, а в таких случаях я бы не стал хотите перестроить строку.

+1

Почему вы усечения вообще? Что происходит после названия улицы? Может быть, его проще урезать по какой-то другой метрике. Покажите пример ваших имен улиц, включая то, что происходит после. Вы говорите о структурированных данных, или вы анализируете неструктурированные данные, такие как тексты и веб-сайты? –

+0

Я использую геофизию для геокодирования и очищаю адреса. Geopy не делает много очистки. Он будет делать только небольшие изменения, такие как супер простые опечатки или форматирование. Вот почему я должен сделать большую часть очистки до передачи ее геофизике. Существует множество вещей, которые возникают после уличного суффикса. Почти в 100% этих ситуаций материал, который приходит после суффикса, не важен. Я получаю лучшие результаты от Geopy, когда передаю ему самое близкое к идеальному адресу. – Harrison

+1

Дополнительные разъяснения. Я работаю в компании, которая занимается международной перевозкой, и качество адреса является ужасным. Люди, которые живут за пределами США, не всегда понимают формат адреса США, не говоря уже о том, что Нью-Йорк еще сложнее. Поэтому я беру их сырые адреса и помещаю их в лучшую форму, что я могу, а затем их геокодирование. – Harrison

ответ

0

Я не уверен, если это поможет, но вы можете начать с этого:

import re 
address = '7TH AVENUE 530 xxxxxxxxxxx' 
m = re.search('(?<=AVENUE)\d{1,3}', address) 
print (m.group(0)) 
>>> 530 

Редактировать основанный на ваш комментарий:

import re 
original = '7TH AVENUE 530 xxxxxxxxxxx' 
patterns = ['street', 'avenue', 'road', 'place'] 
regex = r'(.*)(' + '|'.join(patterns) + r')(.*)' 
address = re.sub(regex, r'\1\2', original.lower()).lstrip() 
new_addr = re.search(r'(?<=%s)\d{1,3} ' % address, original.lower()) 
resulting_address = ' '.join([new_addr.group(0).strip(),address]) if new_addr else address 
address = ' '.join(map(str.capitalize, resulting_address.split())) 
+0

Как я могу добавить это для работы не только для проспекта, но и для моего списка суффикса (называемых шаблонами). И как я могу добавить 530 на фронт? Извините, я не лучший с регулярным выражением. – Harrison

+0

Вот что я сейчас делаю с точки зрения регулярного выражения, чтобы найти шаблон и удалить все после него: http://paste.ubuntu.com/22318974/ – Harrison

+0

см. Мое редактирование, 'original' - это оригинальная строка и адрес идентификатор, который вы уже нашли, используя ваше регулярное выражение. Я надеюсь, что это поможет вам. –