如何上传文本文档,是否可以对其进行全文搜索?

时间:2013-07-14 20:21:36

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

我使用以下技术:

  1. JRuby 1.7.4
  2. Rails 3.2.13
  3. Ubuntu 13.04
  4. DB2 C-Express
  5. Torquebox server 2.3.0
  6. 我的目标是创建一个实现以下功能的简单控制器:

    1. 上传文本文件(MS Word格式,Open Office或Libre Office格式)
    2. 对上传的文件执行全文搜索
    3. 以PDF格式显示浏览器中的文本文件
    4. 我搜索过可以帮助我实现这一目标的宝石,并提出以下问题:

      1. 存储文本文件的字段的列类型应该是什么。一般来说,我认为它应该是二进制类型。
      2. 是否可以使用Sunspot执行全文搜索?正如我所读到的,它似乎适用于文本类型的字段,而不是二进制文件。
      3. 我读到了两个允许我生成PDF的宝石。 Prawn gem可以增加灵活性,PDFkit可以从HTML页面生成PDF。可以用任何一个来显示文本文件吗?我假设我应该首先以HTML格式显示,然后使用PDF gem。
      4. 有没有人做过这样的事情,你能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

我从未在你的要求中完成大部分工作,但我在文本解析器上工作非常重要,它将MS Word文档转换为XML文档。也许我至少能让你开始朝着正确的方向前进。

我们使用名为POI, by Apache的Java库来制作DOC - > XML转换是一个简单的过程。既然你正在使用JRuby,我想你可以更容易地将它集成到你的项目中,因为我们使用的是MRI Ruby。这是一个PITA,因为我们必须包含许多桥接器和其他垃圾才能使用.jar文件。

就个人而言,我已经使用Carrierwave gem来处理文件上传。上传文件非常容易。将它们附加到模型上。您只需使用Carrierwave生成器生成Uploader类,该类附加到模型中的字段,将其配置为存储&根据您的规格和PROFIT处理文件!文档很棒,但如果您需要,我很乐意为您提供帮助。如果您需要在不同的SO帖子中进行多文件上传,I explained in detail about how I accomplished it

希望有所帮助!

答案 1 :(得分:1)

回答你的问题:

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