2010-03-26 2 views
2

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

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

-или-

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

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

+0

Если добавить комментарии к ответам, которые появились до сих пор, мы можем улучшить наши ответы. – egrunin

ответ

1

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

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

3

Если это не абсолютно необходимо, чтобы поток непосредственно из SQL Server в приложение, жесткий part обрабатывает форматы файлов PDF или DOC.

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

http://itextsharp.sourceforge.net/

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

Aspose.Words

Edited добавить:

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

Filter Central

10 Ways to Optimize SQL Server Full-text Indexing

SQL Server Full Text Search: Language Features - немного устарели, но легко понять.

+1

Поскольку SQL уже вытаскивает текст, хотя это собственные фильтры, зачем использовать другие инструменты? – Glennular

+0

Спасибо за разъяснения. – egrunin

1

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

+0

Это поможет только для формата .doc. Есть ли более универсальный метод? – Glennular

1

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

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

Here's some sample code, показывающий, как получить ручку.

+0

FILESTREAM предназначен для обработки необработанного файла. Который мы обрабатываем в SQL и из него в исходном формате (двоичный или текстовый). Я хотел бы получить индексированный текст двоичного файла, который индексирует индексирование. – Glennular

1

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

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

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

+0

Поскольку SQL уже вытаскивает текст, хотя это собственные фильтры, зачем использовать другие инструменты? Вы обнаружите, что эти два фильтра объединяют большинство форматов файлов, которые будут проиндексированы? – Glennular

+0

Я считаю, что SQL Server использует iFilters для чтения текста, поэтому DLL EPocalipse использует те же фильтры, что и SQL Server. Я согласен, было бы намного проще, если бы SQL Server вернул простой текст, но я не мог найти способ сделать это. iFilters должны иметь возможность читать текст всего, что может индексировать Microsoft, и я даже вспоминаю, что вижу что-то об использовании их для чтения текста в изображениях, но мне нужно было иметь дело с файлами .doc, .docx и .pdf , поэтому я не могу это проверить. – emmilely