2013-12-06 2 views
0

Я знаю, что на эту тему задано много вопросов. Я пытаюсь разобрать и получить уличные адреса с html-страницы. Формат этой страницы не соответствует никаким шаблонам. Может ли кто-нибудь помочь мне в работе с регулярным выражением, которое соответствует адресу улицы, независимо от количества тегов между ними? Есть ли другие способы сделать это иначе, чем использовать регулярные выражения?Анализ адреса улицы с использованием RegEx

+0

Если вы надеетесь иметь интересный/уязвимости ответа на свой вопрос, пожалуйста, дайте большой набор возможных строк. –

+0

Если формат не соответствует шаблону, как вы ожидаете, что сможете сопоставить его с регулярным выражением? Просьба привести несколько примеров ожидаемого ввода/вывода. – Keppil

+0

@ Keppil: если строки находятся в конечном пространстве случайных форматов, это следует за шаблоном. –

ответ

2

Прежде чем вы получите все традиционные, позвольте мне поделиться своим опытом. Таким образом, я проанализировал более 1 миллиона веб-страниц на Java. Когда мне нужны маленькие кусочки на странице, они идеально сочетаются с заменой на теги. Фактически, он эффективнее и быстрее, особенно при использовании отличной функции replaceAll() Java для стрижки тегов. Постройте вилочный пул обоих и проверите некоторый синтаксический анализ, вы не поверите своим глазам. Я добавил эту часть в конце. Это не полное регулярное выражение, а отправная точка, поскольку для его создания потребуется несколько проб и ошибок. Я считаю, что это заявление было кучей страниц, не имеющих четкого маршрута к адресу.

Итак, да, есть способы. Ниже следует немного введение в размышления об этом в регулярном выражении.

Слова и группы слов всегда в образе, иначе они не читаются. Тем не менее, есть несколько замечаний. Адреса могут очень сильно, поэтому важно продолжить создание регулярного выражения. Следующее, если у вас есть доступ к движку CAS, используйте его для всего, что вы получаете. Он стандартизирует ваш адрес.

Как вы, вы пробовали xml, он будет сузить все и может помочь избавиться от тегов перед форматированием. Тебе нужно сузить все. Если вы используете java или python, запустите этот шаг в ForkJoinPool или MultiprocessingPool.

Ваш процесс должен быть:

  1. Узкий если возможно
  2. Выполнение регулярных выражений, который использует форматирование

Наконец, здесь regex cheat sheet.

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

Сказанное так, адрес имеет формат цифр, затем адрес улицы и номер квартиры практически ничего, затем город, штат, а затем почтовый индекс. В основном это \ d +, тогда любая комбинация букв и цифр.

Так (в Java с двойной обратной косой черты), чтобы начать Вас:

[\\d]+[A-Za-z0-9\\s,\\.]+ 

Если вы хотите начать с, но исключить теги, чтобы сузить свой поиск, если не используется XML, использование:

(?<=start)[\\d]+[A-Za-z0-9\\s,\\.]+?(?=end) 

Html страницы всегда кажется, теги, так что будет что-то вроде

(?<=>)[\\d]+[A-Za-z0-9\\s,\\.]+?(?=<) 

Вы можете быть в состоянии использовать почтовый индекс в качестве конечного места, если есть многострочный zipcode.

[\\d]+[A-Za-z0-9\\s,\\.]+?[\\d\\-]+ 

В качестве последней ноты, вы можете цепи вместе регулярные выражения с вертикальной чертой, например:

(?<=start)[\\d]+[A-Za-z0-9\\s,\\.]+?[\\d\\-]+|(?<=start)[A-Za-z0-9\\s,\\.]+?(?=end) 

Если это не достаточно узки Есть несколько дополнительных шагов:

  1. сравнение ваши результаты (средняя длина слова и т. д.) и выбросить любые большие выбросы
  2. напишите сценарий форматирования на сайт, чтобы сделать очистку, которая использует один или несколько -понимание, чтобы заменить то, что вам не нужно.

Возможно, вам также понадобится снять html. Запустите это регулярное выражение в инструкции replace, чтобы сделать это.

<.*?> 

Если у вас возникли проблемы, использовать что-то вроде my regex tester (веб-сайт не мой собственный), чтобы построить свой регулярное выражение.

+0

К сожалению, этот ответ, хотя и подробно, делает * много * предположений. – Matt

+0

Кроме того, объявление общедоступной службы: [пожалуйста, не используйте регулярное выражение для удаления HTML] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454 # 1732454) ... – Matt

+0

... «Конечно, теперь мне плохо, потому что я не говорил о том, почему этот ответ хорош! И это Рождество! Я не собираюсь быть такой ухмылкой.Итак: ваш ответ в основном находится на месте до шестого абзаца, где вы начинаете описывать форматы адресов. Здесь все усложняется. Но ваши советы по использованию XML и потоковой передачи могут быть очень эффективными для получения более точных и эффективных результатов при правильном выполнении. И реквизит для усилия по описанию процесса мышления регулярного выражения. – Matt

2

Поработав над этой проблемой довольно подробно на SmartyStreets, я расскажу вам "NO" to parsing/finding street addresses with a regex.

Адреса не являются обычным языком, а не может соответствовать регулярному выражению.

Для решения проблемы мы разработали an API which actually finds and extracts addresses с особенно высокой точностью. Это бесплатно для использования с небольшим объемом. (Это было не простую проблему для решения.) Вы можете попробовать это бесплатно на демо-странице. И нет, это не ходатайство. Если вы хотите узнать больше об уличных адресах в любых деталях от очень простых до очень технических, просто напишите нам, потому что мы хотим информировать сообщество об адресах.

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

This answer to a very similar question связан, и вы можете счесть это полезным. Другие ответы выделить некоторые важные моменты, о трудностях и решениях для разбора адреса улиц ...

enter image description here

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