代码之家  ›  专栏  ›  技术社区  ›  Glennular

将SQL Server中的二进制文件另存为blob和text(或从全文索引中获取文本)

  •  2
  • Glennular  · 技术社区  · 14 年前

    目前我们正在将文件(pdf,doc)作为blob字段保存到数据库中。我希望能够检索文件的原始文本,以便能够操作它来突出显示和其他功能。

    有没有人知道一种简单的方法,可以通过SQL或.NET代码解析文件并在保存时保存原始文本。我发现adobe有一个filtdump实用程序,可以将pdf转换为文本。filtdump似乎是一个命令行工具,我看不到使用文件流的方法。对于office文档和其他文件类型,提取器是什么?

    -或

    有没有办法从sql全文索引中提取原始文本,而不使用第三方过滤器?

    注意:我正在尝试构建一个.net&mssql解决方案,而不必使用第三方工具,如lucene

    5 回复  |  直到 14 年前
        1
  •  1
  •   Yaroslav    14 年前

    SQL Server全文搜索功能使用IFilter从PDF或Office文件格式提取纯文本。您可以在服务器上安装iFilter,或者如果您的代码与SQL Server运行在同一台计算机上,则您已经拥有它。

    下面是一篇文章,介绍如何使用.net中的iFilter: http://www.codeproject.com/KB/cs/IFilter.aspx

        2
  •  3
  •   egrunin    14 年前

    如果不一定要直接从sql server流到应用程序中,那么最困难的部分就是解析pdf或doc文件格式。

    iTextSharp库将允许您访问PDF文件的内部:

    http://itextsharp.sourceforge.net/

    下面是一款宣称可以解析word文档的商业产品:

    Aspose.Words

    编辑以添加:

    我想您也在问是否有办法通过添加ifilter使sql server全文索引为您完成这项工作。这听起来是个好主意。我自己并没有这样做,但微软显然已经支持一个词过滤器很长一段时间了,现在adobe已经发布了一个(免费)pdf过滤器。这里有很多信息:

    Filter Central

    10 Ways to Optimize SQL Server Full-text Indexing

    SQL Server Full Text Search: Language Features -有点过时,但很容易理解。

        3
  •  1
  •   Tom Groszko    14 年前

    您可以从您的C应用程序中打开.doc文件并将其保存为文本,然后将文本和.doc文档都放入数据库中。

        4
  •  1
  •   David Gardiner    14 年前

    如果您使用的是sql 2008,那么可以考虑使用新的 FILESTREAM 特征。

    数据存储在varbinary(max)列中,但也可以通过常规的win32句柄访问原始数据。

    Here's some sample code 演示如何获得手柄。

        5
  •  1
  •   emmilely    14 年前

    我也有同样的问题…我通过在申请表中添加以下内容解决了这个问题:

    我使用这些来获取纯文本,然后将其与二进制数据一起存储在数据库中。请记住,我当然不是专家,所以可能有更好的方法来做到这一点,但这对除了“快速保存”2007年以前的word文档以外的所有内容都有效,这些文档显然不是由ifilter读取的。如果出现错误,我只是让用户重新保存文档,一切正常。

    如果您需要一些示例代码,请告诉我…我现在就寄,但有点长。