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