Как извлечь текст из отсканированных PDF-файлов, который может работать как в веб-работниках, так и в NodeJS.Javascript

Форум по Javascript
Ответить
Anonymous
 Как извлечь текст из отсканированных PDF-файлов, который может работать как в веб-работниках, так и в NodeJS.

Сообщение Anonymous »

Я хочу извлечь текст из файлов PDF, но особенно только из тех, которые состоят из отсканированных изображений. Я пытался использовать методы pdfjs с OCR Tesseract.js, но в веб-воркерах это не работает, хотя это вполне ожидаемо потому что документ или любые элементы DOM недоступны в веб-воркерах. Основная причина, по которой я не могу сделать это в основном потоке или в модулях основного сценария, связана с производительностью, поскольку браузер может зависнуть или даже выйти из строя при извлечении больших PDF-файлов или содержащих много страниц.
Вот код, который у меня сейчас есть:

Код: Выделить всё

import * as pdfjsLib from 'pdfjs-dist';
import Tesseract from 'tesseract.js';

pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdfjs-dist/build/pdf.worker.js'; // Important!

async function extractTextFromPDF(file) {

const fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);

const arrayBuffer = await new Promise((resolve, reject) => {
fileReader.onload = event => resolve(event.target.result);
fileReader.onerror = error => reject(error);
});

const pdf = await pdfjsLib.getDocument(arrayBuffer).promise;
const page = await pdf.getPage(1); // Get the first page

const viewport = page.getViewport({ scale: 1.0 });
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;

await page.render({ canvasContext: context, viewport: viewport }).promise;

const { data: { text } } = await Tesseract.recognize(
canvas,
'eng', // Language
{ logger: m => console.log(m) } // Optional logging
);

console.log(text);
return text;
}

extractTextFromPDF('your_pdf.pdf');
Как обсуждалось, это не может работать из-за недоступности элемента документа.
Что я могу сделать, чтобы он работал как в веб-работнике, так и в в средах Node.js? Я не смог найти никаких решений или руководств в Интернете или где-либо еще.
Буду очень признателен за помощь.
Я пробовал Tesseract OCR, но он не работает, как и pdfjs.

Подробнее здесь: https://stackoverflow.com/questions/793 ... eb-workers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»