Вопрос или проблема
У меня есть HTML-форма, где пользователь может загрузить PDF.
Я хочу извлечь весь текст из PDF, найти в нем определенные слова и затем сохранить их в своей базе данных. Есть идеи?
Я не прошу вас предоставить весь код, конечно, но что-то, с чего можно начать. Например, библиотека или что-то вроде OCR, но бесплатное.
Если PDF был создан программным образом, а не отсканирован, библиотека Python pdfminer может извлечь текст для вас.
Она и Python бесплатны, свободны и с открытым исходным кодом и доступны для большинства платформ.
Что насчет этого вопроса на S.O?
Статья OCR в PHP: Чтение текста из изображений с помощью Tesseract объясняет больше.
Есть проект PhpOcr на SourceForge.
Tesseract кажется вашим лучшим вариантом.
Ответ или решение
Для решения задачи извлечения текста из загруженного PDF-документа и его последующего хранения в базе данных, вы можете воспользоваться следующими шагами и инструментами.
-
Выбор библиотеки для извлечения текста из PDF:
Если ваш PDF-файл был создан программно (например, из текстов), то хорошим выбором будет библиотека pdfminer для Python. Эта библиотека позволяет извлекать текстовый контент с сохранением структуры текста. Установить её можно с помощью pip:pip install pdfminer.six
Пример кода для извлечения текста:
from pdfminer.high_level import extract_text def extract_text_from_pdf(pdf_path): text = extract_text(pdf_path) return text
Если ваш PDF — это отсканированные страници, вам понадобится OCR (оптическое распознавание символов). Для этого отлично подойдёт библиотека Tesseract, которую можно использовать в комбинации с Python. Она бесплатна и имеет широкие возможности. Установить Tesseract можно с помощью следующих команд:
sudo apt-get install tesseract-ocr pip install pytesseract
Пример кода для использования Tesseract:
import pytesseract from pdf2image import convert_from_path def extract_text_from_scanned_pdf(pdf_path): images = convert_from_path(pdf_path) text = '' for image in images: text += pytesseract.image_to_string(image) return text
-
Поиск слов в извлечённом тексте:
После того как текст будет извлечён, вы можете использовать методы поиска (например,in
в Python) для нахождения конкретных слов.Пример:
def search_words_in_text(text, words): found_words = {word: text.count(word) for word in words if word in text} return found_words
-
Сохранение данных в базу данных:
Для хранения извлечённого текста и найденных слов в базе данных, вы можете использовать библиотеку для работы с базами данных, например, SQLAlchemy для SQL баз. Ниже пример кода, как это можно сделать:from sqlalchemy import create_engine, Column, String, Integer from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker Base = declarative_base() class PDFData(Base): __tablename__ = 'pdf_data' id = Column(Integer, primary_key=True) extracted_text = Column(String) found_words = Column(String) engine = create_engine('sqlite:///pdf_data.db') Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() def save_to_database(extracted_text, found_words): pdf_data = PDFData(extracted_text=extracted_text, found_words=str(found_words)) session.add(pdf_data) session.commit()
-
Объединение всех шагов:
Вы можете создать конечную функцию, объединяющую все вышеперечисленные шаги:def process_pdf(pdf_path, words_to_search): if is_scanned(pdf_path): # Определите, является ли PDF отсканированным text = extract_text_from_scanned_pdf(pdf_path) else: text = extract_text_from_pdf(pdf_path) found_words = search_words_in_text(text, words_to_search) save_to_database(text, found_words)
Эти шаги помогут вам начать работу с извлечением текста из PDF и его сохранением в базу данных. Убедитесь, что все необходимые библиотеки установлены, и что у вас есть доступ к базе данных для сохранения результатов.