2013-10-02 6 views
0

Итак, в основном у меня есть тысячи списков улиц, которые я бы хотел организовать. В настоящее время списки улиц хранятся в одной строковой переменной:Каков наиболее эффективный способ анализа непоследовательных адресов?

123 Street dr 
123 N Street dr 
123 N Street drive 
123 Street Drive 
123-N Street drive 
123 North Street drive 

Как вы можете сказать, это довольно случайный случай. Я бы очень хотел, чтобы они были сохранены в объекте под названием «Местоположение» со следующими определениями.

int streetNumber; 
string direction; 
string streetName; 
string typeOfStreet; 

Я делаю это на C#, если это имеет значение, я верю в его более логичный вопрос. Есть ли простой способ сделать это? Он не должен быть полностью идеальным, я хотел бы просто получить около 90% успеха, и я просто отмечу те, которые я «организовал».

Благодаря Ahead

+0

Нет, нет простого способа сделать это. Подход с регулярным выражением, вероятно, будет громоздким и, скорее всего, потерпит неудачу. Слишком много возможностей. Например, «128 Highway 37 South». Или «123 Main Street» и «123 North Main» являются тем же адресом. Или адрес, который вы видите в некоторых частях страны (например, в районе Солт-Лейк-Сити) "37 North, 12 West Parkland Ave." Вы можете осмотреть сервис (API Google Geocoding API) (https://developers.google.com/maps/documentation/geocoding/), например), который сделает это за вас. –

+0

Я получаю некоторый успех от использования регулярных выражений. Я доволен, если смогу, по крайней мере, организовать некоторые из адресов. Это было бы хорошим началом для фиксации остального. Я только что отбирал наиболее распространенных, таких как «streetNumber streetName streetType», который был бы чем-то вроде 123 street st. Я просто должен быть строгим с выражением регулярного выражения, поэтому он не включает слово «Север» в качестве названия улицы или чего-то подобного. Спасибо и сожалею о дублирующем сообщении, я искал до публикации, не уверен, как я пропустил эту другую должность. –

ответ

1

Регулярное выражение - лучшее решение. http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx

И для проверки регулярного выражения существует тег регулярного выражения в Visual Studio Add ins или даже онлайн-тестер регулярных выражений. Существует также журнал чит-листа Regex онлайн для быстрого источника для изучения.

+0

Это замечательно. Огромное спасибо. –

0

Я не думаю, что есть способ обойти это делать вручную, если вы не можете знать каждый возможный способ, которым это будет в настоящее время хранятся. т. е. вы можете легко разделить строку вокруг пробела, чтобы получить отдельные элементы, но для вашего пятого варианта вы не сможете этого сделать, поэтому вам придется вручную обрабатывать, если у него есть -. Но тогда вы можете столкнуться с проблемами, если название улицы включает в себя номер - и т. Д.

Было бы проще, если бы вы могли изменить сохраненные в данный момент элементы в более конкретном формате (даже если это только разделенные запятой предметы или пространство разделенное и т. Д. ...), то вы сможете легко манипулировать им, используя простые функции String и массивы.

Смежные вопросы