Python - анализ PDF-файлов при экспорте текста и подсчете ключевых слов - проблема с подсчетом ключевых слов в списке и подсчетом каждой страницы - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь создать программу, которая просматривает папку PDF-файлов, извлекает текст и подсчитывает случаи появления «профессора откровенного». Я могу заставить циклы и извлечение текста работать нормально, но только с учетом количества ключевых слов. Мой код считает каждую страницу, и это нормально, но когда я экспортирую ее через Pandas, он просто экспортирует весь список, каждый со счетчиком на страницу. Я подумал, что могу просто запустить команду Sum и посчитать итоговые значения для каждого PDF, но я что-то упустил. Для простоты я просто использую два файла PDF здесь. В итоге, я хочу один простой подсчет частоты, с которой «профессор Фрэнк» появляется в каждом файле PDF, и я что-то здесь упускаю, вероятно, из-за того, как я зацикливаюсь.

Мой текущий выход (с использованием разделителя канала) - и с моим текущим счетчиком, и с желаемым:

TEXT | FILE_LOCATION | CURRENT_FRANK_COUNT | DESIRED_FRANK_COUNT
Это статья. | C: \ PDF \ Test \ file1.pdf | 1,2,0,0,0,1,2,1 | 6
Это вторая статья. | C: \ PDF \ Test \ file2.pdf | 1,0,0,0,0,2,1,1 | 5

import re
import PyPDF2
import os, sys
import pandas as pd

path = r"C:\PDF\Test"
files = []

for r, d, f in os.walk(path):
    for file in f:
        if '.' in file:
            files.append(os.path.join(r,file))

out = []

for file in files:

    with open(file,'rb') as pdf_file:

        read_pdf = PyPDF2.PdfFileReader(pdf_file)
        number_of_pages = read_pdf.getNumPages()
        alltext = []
        allfrankcount = []

        for page_number in range(number_of_pages):  
            page = read_pdf.getPage(page_number)           
            page_content = page.extractText().encode('ascii', 'ignore').strip()
            page_content = str(page_content)
            xx = page_content.split('\\n')
            xx = " ".join(xx)
            xx = str(xx)
            alltext.append(xx)
            s = xx.lower()
            frank_count = len(re.findall(r'(?=professor frank)', s))
            allfrankcount.append(frank_count)

        for a in allfrankcount: #I know this doesn't work, but I want to demonstrate that I tried
            a = int(a) # ditto
            papertotal = sum(a)# ditto

        data = {'text': alltext, 'file': file, 'frank_count': allfrankcount}

        out.append(data)

df = pd.DataFrame(out)
df.to_excel('frankoutput.xlsx')

Любая помощь приветствуется.

...