Nano Hash - криптовалюты, майнинг, программирование

Разбор Street Address Oracle и удаление нежелательных текстов

Я новичок в Oracle, и мне нужно проанализировать адрес улицы США из строки, я попробовал пару вариантов с regexp substr, но не дал желаемого результата.

Вот несколько примеров из текстовой строки.

xyz 123 se stark st костюм 401
xyx 123 39 авеню ne 2nd flr n-3
xyz 213 небраска мужество путь e-1

И мой результат должен быть таким:
123 se stark st
123 39th Avenue ne
213 nebraska мужественный путь

Мой SQL до сих пор:

SELECT UPPER (
          REGEXP_SUBSTR (REPLACE ('xyz 2551 38th ave ne tc 2', 'xyz '),
                         '((^[0-9]{1,9}+[ ]+[0-9]{1}[/]+[0-9]{1})|(^[0-9]+))'))
          AS houseno,  
       TRIM (
          UPPER (
             REGEXP_SUBSTR (
                REPLACE ('xyz 2551 38th ave ne tc 2', 'xyz '),
                '[^0-9]+((1( )st|1st)|(2( )nd|2nd)|(3( )rd|3rd)|([1234567890]+( )th|[1234567890]+th)) +(ave(nue)?|st(reet)?|boulevard|blvd)[[:print:]]*|P(.)O(.)( )+Box( )[0-9]+|[a-z][[:print:]]*',
                1,
                1,
                'i')))
          AS street_addrerss,    
       UPPER (REPLACE ('xyz 2551 38th ave ne tc 2', 'xyz ')) AS orginal_text
  FROM DUAL;

Заранее спасибо!!

03.08.2016

  • Это звучит несправедливо. Извлечение адреса из строк, как вы показываете, - очень сложная проблема - они дали ее новичку в Oracle, не предложив, как ее решить? Как вы должны распознать, где адрес, а где ненужный текст? Они дали какие-то правила для этого? 03.08.2016
  • Требование состоит в том, чтобы извлечь почтовый адрес из строки и загрузить эти данные в базу данных Oracle. Их не беспокоит адресная строка 2. 03.08.2016
  • Я думал, что мой вопрос легко понять, но я попробую еще раз. Глядя на ваши входные строки, как вы узнаете, где начинается адрес улицы (строка 1) и где он заканчивается? Например: вы можете сказать, что адрес начинается с первой цифры в строке. Справедливо; значит ли это, что у вас не может быть цифр в мусоре ПЕРЕД адресом? Всегда? Хорошо, если это можно гарантировать, это хорошо и полезно. Тогда как определить, где КОНЧАЕТСЯ адрес и начинается остальной мусор? 03.08.2016
  • Входная строка имеет префикс из 3 букв и является «мусором», а наша адресная строка 1 должна начинаться с цифры (номер дома), как вы сказали, у нас нет возможности определить, где заканчивается адрес и где начинается «мусор». 03.08.2016

Ответы:


1

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

Он также предполагает, что все во входной строке написано в нижнем регистре (если нет, вы можете применить нижний регистр к входной строке, а затем инициализировать полученный адрес — я не буду об этом беспокоиться). Если вам НЕ нужна терминальная точка (.), независимо от того, содержит ее адрес или нет, вы можете удалить .? с конца строки поиска.

with
     input_strings ( str ) as (
       select 'xyz 123 se stark st suit 401'     from dual union all
       select 'xyx 123 39th ave ne 2nd flr n-3'  from dual union all
       select 'xyz 213 nebraska courage way e-1' from dual union all
       select '2 new way blvd. apt 33'           from dual
     )
select regexp_substr(str, '\d.*(st|str|street|av|ave|avenue|way|rt|route|blvd).?') 
                                                                               as address
from   input_strings
;

ADDRESS
------------------------------
123 se stark st
123 39th ave
213 nebraska courage way
2 new way blvd.
03.08.2016
  • Большое спасибо, это сработало. Я добавил оставшиеся возможные конечные строки и увидел желаемый результат. 03.08.2016

  • 2

    Предполагая, что вы хотите вернуть все после первого пробела до пробела номер 5.

    Позиция первой клетки: instr(<string>,' ',1,1) Позиция пятой клетки: instr(<string>,' ',1,5)

    Используйте функцию substr, чтобы получить нужную часть строки.

    select substr('xyz 123 se stark st suit 401'
                 ,instr('xyz 123 se stark st suit 401', ' ') + 1
                 ,instr('xyz 123 se stark st suit 401', ' ', 1, 5) - instr('xyz 123 se stark st suit 401', ' ') - 1)
      from dual
    
    03.08.2016
  • Это нежизнеспособное решение, я согласен, что оно работает с определенными сценариями, но не со всеми данными, которые у меня есть. 03.08.2016
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..