Извлечение текста из больших файлов

Мне нужно извлечь текст из больших файлов (максимальный размер 50 МБ). Файлы могут быть в формате doc, ppt, xls, txt или pdf. До сих пор я использовал Apache POI 'http://poi.apache.org/'

Для документов Microsoft Office и PDFBox для извлечения текста из PDF. Однако процесс извлечения становится медленным, поскольку файлы становятся большими, особенно со следующими файлами. Результаты, которых я достиг на данный момент:

1.PPTX — 45 МБ — 3 минуты примерно

2.PDF — 62 МБ — 2 минуты примерно

3.Docx — 32 МБ — примерно 15 секунд

4.XLS — 17 МБ — примерно 10 секунд

5.XLSX — 7 МБ — 20 секунд примерно

Мне нужно, чтобы процесс был быстрым. Какие API я могу использовать для достижения этой цели и какие передовые практики могут помочь мне повысить производительность моего приложения?


person Umar Iqbal    schedule 26.02.2014    source источник
comment
И сколько времени потребуется, чтобы прочитать 60 МБ файла .txt?   -  person Damian Leszczyński - Vash    schedule 26.02.2014
comment
Поскольку PDF — это формат, просто рисующий группы букв в заданных местах на странице, все эти группы букв должны быть найдены, отсортированы и склеены вместе, прежде чем вы получите свой текст. Это может занять некоторое время... в зависимости от используемой библиотеки PDF, безусловно, есть более быстрые и более медленные решения...   -  person mkl    schedule 26.02.2014
comment
Я ищу что-то быстрее, чем 2 минуты для файла размером 62 МБ.   -  person Umar Iqbal    schedule 26.02.2014


Ответы (2)


pptx, docx и xlsl — это zip-файлы с XML-файлами внутри (content.xml и sharedStrings.xml или около того). Если вам не нужен текст в контексте, то есть DOM (модель всего документа), вы можете сами обработать эти XML-файлы и последовательно проанализировать все.

Для PDF вы можете попробовать itext, последовательно читая PDF. На самом деле есть примеры экстракторов текста для нескольких библиотек PDF.


Извлечение текста из XML означает последовательное чтение текста XML и уделение внимания только частям текста между > и <.

Сложная часть — это xlsx, где значения ячеек являются общими: косвенная ссылка. Я бы предпочел использовать запрос JDBC, но это также требует времени. Есть несколько вариантов: мост ODBC-JDBC, и есть соответствующие драйверы.

Программирование действительно требует времени и должно выполняться на небольших образцах документов.

person Joop Eggen    schedule 26.02.2014
comment
Как я могу использовать XML? В прошлый раз я извлек некоторый текст из файла .xls с помощью Jet OleDB из Excel, но я не помню, насколько быстро это было. и, пожалуйста, можете дать мне оценку, сколько времени потребуется для извлечения текста с помощью xmls? - person Umar Iqbal; 26.02.2014
comment
Расширенный ответ; время выполнения должно быть значительно быстрее без учета OleDB или JDBC, но я вряд ли осмелюсь сказать, что оно будет быстрее более чем в четыре раза. Нет опыта работы с большими документами. - person Joop Eggen; 26.02.2014

Попробуйте Apache Tika. Tika используется для обнаружения и извлечения метаданных и структурированного текстового содержимого из различных документов с использованием существующих библиотек парсеров.

person SANN3    schedule 27.02.2014
comment
Он использует Apache POI в серверной части, которую я уже использую. Это не будет иметь никакого значения при повторном использовании POI с Tika. - person Umar Iqbal; 27.02.2014