Лексеры / парсеры для (не) структурированных текстовых документов
Существует множество синтаксических анализаторов и лексеров для скриптов (т.е. структурированных компьютерных языков). Но я ищу тот, который может разбить (почти) неструктурированный текстовый документ на большие разделы, например, главы, абзацы и т. Д.
Для человека относительно легко идентифицировать их: где Оглавление, подтверждения или где начинается основная часть, и можно построить системы на основе правил, чтобы идентифицировать некоторые из них (например, параграфы).
Я не ожидаю, что он будет идеальным, но кто-нибудь знает о таком широком "основанном на блоках" лексере / парсере? Или вы могли бы указать мне направление литературы, которая может помочь?
4 ответа
Многие легковесные языки разметки, такие как разметка (которую, кстати, использует SO), реструктурированный текст и (возможно) POD, похожи на те, о которых вы говорите. Они имеют минимальный синтаксис и разбивают входные данные на синтаксически разбираемые фрагменты. Вы можете получить некоторую информацию, прочитав об их реализации.
- Определите стандарт аннотации, который указывает, как вы хотите разбить вещи на части.
- Перейдите к Amazon Mechanical Turk и попросите людей пометить 10K-документы, используя ваш стандарт аннотаций.
- Тренируйте CRF (который похож на HMM, но лучше) на этих тренировочных данных.
Если вы действительно хотите пойти по этому пути, я могу уточнить детали. Но это будет много работы.
Большинство программ lex/yacc работают с четко определенной грамматикой. если вы можете определить свою грамматику в формате BNF (который большинство синтаксических анализаторов принимают схожим синтаксисом), то вы можете использовать любой из них. Это может указывать на очевидное. Однако вы все еще можете быть немного нечеткими в отношении "блоков" (токенов) текста, которые будут частью вашей грамматики. Ведь вы определяете правила для своих токенов.
В прошлом я использовал Perl-модуль Parse-RecDescent с разным уровнем успеха для подобных проектов.
Извините, это может быть не очень хороший ответ, но больше я делюсь своим опытом в подобных проектах.