shiza
На данный момент, остановился на том, что написал небольшой DFA (детереминированого автомата состояний).
Но в нем есть минус в том, что чтобы задать условия прасинга - надо описывать его в конструкция питона. Что не сложно, но кода много. И пока задаешь - мысль расползается.
Теперь понятно, почему в регулярках и в других подобных парсерах используется специальный синтаксис.
А можно посмотреть код DFA? Насколько он сложен? Пытался свой написать, упрощал структуру как мог, но очень быстро запутался в условиях и бросил. Что-то изменять, это полдня надо снова вникать в написанное.
Постоянная головная боль с разбором текстов. Сейчас сделал разбор текста с finite state machine, но на языке J.
Убил все выходные, уж очень синтаксис языка непривычный. В этом языке есть готовый оператор для реализации конечного автомата, он включает в себя задание таблицы переходов по условию из одного состояния в другое.
http://kinetic.dnsalias.org/~metlov/dictionary/d332.htm В каждой ячейке таблицы два числа - первое указывает на номер строки и меняет состояние а второе на номер функции, например 0 - ничего не делать, 1 - запомнить индекс начала слова, 2 - запомнить слово (атом, строку и т.п.) и создать индекс для следующего, 3-запомнить слово, но следующее не задавать. На входе уже не текст даже а подготовленный пошагово одномерный массив из чисел. Сделать его пошагово - элементарно и прозрачно, легко понять какое число какому условию сопоставлено.
В mxTextTools по сути такой же конечный автомат, но из-за того что описание условных функций, которые разбирают текст и операторы перехода расположены в одной таблице - все несколько запутано для восприятия.
Таблицу я для наглядности задаю в экселе. Пробовал задавать условия регекспами, получалось медленнее, обошелся пока родными для языка средствами. Думается подобный автомат можно сделать на питоне, если его уже не создали. Он несколько упрощен, можно сказать до предела, но из-за этого понятнее. Но и это не панацея, в доках сказано что конечнй автомат очень быстр и прост, но тем не менее для сложных случаев таблица состояний становится огромной и чтобы её задать.. в общем вручную это трудно. Поэтому предлагают использовать готовые лексеры и парсеры текста, т.е. на новый круг, а с регекспами у меня как то не сложилось пока :( - простые случаи разбираю а вот свои рабочие затык уже.