Java / Talend Разбиение строки на основе условия и данных очистки - PullRequest
0 голосов
/ 13 мая 2019

У меня есть список строк необработанных данных.Каждая строка может содержать название компании + адрес стресса + город + провинция в Talend 7. Они разделены в строке конвейером.

Общее количество строк составляет 200 000.

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

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

  1. "Mackenzie Health | 10 Trench St. | Richmond Hill ONL4C 4Z3 "
  2. " "
  3. " Оздоровительно-оздоровительный центр | Университет Торонто | Колледж-стрит, 214, ауд. 111 | Toronto ON M5T 2Z9 "
  4. " 400 Walmer Road |Suite 125 | Toronto ON M5P 2X7 "
  5. " Больница для больных детей | Кафедра неотложной медицинской помощи | Атриум 2 этажа, кабинет 2830 | 555 University Ave | Toronto ON M5G 1X8 "

Я подумываю об использовании tJava или tJavaRow и написании некоторого Java-кода, используя метод contains, и я могу проверить, содержит ли строка одно из следующих слов: Avenue, Ave, Road, Rd, Street и, St. за исключениемперед этими словами есть место.

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

Примеры:

"Mackenzie Health | 10 Trench St. | Richmond Hill ON L4C 4Z3" перед улицей есть только одна труба 10 TrenchSt., так что название компании Mackenzie Health

«Оздоровительно-оздоровительный центр | Университет Торонто | 214 College Street, Room 111 | Toronto ON M5T 2Z9» есть две трубы перед адресом улицы, поэтому названиеКомпания: Центр здоровья и здоровья Университета Торонто

"400 Walmer Road | Suite 125 | Toronto ON M5P 2X7" перед ним нет трубы, поэтому нет никакого имени

"Больница для больных детей | Отделение неотложной медицинской помощи | Атриум 2-го этажа, кабинет 2830 | Университетский проспект 555 | Торонто ON M5G 1X8 «Перед ним три трубы, но в подстроке, перед ней, есть слово номер.Таким образом, название компании - Больница для больных детей, отделение неотложной медицинской помощи.

Цените любую идею и / или новое решение также

1 Ответ

2 голосов
/ 14 мая 2019

Вы можете создать метод Java в подпрограмме Talend на основе сопоставления с шаблоном, используя группы захвата (можно вызывать в компоненте tMap или в другом месте).

https://www.tutorialspoint.com/javaregex/javaregex_capturing_groups.htm

ВВ вашем случае вы можете использовать следующий пример RegEx (кажется, чтобы решить 5 приведенных примеров):

Это регулярное выражение группируется по последнему вхождению (справа):

^(.*\|)*((?i).*(room|st.|street|road|avenue).*\|(?-i).*)$

У меня естьпротестировал RegEx с помощью https://regex101.com/. Группа 1 - это ваше имя, Группа 2 - ваш адрес.Вы можете удалить нежелательные каналы при дальнейшей обработке.

Это регулярное выражение сгруппировано по первому вхождению (слева):

^((((?!room|street|st.|road|avenue).)*\|)|)*((?i).*(room|street|st.|road|avenue).*\|(?-i).*)$.

Группа 2 и Группа 4 теперь имеют данные.

Примечание: Все кредиты предназначены для Мо2, я просто скопировал его ответ из комментария здесь, надеясь, что он будет полезен для других.

ИСПРАВЛЕНО: проблема в RegEx со звездой, путаница с тэгами stackoverflow.

Надеюсь, что это может быть полезно для вас.Скажи мне, если тебе нужна дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...