Мне нужно разбить записи необработанных данных WHOIS на поля. Не существует единого согласованного формата для необработанных данных, и мне нужно поддерживать все возможные форматы (мне известно около 40 уникальных форматов). Например, вот выдержки из 3 разных записей необработанных данных WHOIS:
Created on: 2007-01-04
Updated on: 2014-01-29
Expires on: 2015-01-04
Registrant Name: 0,75 DI VALENTINO ROSSI
Contact: 0,75 Di Valentino Rossi
Registrant Address: Via Garibaldi 22
Registrant City: Pradalunga
Registrant Postal Code: 24020
Registrant Country: IT
Administrative Contact Organization: Giorgio Valoti
Administrative Contact Name: Giorgio Valoti
Administrative Contact Address: Via S. Lucia 2
Administrative Contact City: Pradalunga
Administrative Contact Postal Code: 24020
Administrative Contact Country: IT
Administrative Contact Email: [email protected]
Administrative Contact Tel: +39 340 4050596
---------------------------------------------------------------
Registrant :
onse telecom corporation
Gangdong-gu Sangil-dong, Seoul
Administrative Contact :
onse telecom corporation [email protected]
Gangdong-gu Sangil-dong, Seoul,
07079976571
Record created on 19-Jul-2004 EDT.
Record expires on 19-Jul-2015 EDT.
Record last updated on 15-Jul-2014 EDT.
---------------------------------------------------------------
Registrant:
Name: markaviva comunica??o Ltda
Organization: markaviva comunica??o Ltda
E-mail: [email protected]
Address: RUA FERNANDES LIMA 360 sala 03
Address: 57300070
Address: ARAPIRACA - AL
Phone: 55 11 40039011
Country: BRASIL
Created: 20130405
Updated: 20130405
Administrative Contact:
Name: markaviva comunica??o Ltda
Organization: markaviva comunica??o Ltda
E-mail: [email protected]
Address: RUA FERNANDES LIMA 360 sala 03
Address: 57300070
Address: ARAPIRACA - AL
Phone: 55 11 40039011
Country: BRASIL
Created: 20130405
Updated: 20130405
Как видите, повторяющегося шаблона нет. Мне нужно извлечь такие поля, как «Имя регистранта», «Адрес регистранта», «Имя администратора», «Город администратора» и т. д.
Сначала я попробовал базовый метод извлечения поля, основанный на разбиении строки по первому найденному двоеточию, но он работает только тогда, когда префиксы строк различны, инъективны (две строки с одинаковым префиксом не существуют) и, ну, в общем, разделены двоеточие... (что не всегда так)
Теперь я мог бы просмотреть форматы один за другим и попытаться придумать регулярное выражение для каждого из них, но это потребовало бы много времени, которого у меня нет. Интересно, есть ли способ автоматически анализировать и обрабатывать блоки текста как «фрагмент» на основе контекста (в отношении их интервалов и общих повторяющихся слов, таких как «регистрант» или «администратор») и анализировать их соответствующим образом. НЛП Может быть?
Я буду рад услышать любые идеи, так как я здесь как бы в тупике. Спасибо