0

こんにちは、Ruby で pdf を読み込もうとしています。まず、それを txt に変換したいと思います。pathはPDFへのパスです。要点は、.txtファイルを空にすることです。誰かが私に言ったように、pdftotextの問題ですが、修正方法がわかりません。

  spec = path.sub(/\.pdf$/, '')
  `pdftotext #{spec}.pdf`
  file = File.new("#{spec}.txt", "w+")
  text = []
  file.readlines.each do |l|
  if l.length > 0
    text << l
    Rails.logger.info l
  end
 end
 file.close

コードの何が問題になっていますか? ありがとう!

4

3 に答える 3

2

すべてのPDFからテキストを抽出することはできません。一部の PDF ファイルは、次のような単純なツールでテキストを抽出することを不可能にするフォント エンコーディングを使用しています (また、一部の PDF ファイルは、私が知っているpdftotextツールを使用した直接的なテキスト抽出に対して完全に耐性があります。これらの場合、OCR を適用する必要があります。最初にテキストを抽出する機会があります...)。

したがって、常に同じ「奇妙な」PDF ファイルでコードをテストすると、実際には PDF に問題があるのに、コードに不満を感じることがあります。

まず、 のコマンドラインの使用法がpdftotxt特定の PDF で適切に機能することを確認してから、その PDF でコードをテスト (およびさらに開発) します。

于 2012-11-28T17:57:13.303 に答える
1

問題は、ファイルを書き込み ("w") モードで開いているため、ファイルが切り捨てられることです。ファイル モードとその意味の表はhttp://ruby-doc.org/core-1.9.3/IO.htmlで確認できます。

このようなものを試してみてください.pdftotextオプションを使用してテキストをstdoutに送信し、一時ファイルの作成を回避し、ブロックを使用してより慣用的なルビーを作成します。

text = `pdftotext #{path} -`
text.split.select { |line|
  line.length > 0
}.each { |line|
  Rails.logger.info(line)
}
于 2012-11-28T11:31:13.693 に答える
0

書き込み権限で txt ファイルを開く必要があります。

file = File.new("#{spec}.txt", "w")

Rubyでファイルを作成する方法を参照できます


更新: あなたのコードは完全ではなく、バグがあるようです。

  1. 何が何だか言えないpath
  2. 書き込み先のテキスト ファイルを読み込もうとしているようですfile.readlines.each
  3. lengthスペルチェックl.lenght

実際のコードを貼り付けることもできます。


この要点を確認してください https://gist.github.com/4160587

前述のように、同じファイルの読み取りと書き込みを行っているため、コードが機能していません。

file_write.rbファイル書き込み操作を行うRuby コード

pdf_file = File.open("in.txt") 
output_file = File.open("out.txt", "w") # file to which you want to write
#iterate over input file and write the content to output file
pdf_file.readlines.each do |l|
    output_file.puts(l)
end
output_file.close
pdf_file.close

サンプルtxtファイルin.txt

Some text in file
Another line of text

1. Line 1
2. Not really line 2

実行file_write.rbすると、同じ内容の out.txt という新しいファイルが表示されるはずin.txtです。必要に応じて、入力ファイルの内容を変更できます。あなたの場合、pdfリーダーを使用してコンテンツを取得し、テキストファイルに書き込みます。基本的にコードの最初の行が変更されます。

于 2012-11-28T09:02:28.433 に答える