Можно ли извлечь текст за страницей для файлов word / pdf с помощью Apache Tika? - PullRequest
10 голосов
/ 29 апреля 2011

Кажется, что вся документация, которую я могу найти, предполагает, что я могу извлечь только содержимое всего файла. Но мне нужно извлечь страницы по отдельности. Должен ли я написать свой собственный парсер для этого? Есть какой-то очевидный метод, который мне не хватает?

Ответы [ 3 ]

6 голосов
/ 08 июня 2011

На самом деле Tika обрабатывает страницы (по крайней мере, в формате pdf), отправляя элементы <div><p> до начала страницы и </p></div> после окончания страницы. Вы можете легко настроить количество страниц в вашем обработчике, используя это (просто считая страницы, используя только <p>):

public abstract class MyContentHandler implements ContentHandler {
    private String pageTag = "p";
    protected int pageNumber = 0;
    ...
    @Override
    public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException  {  

        if (pageTag.equals(qName)) {
            startPage();
        }
    }

    @Override
    public void endElement (String uri, String localName, String qName) throws SAXException {  

        if (pageTag.equals(qName)) {
            endPage();
        }
    }

    protected void startPage() throws SAXException {
    pageNumber++;
    }

    protected void endPage() throws SAXException {
    return;
    }
    ...
}

При выполнении этого с pdf вы можете столкнуться с проблемой, когда парсер не отправляет текстовые строки в правильном порядке - см. Извлечение текста из файлов PDF с Apache Tika 0.9 (и PDFBox под капотом) on как справиться с этим.

5 голосов
/ 25 июля 2013

Вы можете получить количество страниц в PDF-файле, используя метаданные объекта xmpTPg:NPages, как показано ниже:

Parser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
ParseContext parseContext = new ParseContext();
parser.parse(fis, handler, metadata, parseContext);
metadata.get("xmpTPg:NPages");
5 голосов
/ 29 апреля 2011

Вам нужно будет работать с базовыми библиотеками - Тика ничего не делает на уровне страницы.

Для файлов PDF PDFBox должен быть в состоянии дать вам некоторые элементы страницы.Для Word HWPF и XWPF из Apache POI на самом деле не делают вещи на уровне страницы - разрывы страниц не сохраняются в файле, а вместо этого должны вычисляться на лету на основе текста + шрифты + размер страницы ...

...