Извличане на текст от големи файлове

Трябва да извлека текст от големи файлове (макс. ограничение 50MB) Файловете могат да бъдат във формат doc, ppt, xls, txt или pdf. Досега използвах Apache POI 'http://poi.apache.org/'

За документи на Microsoft Office и PDFBox за извличане на текст от PDF. Процесът на извличане обаче се забавя, тъй като файловете стават големи, особено със следващите файлове. Резултати, които постигнах досега:

1.PPTX - 45MB - 3 минути apx

2.PDF - 62 MB - 2 минути apx

3.Docx - 32MB - 15 секунди apx

4.XLS - 17MB - 10 секунди apx

5.XLSX - 7MB - 20 секунди apx

Имам нужда процесът да е бърз. Кои API мога да използвам, за да постигна това, и какви най-добри практики могат да ми помогнат да подобря производителността на моето приложение?


person Umar Iqbal    schedule 26.02.2014    source източник
comment
И колко време отнема четенето на 60 MB .txt файл?   -  person Damian Leszczyński - Vash    schedule 26.02.2014
comment
Тъй като PDF е формат, който просто чертае групи букви на персонализирани позиции в страницата, всички тези групи букви трябва да бъдат намерени, сортирани и залепени заедно, преди да получите своя текст. Това може да отнеме известно време... в зависимост от използваната PDF библиотека, но със сигурност има по-бързи и по-бавни решения...   -  person mkl    schedule 26.02.2014
comment
Със сигурност търся нещо по-бързо от 2 минути за 62MB файл.   -  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, но не помня колко бързо беше. и любезно може ли да ми даде приблизителна оценка колко време ще отнеме извличането на текст с помощта на xml? - 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