Примечание: этот скрипт будет работать только с PDF-файлами, содержащими сканируемые символы. Это не скрипт с возможностью OCR.

import pdfplumber
import glob
from tqdm.auto import tqdm

for current_pdf_file in tqdm(glob.glob("/Users/pnalzate/Desktop/Crypto Whitepapers/New Coins/*.pdf")):
    with pdfplumber.open(current_pdf_file) as pdf:
        print(current_pdf_file)
        num_of_pages = len(pdf.pages)
        NFT = False
        speed = False
        pages_NFT = []
        pages_speed = []

        for p in tqdm(range(0, num_of_pages)):
            word_list = pdf.pages[p].extract_words()
            for word_dict in word_list:
                word_dict = word_dict.values()
                for val in word_dict:
                    if val == 'NFT' or val == 'NFTs':
                        NFT = True
                        pages_NFT.append(p + 1)
                    if isinstance(val, str) == True and val.lower() == 'speed':
                        speed = True
                        pages_speed.append(p + 1)

        print("Done scanning this PDF.")

        if NFT == True:
            pages_NFT_str = [str(int) for int in pages_NFT]
            pages_NFT_appears = ', '.join(pages_NFT_str)
            print(f"This PDF mentions NFTs. The word \"NFT\" appears on page(s) {pages_NFT_appears}.")

        if speed == True:
            pages_speed_str = [str(int) for int in pages_speed]
            pages_speed_appears = ', '.join(pages_speed_str)
            print(f"This PDF mentions transaction speed. The word \"speed\" appears on page(s) {pages_speed_appears}.")

Этот скрипт предназначен для просмотра каталога PDF-файлов, чтобы сканировать их на наличие ключевых слов и указывать, на каких страницах лежат ключевые слова. В каталоге, содержащем PDF-файлы, этот сценарий выведет все PDF-файлы, содержащие поисковый запрос, сопровождаемый страницами, на которых поисковый запрос появляется в этом PDF-файле. Например, если вы скармливаете скрипту 5_nfts_on_page_7_nft.pdf, то скрипт вернет, что слово «nft» появляется на странице семь пять раз.

pip install pdfplumber
pip install glob
pip install tqdm

Вы захотите установить следующие библиотеки, поместив их в свой терминал (это последняя версия Python на данный момент, 3.9):

import pdfplumber
import glob
from tqdm.auto import tqdm

for current_pdf_file in tqdm(glob.glob("abs/path/to/PDFs/*.pdf")):

Теперь мы начнем наш сценарий, импортировав вышеуказанные модули и написав начало цикла for. TQDM — это модуль, который показывает вам ход цикла в терминале, где мы будем запускать этот скрипт. Glob является частью стандартной библиотеки Python, и этот модуль находит все пути, соответствующие указанному шаблону. pdfplumber — это библиотека, которая позволяет нам извлекать текст из файлов. Звездочка — это подстановочный знак, указывающий компьютеру на просмотр всех файлов, оканчивающихся на .pdf.

with pdfplumber.open(current_pdf_file) as pdf:
    print(current_pdf_file)
    num_of_pages = len(pdf.pages)
    NFT = False
    speed = False
    pages_NFT = []
    pages_speed = []

Далее мы напишем, что при воздействии на текущий файл мы выполним следующее.

Мы сохраним текущий файл как «pdf». Мы напечатаем имя, чтобы оно отображалось в терминале. Далее мы объявим три переменные, первая из которых будет количеством страниц текущего PDF; второй, если nft отсутствует, переменная возвращает значение False; третий, если скорости нет, то возвращается как False; четвертый, список, в котором хранятся страницы nft; и пятый список, в котором хранится скорость страниц. Затем мы объявим два списка, которые будут сохранять страницы, на которых будут появляться ключевые слова. В этом примере мы будем искать ключевые слова «NFT» и «скорость».

for p in tqdm(range(0, num_of_pages)):
    word_list = pdf.pages[p].extract_words()
    for word_dict in word_list:
        word_dict = word_dict.values()
        for val in word_dict:
            if val.lower() == 'nft' or val == 'nfts':
                nft = True
                pages_nft.append(p + 1)
            if isinstance(val, str) == True and val.lower() == 'speed':
                speed = True
                pages_speed.append(p + 1)

Теперь мы представим еще один цикл for, который будет проходить по страницам PDF-файла. После этого будут еще два цикла for, которые будут проходить через слова страницы (я уверен, что есть более эффективный способ сделать это; если вы знаете способ, дайте мне знать в комментариях).

После объявления цикла for мы объявим переменную word_list, которая будет содержать все слова со страницы «p». Затем мы пройдемся по этому списку слов (который представляет собой словарь различных значений, таких как числа и объекты), а затем еще раз пройдемся по каждому словарю, чтобы найти значение, соответствующее нашему ключевому слову. В этом случае мы будем использовать условные операторы, чтобы найти совпадение. Если, например, найдено «NFT», то объявленная нами ранее переменная NFT становится True. Для ключевого слова «скорость» мы должны убедиться, что получаемое нами значение является строкой (поскольку словарь содержит другие объекты, такие как целые числа и объекты итератора) и что значение в нижнем регистре соответствует скорости. Следовательно, если есть совпадение, то «скорость» становится истинной.

print("Done scanning this PDF.")

if NFT == True:
    pages_NFT_str = [str(int) for int in pages_NFT]
    pages_NFT_appears = ', '.join(pages_NFT_str)
    print(f"This PDF mentions NFTs. The word \"NFT\" appears on page(s) {pages_NFT_appears}.")

if speed == True:
    pages_speed_str = [str(int) for int in pages_speed]
    pages_speed_appears = ', '.join(pages_speed_str)
    print(f"This PDF mentions transaction speed. The word \"speed\" appears on page(s) {pages_speed_appears}.")

Как только мы закончим с вложенными циклами, мы распечатаем, что мы закончили сканирование текущего PDF. Далее мы проверим, являются ли те переменные, которые мы объявили в начале, истинными или ложными. Если True, то будут активированы операции внутри инструкций.

Сохраните свой скрипт как «pdf_reader.py». Перейдите в каталог, в котором находится скрипт, и выполните его следующим образом, если вы используете Python3.9 — если на Mac или Linux:

python3 pdf_reader.py

Конечный продукт должен выглядеть так:

Я все еще на пути к тому, чтобы стать мастером-разработчиком, поэтому, если у кого-то есть предложения, я открыт для них.