Классификация отсканированных документов в pdf-файлах с использованием глубокого обучения или NLP

Вопрос или проблема

Я умею классифицировать изображения с помощью CNN, но у меня есть проблема: у меня есть несколько типов отсканированных документов в PDF-файле на разных страницах. Некоторые типы отсканированных документов присутствуют на нескольких страницах внутри PDF.

Теперь мне нужно классифицировать и вернуть, какие документы присутствуют и на каких страницах они находятся в PDF-документе. Если отсканированный документ занимает несколько страниц, я должен вернуть диапазон номеров страниц, например “1 – 10”.

Входные данные будут представлять собой PDF-файлы, содержащие целевые сканированные документы.

Выходные данные должны содержать классифицированные “Названия документов” и их “номера страниц”.

Может кто-то подсказать, как я могу построить модель, которая решала бы эту проблему.

Спасибо.

Поскольку это несупервизируемая задача, вам нужно попробовать извлечь “темы” с помощью моделирования тем. Существуют различные инструменты на Python, например, из sklearn или spacy.

Основной рабочий процесс:

  • Извлечь текст из PDF
  • Предобработка текста (приведение к нижнему регистру, стемминг и т.д.)
  • Моделирование тем
  • Возвращать “тему” на странице

Ответ или решение

Конечно! Для решения задачи классификации отсканированных документов в PDF-файлах, содержащих различные типы документов на разных страницах, вам необходимо следовать определенному алгоритму, который включает несколько этапов. Ниже приведён подробный подход, основанный на глубоких методах обучения и обработке естественного языка (NLP).

Этапы решения задачи

  1. Извлечение текста из PDF:

    • Для начала необходимо извлечь текст и изображения из PDF-документов. Это можно сделать с помощью библиотек, таких как PyMuPDF, pdfplumber или PyPDF2. В большинстве случаев, для обработки сканированных страниц потребуется использовать оптическое распознавание текста (OCR), например, с помощью Tesseract OCR.
    from pdf2image import convert_from_path
    import pytesseract
    
    pages = convert_from_path('document.pdf', 300)
    texts = [pytesseract.image_to_string(page) for page in pages]
  2. Предобработка текста:

    • Далее вам необходимо произвести предобработку извлеченного текста. Это включает в себя:
      • Приведение к нижнему регистру.
      • Удаление знаков препинания и лишних пробелов.
      • Лемматизацию или стемминг.
      • Удаление стоп-слов. Можно использовать библиотеку nltk или spaCy.
    import spacy
    
    nlp = spacy.load("ru_core_news_sm") # или другой язык
    processed_texts = []
    for text in texts:
       doc = nlp(text)
       processed_texts.append(" ".join([token.lemma_ for token in doc if not token.is_stop]))
  3. Классификация документов:

    • Для классификации текстов можно использовать метод обучения на основе заранее размеченных данных или применить методы ненаблюдаемого обучения, такие как тематическое моделирование (например, LDA или NMF).
    • Также можно использовать модели глубокого обучения, такие как BERT или его варианты, специально обученные для решения задач классификации текстов.
    from sklearn.decomposition import LatentDirichletAllocation
    
    # Создайте документ-термин матрицу (DTM)
    # затем примените LDA
    lda = LatentDirichletAllocation(n_components=num_classes)
    lda.fit(DTM) # DTM - это документ-термин матрица
  4. Анализ результатов и формирование выходных данных:

    • После получения классификаций для каждой страницы необходимо собрать результаты. Можно использовать словарь, где ключом будет название документа, а значением – список страниц.
    document_pages = {}
    for page_num, text in enumerate(processed_texts):
       document_name = classify_document(text)  # Функция классификации
       if document_name not in document_pages:
           document_pages[document_name] = []
       document_pages[document_name].append(page_num + 1)  # +1 для нумерации страниц с 1
    
    # Форматируем вывод
    result = {}
    for doc, pages in document_pages.items():
       if pages:
           page_range = f"{min(pages)} - {max(pages)}" if len(pages) > 1 else str(pages[0])
           result[doc] = page_range

Итог

Этот подход обеспечит вам эффективное решение для классификации различных типов документов в PDF-файлах. Обратите внимание, что успешность классификации зависит от качества данных для обучения, а также от точности методов извлечения текста и моделей, используемых для классификации. Рекомендуется протестировать несколько методик и настройку гиперпараметров для достижения наилучших результатов.

Удачи в реализации вашего проекта!

Оцените материал
Добавить комментарий

Капча загружается...