Раздел распознавания в тексте, извлеченном из MS-Word - PullRequest
0 голосов
/ 27 января 2020

Использование Apache POI (или docx4j ) для извлечения текста из документов Microsoft Word DOCX (XWPF), что является лучшим методом для определения ограничений различных разделов ?

Проверка стилей абзацев (например, с помощью метода XWPFParagraph.getStyle() в POI) во многих случаях возвращает null, поэтому требуются дополнительные или альтернативные подходы.

Один из таких подходов заключается в проверка на изменение стиля шрифта или размера шрифта, например, в POI:

 public static List<String> getStyles(XWPFRun run) {
     List<String> styles = new ArrayList<>();
     if (run.is bold()) {
        styles.add("bold");             
     }
     if (run.isItalic()) {
         styles.add("italic");
     }
     if (run.getUnderline() != UnderlinePatterns.NONE) {
         styles.add("underline");
     }
     if (run.isHighlighted()) {
         styles.add("highlighted");
     }
     return styles;
 }

 public static int getfontSize(XWPFRun run) {
     int size = run.getFontSize();
     if (size == -1) {
         return run.getDocument().getStyles().getDefaultStyle().getFontSize();
     }
     return size;
 }

Другой подход, который можно использовать в сочетании с вышеизложенным, заключается в извлечении оглавления (TO C) посредством проверки для TOCx стилей абзаца (или через объект SDT в Apache POI), а затем попытайтесь сопоставить текст каждой записи TO C в однострочных абзацах. Однако Thατ осложняется наличием нескольких уровней абзацев в оглавлении и потенциальными «ложными срабатываниями» в остальной части текста.

Например, в следующем TO C a текстовый поиск для каждой из записей (например, «Раздел A», «Подраздел ii») может быть выполнен по абзацам и сопоставлять абзацы, где единственное содержание идентично (или почти идентично, согласно некоторым критерии) ДО C текст записи.

Section A . . . . . . . . . .  3
    Subsection 1  . . . . . .  5
    Subsection 2  . . . . . .  6
        Sub-subsection i  . .  7
        Sub-subsection ii . .  8
    Subsection 3  . . . . . .  9
Section B . . . . . . . . . . 10

Очевидно, что процесс будет heuristi c, и он требует более умных методов (например, НЛП и / или НЛУ) для получения более точных результатов, но в отсутствие таких методов, есть ли «рекомендуемый» способ (или, еще лучше, примеры кода) для решения проблемы?

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