Общие методы / советы для беспорядочного разбора PDF? - PullRequest
0 голосов
/ 03 марта 2020

Я работаю над преобразованием сотен PDF-файлов (500+ страниц каждый) в CSV-файлы данных. В PDF-файлах содержатся ценные данные об оценках университетских классов, которые не могут быть найдены в других местах (это публичные записи c).

Я пытаюсь использовать Python и PyPDF для анализа и извлечения данных. Я приложу свой текущий прогресс ниже:

Пример PDF изображения

Формат по большей части предсказуем. Я не могу анализировать вслепую, мне придется определить некоторые правила синтаксического анализа для извлечения моих данных.

Например: я знаю, когда вижу строку " Listing"за ним следует код класса .

Есть ли какие-либо советы или методы для этого? Это приближается к границам обработки естественного языка?

['Miami', 'PlanHonorsCross', 'ListingACE', '113', 'B', 'Yang', 'Eun', 'Chong', 'Reading', 'Writing', 'Acad', 'ContextsNN', 'A+AA-B+BB-C+CC-D+DD-FWWPWFIXYPSAvg', 'GPA', '1523010101000000000003.38%7.135.714.321.40.07.10.07.10.07.10.00.00.00.00.00.00.00.00.00.00.0ACE', '113', 'C', 'Duffield', 'Ebru', 'D.', 'Reading', 'Writing', 'Acad', 'ContextsNN', 'A+AA-B+BB-C+CC-D+DD-FWWPWFIXYPSAvg', 'GPA', '6030120000000100000003.63%46.20.023.10.07.715.40.00.00.00.00.00.00.07.70.00.00.00.00.00.00.0ACE', '113', 'D', 'Duffield', 'Ebru', 'D.', 'Reading', 'Writing', 'Acad', 'ContextsNN', 'A+AA-B+BB-C+CC-D+DD-FWWPWFIXYPSAvg', 'GPA', '5211310000000000000003.59%38.515.47.77.723.17.70.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0ACE', '113', 'F', 'Duffield', 'Ebru', 'D.', 'Reading', 'Writing', 'Acad', 'ContextsNN', 'A+AA-B+BB-C+CC-D+DD-FWWPWFIXYPSAvg', 'GPA', '6132000000000100000003.81%46.27.723.115.40.00.00.00.00.00.00.00.00.07.70.00.00.00.00.00.00.0Course', 'Total', 'ACE', '113A+AA-B+BB-C+CC-D+DD-FWWPWFIXYPSAvg', 'GPA188910960202000200000003.44%27.312.113.615.213.69.10.03.00.03.00.00.00.03.00.00.00.00.00.00.00.0ACE', '310E', 'A', 'Marcus', 'Felice', 'J.', 'American', 'FilmNN', 'A+AA-B+BB-C+CC-D+DD-FWWPWFIXYPSAvg', 'GPA', '1312441012100100000002.84%4.814.34.89.519.019.04.80.04.89.54.80.00.04.80.00.00.00.00.00.00.0Course', 'Total', 'ACE', '310EA+AA-B+BB-C+CC-D+DD-FWWPWFIXYPSAvg', 'GPA1312441012100100000002.84%4.814.34.89.519.019.04.80.04.89.54.80.00.04.80.00.00.00.00.00.00.0Run:02/12/16', '@', '15:00MIAMI', 'UNIVERSITY', '-', 'OXFORD,', 'OHIO', 'Page:', '16Program:', 'SZRGRDT.SQRGrade', 'Distribution', 'by', 'Campus', 'and', 'by', 'DepartmentSections', 'of', '10Office', 'of', 'the', 'RegistrarSpring', 'Semester,', '2014-15Oxford', 'CampusGrade', 'key:', 'I', '=', 'Incomplete,', 'X', '=', 'Credit/No', 'Credit,', 'Y', '=', 'Research/Credit/No,', 'P', '=', 'Pass/Fail,', 'S', '=', 'Satisfactory', 'Progress']

Выше текстовый вывод, который соответствует скриншоту PDF.

1 Ответ

0 голосов
/ 05 марта 2020

Если вы хотите выбрать указанные c элементы в ваших данных в виде списка, попробуйте:

data = ['your list here']
data[3]

Например, в качестве вывода будет возвращено значение 113. Возможно, будет удобнее использовать pandas фрейм данных, это зависит от того, находятся ли данные каждый раз в одном и том же положении. Выбор определенных c типов оценок может быть сделан, за исключением случаев, когда они go в двузначные числа, тогда это будет сложно.

...