Как вы относитесь к пакетной обработке плохо отформатированных текстовых файлов? - PullRequest
3 голосов
/ 30 ноября 2010

Люди много жалуются на XML, но, по сравнению с EDI и некоторыми проприетарными форматами файлов, с которыми я сталкивался в своей карьере, я думаю, что XML - это счастье. Работа, которую я проделал над импортом файлов данных из Automotive Comparative Raters, каждый со своим собственным креативным и кошмарным форматом файлов, все еще вызывает у меня кошмары.

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

Ответы [ 4 ]

2 голосов
/ 30 ноября 2010

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

Вот несколько примеров с ocamllex (генератор лексеров, предоставляемый с OCaml ):

  • ocamllex учебное пособие с некоторыми примерами.
  • обработка genbank свободно отформатированных текстовых файлов (другое ссылка , которая лучше иллюстрирует точку, но затрудняется диалогом javascript).

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

1 голос
/ 04 октября 2014

Когда мне нужно разобрать плохо отформатированный текст, я использую Perl и Marpa , обычный синтаксический анализатор BNF . Посмотрите на текст, найдите шаблоны, опишите их как правила BNF, например,

pattern_name ::= pattern_symbol1 pattern_symbol2 ... 

или для лексемы

lexeme ~ lexeme_symbol1 lexeme_symbol2 ... 

вы можете использовать строки в одинарных кавычках и классы символов для описания лексем в тексте грамматики BNF. Передайте BNF Marpa, определите семантические действия и оцените анализ или просто обработайте ast, чтобы получить результаты.

Примеры сценариев Perl, использующих Marpa для анализа плохо отформатированного текста, здесь, в SO:

Разбор значений из блока текста на основе определенных ключей

Problem Category = "Human Endeavors "
Problem Subcategory = "Space Exploration"
Problem Type = "Failure to Launch"
Software Version = "9.8.77.omni.3"
Problem Details = "Issue with signal barrier chamber."

извлечено из:

Problem Category: Human Endeavors Problem Subcategory: Space ExplorationProblem Type: Failure to LaunchSoftware Version: 9.8.77.omni.3Problem Details: Issue with signal barrier chamber.

Разбор скобок с помощью sed с помощью регулярного выражения

key1
key2
key3
key4
key5
key6
key7

извлечено из

dummy
(key1)
(key2)dummy(key3)
dummy(key4)dummy
dummy(key5)dummy))))dummy
dummy(key6)dummy))(key7)dummy))))

Как извлечь информацию о корпоративных облигациях с помощью машинного обучения

ABC 2.5 19
XYZ 6.5 15

извлечено из

<[/] Trading 10mm ABC 2.5 19   05/06 mkt  can use 50mm>
<XYZ 6.5   15 10-2B    106-107                B3   AAA- 1.646MM 2x2>

Надеюсь, это поможет.

1 голос
/ 30 ноября 2010

Perl / Python, медленно наращивайте функциональность, оставляйте худшие в качестве тестового примера, много кофе

0 голосов
/ 30 ноября 2010

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

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