Сохраните двоичный файл в SQL Server как BLOB и текст (или получите текст из полнотекстового индекса) - PullRequest
2 голосов
/ 26 марта 2010

В настоящее время мы сохраняем файлы (PDF, DOC) в базе данных как поля BLOB. Я хотел бы иметь возможность получить необработанный текст файла, чтобы иметь возможность манипулировать им для выделения совпадений и других функций.

Кто-нибудь знает простой способ разбора файлов и сохранения необработанного текста при сохранении с помощью кода SQL или .net? Я обнаружил, что у Adobe есть утилита фильтрования, которая преобразует PDF в текст. Filtdump кажется инструментом командной строки, и я не вижу способа использовать файловый поток. И каким будет экстрактор для документов Office и других типов файлов?

-или-

Есть ли способ извлечь необработанный текст из полнотекстового индекса SQL без использования сторонних фильтров?

Обратите внимание, что я пытаюсь создать решение .net & MSSql без необходимости использования стороннего инструмента, такого как Lucene

Ответы [ 5 ]

3 голосов
/ 26 марта 2010

Если нет необходимости осуществлять потоковую передачу непосредственно с SQL Server в ваше приложение, сложная часть - это анализ форматов файлов PDF или DOC.

Библиотека iTextSharp предоставит вам доступ к внутренностям PDF-файла:

http://itextsharp.sourceforge.net/

Вот коммерческий продукт, который утверждает, что анализирует документы Word:

Aspose.Words

Отредактировано, чтобы добавить:

Я думаю, вы также спрашиваете, есть ли способы заставить полнотекстовую индексацию SQL Server работать за вас, добавив фильтры IFilter. Это звучит как хорошая идея. Я сам этого не делал, но MS, по-видимому, долгое время поддерживала фильтр Word, и теперь Adobe выпустила (бесплатный) фильтр PDF. Здесь много информации:

Центральный фильтр

10 способов оптимизации полнотекстовой индексации SQL Server

Полнотекстовый поиск в SQL Server: возможности языка - немного устарел, но прост для понимания.

1 голос
/ 04 апреля 2010

Функция полнотекстового поиска SQL Server использует IFilters для извлечения простого текста из файлов PDF или Office. Вы можете установить IFilters на свой сервер или, если ваш код работает на том же компьютере, что и SQL Server, у вас уже есть.

Вот статья, которая показывает, как использовать IFilters из .NET: http://www.codeproject.com/KB/cs/IFilter.aspx

1 голос
/ 31 марта 2010

У меня была такая же проблема ... Я решил ее, добавив в свое приложение следующее:

Я использую их, чтобы получить простой текст и затем сохранить его в базе данных вместе с двоичными данными. Имейте в виду, что я, конечно, не эксперт, поэтому может быть лучший способ сделать это, но это работает для всего, кроме «Быстрого сохранения» документов Word до 2007 года, которые, очевидно, не читаются iFilters. Я просто заставляю своих пользователей заново сохранять документ, если эта ошибка возникает, и все работает нормально.

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

1 голос
/ 30 марта 2010

Если вы используете SQL 2008, то вы можете рассмотреть возможность использования новой функции FILESTREAM .

Ваши данные хранятся в столбце varbinary (max), но вы также можете получить доступ к необработанным данным через обычный дескриптор Win32.

Вот пример кода , показывающий, как получить дескриптор.

1 голос
/ 26 марта 2010

Вы можете из своего приложения на C # открыть файл .doc, сохранить его как текст и поместить в базу данных как текст, так и документ .doc.

...