【问题标题】:How do upload text document and is it possible to enable full text search on it?如何上传文本文档,是否可以在其上启用全文搜索?
【发布时间】:2013-07-23 07:15:59
【问题描述】:

我正在使用以下技术:

  1. JRuby 1.7.4
  2. Rails 3.2.13
  3. Ubuntu 13.04
  4. DB2 C-Express
  5. Torquebox 服务器 2.3.0

我的目标是制作一个实现以下功能的简单控制器:

  1. 上传文本文件(MS Word 格式、Open Office 或 Libre Office 格式)
  2. 对上传的文件执行全文搜索
  3. 在浏览器中将文本文件显示为 PDF

我已经搜索了可以帮助我实现这一目标的宝石,并且有以下问题:

  1. 存储文本文件的字段的列类型应该是什么。一般来说,我认为它应该是二进制类型。
  2. 是否可以使用Sunspot 执行全文搜索?正如我所读到的,它似乎适用于文本类型的字段,而不是二进制字段。
  3. 我读到了两个可以让我生成 PDF 的 gem。 Prawn gem 增加了更多的灵活性,PDFkit 可以从 HTML 页面生成 PDF。可以使用其中的任何一个来显示文本文件吗?我想我应该首先以某种方式在 HTML 中显示,然后使用 PDF gem。

有没有人做过这样的事情,你能指出我正确的方向吗?

【问题讨论】:

标签: ruby ruby-on-rails-3 pdf full-text-search jrubyonrails


【解决方案1】:

我还没有完成您要求的大部分工作,但我使用文本解析器将 MS Word 文档转换为 XML 文档的工作量很大。也许我至少可以让你朝着正确的方向开始。

我们使用一个名为POI, by Apache 的Java 库,它使DOC -> XML 转换成为一个简单的过程。由于您使用的是 JRuby,我想您将它集成到您​​的项目中会容易得多,因为我们使用的是 MRI Ruby。那是一个 PITA,因为我们必须包含许多桥梁和其他垃圾才能使用 .jar 文件。

就个人而言,我使用Carrierwave gem 来处理文件上传。上传文件并将它们附加到模型上非常简单。您只需使用 Carrierwave 生成​​器生成附加到模型中的字段的Uploader 类,将其配置为根据您的规范存储和处理文件,然后获利!文档很棒,但如果您需要,我很乐意为您提供帮助。如果您需要上传多文件,请在另一个 SO 帖子中I explained in detail about how I accomplished it

希望有帮助!

【讨论】:

    【解决方案2】:

    回答您的问题:

    1. 我会使用两列,一列二进制 (BLOB) 来存储原始文档(MS Word 或 LibreOffice)。这对于翻译成 PDF 很有用。然后是全文搜索的另一列;这将是 TEXT 类型,并且只包含纯文本。
    2. 我不会使用 gem 进行全文搜索,我宁愿使用 SQL 'LIKE' 关键字。
    3. 据我所知,虾是最好的。您也可以搜索是否某些 gem 直接将 MSWord 转换为 pdf 或 Libreoffice doc 转换为 PDF。

    最后,Libreoffice 文本是简单的压缩档案,其中文本存储在 XML 文件中。要提取它:

    content = `unzip -cq \"#{file_path}\" content.xml`
    require 'nokogiri'
    @nokogiri = Nokogiri::XML(content)
    paragraphs = []
    @nokogiri.xpath('//text:p').each do |t|
        paragraphs << t.content
    end
    text = paragraphs.join ' '
    

    【讨论】:

      猜你喜欢
      • 2019-05-09
      • 1970-01-01
      • 2022-11-23
      • 2014-08-01
      • 1970-01-01
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多