Когда мне нужно разобрать плохо отформатированный текст, я использую 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.
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>
Надеюсь, это поможет.