лексеры/парсеры для (не)структурированных текстовых документов

Существует множество парсеров и лексеров для скриптов (то есть структурированных компьютерных языков). Но я ищу тот, который может разбить (почти) неструктурированный текстовый документ на более крупные разделы, например. главы, параграфы и т.

Человеку относительно легко идентифицировать их: где оглавление, благодарности или где начинается основная часть, и можно построить системы на основе правил для идентификации некоторых из них (например, абзацев).

Я не ожидаю, что он будет идеальным, но знает ли кто-нибудь о таком широком «блочном» лексере/парсере? Или не могли бы вы указать мне направление литературы, которая может помочь?


person wilson32    schedule 18.01.2010    source источник


Ответы (4)


Многие легкие языки разметки, такие как markdown (который, кстати, использует SO), реструктурированный текст и (возможно) POD похожи на то, о чем вы говорите. Они имеют минимальный синтаксис и разбивают ввод на разборные синтаксические части. Возможно, вы сможете получить некоторую информацию, прочитав об их реализации.

person Noufal Ibrahim    schedule 18.01.2010
comment
Я и забыл про POD! То, что мне действительно нужно, выглядит как комбинация POD, уценки и реструктурированного текста. Они определенно дали мне несколько указаний. Похоже, мне придется построить свой собственный. - person wilson32; 20.01.2010
comment
У вас уже есть текст или вы хотите начать с нуля? Возможно, вы можете преобразовать свой существующий документ (если он у вас есть) в ReSt или что-то еще и использовать стандартный парсер? - person Noufal Ibrahim; 20.01.2010
comment
Проблема в том, что мы понятия не имеем, как будет выглядеть новый входящий документ. Мы знаем, что процесс, который мы предполагаем, будет только полуавтоматическим. Я подозреваю, что будет проще создать анализируемый документ из копии оригинала, которую мы затем сможем использовать в качестве источника для любого соответствующего средства форматирования. - person wilson32; 20.01.2010
comment
Что ж, облегченный формат, подобный тем, которые я упомянул, будет для вас правильной отправной точкой. Попробуйте выполнить синтаксический анализ с помощью одного из них, он, вероятно, будет жаловаться на синтаксические ошибки, но выполнит некоторую обработку. Удачи! - person Noufal Ibrahim; 20.01.2010

  1. Определите стандарт аннотации, который указывает, как вы хотели бы разбить вещи.
  2. Перейдите на Amazon Mechanical Turk и попросите людей пометить 10 000 документов, используя ваш стандарт аннотаций.
  3. Обучите CRF (который похож на HMM, но лучше) на этих обучающих данных.

Если вы действительно хотите пойти по этому пути, я могу уточнить детали. Но это будет много работы.

person Joseph Turian    schedule 22.01.2010

Большинство программ типа lex/yacc работают с хорошо определенная грамматика. если вы можете определить свою грамматику в терминах формата, подобного BNF ( которые большинство парсеров принимают аналогичный синтаксис), вы можете использовать любой из них. Это может быть констатация очевидного. Однако вы все еще можете быть немного неясны в отношении «блоков» (токенов) текста, которые будут частью вашей грамматики. В конце концов, вы определяете правила для своих токенов.

Я использовал Parse-RecDescent Perl-модуль в прошлом с переменным успехом для подобных проектов.

Извините, это может быть не очень хороший ответ, но я больше делюсь своим опытом в подобных проектах.

person ziya    schedule 18.01.2010
comment
Lucene — это индексатор, не так ли? Он действительно что-то «анализирует»? - person Noufal Ibrahim; 18.01.2010
comment
Ты прав. Я думаю, я больше думал о том, какую функциональность даст вам «Lucene Analyzer» ... и, возможно, слишком много предполагал за этим вопросом. Дайте мне знать, если вы думаете, что это вводит в заблуждение. - person ziya; 18.01.2010
comment
Я приходил к такому выводу, но в крайнем случае задал вопрос. Возможно, мы сможем определить наши документы в какой-либо форме BNF, которую затем сможем использовать для их анализа. - person wilson32; 20.01.2010

попробуйте: pygments, геши или украсить

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

Ссылки:
gitorius использует prettify,
github использует pygments,
rosettacode использует geshi,

person Naveen    schedule 17.05.2010