Как разделить текст на логические блоки?

Добрый день!

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

Более конкретно: есть страховой договор. В нем есть перечисление тех рисков, которые покрываются, и тех, которые не покрываются. При этом если покрывается пожар, то это может быть прописано не просто фразой "покрывается пожар" (тогда бы я просто бил текст на абзацы и задача решена), но это покрытие пожара может быть разнесено на несколько пунктов с подпунктами (хорошо хоть они идут подряд, а не в разных местах текста). Для программы - это разные абзацы, для человека - единый логический блок текста.

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

Что затрудняет задачу: от договора к договору правила структурирования могут быть разные. Где-то весь текст - это по сути список и можно взять просто определенный уровень списка и назначить его в качестве искомой минимальной логической составляющей текста. В таком случае все подпункты уровня ниже заданного могут быть просто добавлены к тексту, что на уровень выше без нарушение логичности разбиения. Но может быть и не так.
Список может быть не нумерованным, а буквенным. Списка может не быть вовсе - просто каждый пункт начинается с номера (или с буквы).
Или с определенного количества пробелов или знаков табуляции.
Или вообще отдельные логические блоки выделяются ЗАГОЛОВКАМИ (строка текста, состоящая из всех прописных букв).

Как быть в этом случае? Какой алгоритм может подойти? Или может быть ML модель?

Буду благодарен за подсказки!
  • Вопрос задан
  • 934 просмотра
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
тамита парсер ближе всего
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы