2011-12-22 2 views
4

Мне нужно извлечь простой текст из загруженных документов, чтобы сделать их доступными для поиска. Документы могут быть MS Word или pdf (отсканированные или содержащие текст). Данное приложение работает в стеке LAMP, но установка другого программного обеспечения может быть вариантом. Есть ли какой-либо инструмент, служба, библиотека или комбинация тех, которые вы могли бы рекомендовать для выполнения этой задачи?Как извлечь/распознать текст из документов?

+1

Для отсканированных документов думаю, вам понадобится немного [OCR] (http://en.wikipedia.org/wiki/Optical_character_recognition) – BoltClock

+0

Извлечение текста из файлов .doc старого стиля серьезная боль. Они не должны быть легко разбираемыми. .docx несколько проще, поскольку они просто zip-файлы .xml по большей части. –

+0

@BlotClock Я знаю. Я не упоминал об этом явно, потому что предположил, что это очевидно. – Maarten

ответ

4

Вы можете использовать комбинацию оболочки утилит, как pdftotext для PDF-файлов, wvWare для КОХ, docx2txt.pl для DOCX-х, как и textractor rubygem делает.

# on Ubuntu 
apt-get install wv xpdf-utils links 

Есть также родные классы PHP для извлечения PDF и docx.

Другой рубигем, который даже делает OCR для вас, хотя Tesseract, является docsplit.

Это может быть неплохо рассмотреть Solr для индексирования и поиска. Вы можете использовать плагин Solr Cell для индексации и поиска документов Word, PDF и других. Я успешно использую его в одном из моих проектов. Solr Cell основан на нескольких проектах, таких как Apache POI, Tika и PDFBox.

Сложная часть состоит в том, чтобы настроить все зависящие от ячейки банки и схему solr, а также выяснить параметры запроса индексирования, но все они могут быть продуманы в документации по вики. Here's мои банки и схемы, чтобы вы начали, соответствующая часть схемы - это строка, содержащая «привязанность».

Solr Cell не делает OCR, однако. Сначала вы должны использовать OCR Engine, чтобы сделать их доступными для поиска.

Для OCR вы можете использовать OpenSource Engine Tesseract, который разработан Google, или вы можете взглянуть на коммерческий движок Abbyy. Оба они используются как служебные utils, которые вы можете запускать из своих php-скриптов. Чтобы получить сопоставимые результаты от Tesseract как от Abbyy, вам нужно будет выполнить предварительную и постпроцессию 1. Есть также облачные сервисы, которые могут быть более легким вариантом. Например, Wisetrend и Abbyy Cloud. В настоящий момент последний находится в состоянии бета-тестирования, поэтому он бесплатный, и он готов к работе PHP code samples.

+0

У Solr Cell есть OCR для извлечения текста из отсканированных PDF-файлов? – Tomato

+0

Я совсем не уверен, но я думаю, что нет. Я считаю, что OCR должно быть сделано дальше по трубопроводу, и я слышал, что [tesseract] (http://code.google.com/p/tesseract-ocr/) - отличный бесплатный инструмент для этого. – clyfe

+0

Тогда это просто не будет работать для отсканированных PDF-файлов. Они должны быть преобразованы сначала в PDF с возможностью поиска (с добавленным текстовым слоем) с помощью некоторого программного обеспечения OCR. – Tomato

0

Я не знаю ни одного программного обеспечения, которое преобразует PDF в текст, но для части MS Word вы можете использовать Apache POI: http://poi.apache.org/, который построен в JAVA, поэтому вам нужно будет выполнить двоичный файл из вашего PHP-файла чтобы он работал.

Другой вариант - использовать JODConverter (который я сейчас использую для этой цели) http://code.google.com/p/jodconverter/ Так что если Apache POI не работает, я знаю, что jodconverter делает. Я использую версию 3.0.

В моем PHP-коде я сохраняю загружаемый файл и выполняю двоичный код преобразователя в файле в каталоге tmp, который создаст новый файл в каталоге tmp, и я вытащу обычный текст из нового файла.

+0

Примечание: возможно, более эффективно вводить файл через stdin, поэтому вам не нужно сначала сохранять его на диск. Если рассматриваемая uitility не предоставляет для этого переключатель cli, вы можете использовать/dev/stdin под Linux. – Maarten

3

Насколько я могу судить, с OCR на PHP мало что можно сделать. Лучшим решением будет использование облачного сервиса - веб-api, который позволяет загружать изображение и отправлять вам данные OCR. Попробуйте www.ocrsdk.com, это облачный OCR SDK, недавно запущенный ABBYY. Теперь он находится в бета-версии, поэтому он полностью свободен в использовании и имеет готовый к использованию PHP code samples.Disclamer: i work @ ABBYY

+0

Интересно! Так как это только часть решения, однако, я отредактировал другой ответ вместо этого (редактирование все еще ожидает). Надеюсь, ты простишь меня. – Maarten

Смежные вопросы