Извлечение текста из документа в память с помощью docsplit
С помощью docsplit gem я могу извлечь текст из PDF или любого другого типа файла. Например, со строкой:
Docsplit.extract_pages('doc.pdf')
Я могу иметь текстовое содержимое файла PDF.
В настоящее время я использую Rails, и PDF отправляется через запрос и живет в памяти. Глядя в API и в исходном коде, я не мог найти способ извлечь текст из памяти, только из файла.
Есть ли способ получить текст этого PDF, избегая создания временного файла?
я использую attachment_fu
если это имеет значение.
2 ответа
Используйте временный каталог:
require 'docsplit'
def pdf_to_text(pdf_filename)
Docsplit.extract_text([pdf_filename], ocr: false, output: Dir.tmpdir)
txt_file = File.basename(pdf_filename, File.extname(pdf_filename)) + '.txt'
txt_filename = Dir.tmpdir + '/' + txt_file
extracted_text = File.read(txt_filename)
File.delete(txt_filename)
extracted_text
end
pdf_to_text('doc.pdf')
Если у вас есть содержимое в строке, используйте StringIO, чтобы создать подобный Файлу объект, который IO может прочитать. В StringIO не имеет значения, является ли содержимое истинным текстом или двоичным, все одинаково.
Посмотрите на любой из:
новый (string=""[, mode]) Создает новый экземпляр StringIO со строкой и режимом. open(string=""[, mode]) {|strio| ...} Эквивалентен::new за исключением того, что когда он вызывается с блоком, он возвращает новый экземпляр, закрывает его и возвращает результат, возвращенный из блока.