Форум сайта python.su
1
Всем привет, недавно начал изучать python и еще всего не знаю, но есть вопрос, о возможности реализации задуманного.
Могу ли я вытянуть из PDF нужную мне информацию, преобразовать и передать в другой файл или вывести на экран. Для примера вот суть:
С помощью PyPDF2 достаю текст из PDF.
>>> import PyPDF2 >>> pdfFileObj = open('my.pdf','rb') >>> pdfReader = PyPDF2.PdfFileReader(pdfFileObj) >>> pageObj = pdfReader.getPage(0) >>> P1 = pageObj.extractText() "€111 Some Ct, Some Nice Twp, ST 888881.8 miResidentialExterior: Brick Exterior, Shingle Exterior, Pitched Roof, Shingle Roof, Fencing, Sidewalks, Street Lights, Deck, Patio, Front Yard, Rear Yard, Side Yard(s), No Swimming Pool Ł Utilities: (1)Central Air, (2)Gas Heating, Hot Air......" >>> pageObj = pdfReader.getPage(1) >>> P2 = pageObj.extractText() >>> P2 "€222 Some Ct, Some Nice Twp, ST 999991.8 miResidentialExterior: Brick Exterior, Shingle Exterior, Pitched Roof, Shingle Roof, Fencing, Sidewalks, Street Lights, Deck, Patio, Front Yard, Rear Yard, Side Yard(s), In-Ground Swimming Pool Ł Utilities: (1)No Air Condidioning, (2)Oil Heating, Hot Air......"
>>> A1ad = '111 Some ct' >>>A1tw = 'Some Nice Twp' >>>A1st = 'ST' >>>A1zp = 88888 >>>A1pool = 'No Swimming Pool' >>>A1util = {A:'Central Air', H:'Gas Heating'}
Отредактировано Acamori (Апрель 11, 2017 13:52:50)
Офлайн
1
Часть задачи к примеру с ‘No Swimming Pool’ и A1util = {A:'Central Air', H:'Gas Heating'} можно решить слегка громоздкими проверками if и else. Но вот для вытяжки некоторых уникальных значений не нашел способа.
Офлайн
857
AcamoriЛучше будет использовать re. Сначала достаёшь все строки, а потом их присваиваешь нужным переменным.
Подойдет ли тут стандартное форматирование строки или же модуль re ?
>>> import re >>> >>> s = '€111 Some Ct, Some Nice Twp, ST 888881.8 miResidentialExterior:' >>> >>> pat = r'^€(.*?),\s*(.*?),\s*(\S*)\s*(\d*)' >>> >>> match = re.search(pat, s) >>> if match is not None: ... a, b, c, d = match.groups() ... (a, b, c, d) ... ('111 Some Ct', 'Some Nice Twp', 'ST', '888881') >>>
Отредактировано py.user.next (Апрель 11, 2017 16:45:59)
Офлайн
1
py.user.next
Лучше будет использовать re. Сначала достаёшь все строки, а потом их присваиваешь нужным переменным.
Офлайн
857
AcamoriНадо сначала всё достать из pdf и сохранить в виде строк, а потом работать с ними, как будто не было никакого pdf'а.
Беда в том, что PyPDF2 достает весь текст единой строкой
AcamoriПроанализируй, как ты сам понимаешь, где какой объект, и в программу то же самое запиши. Если ты ищешь, например, по запятой, значит и программа должна искать по запятой. Если ты видишь там названия с больших букв, значит и программа должна искать названия, проверяя величину букв.
а требуемые уникальные объекты могут располагаться по всей строке, как в начале, так и в середине
AcamoriПодойдёт. Если что-то не получается ты можешь несколько шаблонов сделать. Допустим, у тебя строка может иметь три формы, значит сначала нужно определить, в какой она форме из трёх, а потом применить соответствующий разбор. Для каждого разбора может быть свой индивидуальный шаблон.
Подойдет в таком случае этот метод ?
Отредактировано py.user.next (Апрель 12, 2017 02:36:10)
Офлайн
1
py.user.next
py.user.next
Отредактировано Acamori (Апрель 12, 2017 08:14:14)
Офлайн
857
AcamoriТут надо алгоритм составить, мануалы по питону в этом не помогут. Потому что сначала нужно определить, что нужно сделать, чтобы всё правильно вытащить (по каким признакам искать и так далее), а уже потом, когда это определено, надо думать, как реализовать это на питоне (и вот тогда пригодится документация к питону, где все средства описаны). А само собой оно не будет работать, потому что питон - это инструмент. Если у тебя есть молоток и пила, это ещё не значит, что они сами приготовят детали и соберут табуретку.
Буду дальше штудировать мануалы
Отредактировано py.user.next (Апрель 12, 2017 11:14:36)
Офлайн
1
py.user.next
Тут надо алгоритм составить, мануалы по питону в этом не помогут. Потому что сначала нужно определить, что нужно сделать, чтобы всё правильно вытащить (по каким признакам искать и так далее), а уже потом, когда это определено, надо думать, как реализовать это на питоне (и вот тогда пригодится документация к питону, где все средства описаны). А само собой оно не будет работать, потому что питон - это инструмент. Если у тебя есть молоток и пила, это ещё не значит, что они сами приготовят детали и соберут табуретку.
Отредактировано Acamori (Апрель 12, 2017 11:48:28)
Офлайн
857
AcamoriНадо придумать алгоритм выборки, а потом записать его с помощью regex'ов (да и то, regex'ы - не единственный вариант, там может и комбинирование понадобиться). Если ты алгоритм не придумаешь, то regex'ы тебе никак не помогут, потому что это просто инструмент. Питон - инструмент, regex'ы - инструмент. Представь, что regex'ы - это молоток, который ты берёшь и, постукивая по доске в разных местах, пытаешься дом построить. Тут в молотке решения нет, должен быть план, должен быть спроектирован дом сам. Так же и с алгоритмами происходит: сначала ты придумываешь алгоритм, не вовлекая языки программирования и их средства, а потом, когда он готов, реализуешь его на языке каком-нибудь.
Ну я больше к тому, что мне надо больше понять как работать с модулем re, что б начать подбирать алгоритм выборки и соответствия.
AcamoriТы должен сначала все строки выбрать скопом, чтобы отвязаться от pdf-формата. И вот когда у тебя будет текст, вытащенный из pdf, тогда и надо его разбирать (написать функцию разбора текста).
И пока еще не определил для себя наилучший способ разбития единой строки в несколько разных, так как в PDF'ах длина ее может различаться.
Отредактировано py.user.next (Апрель 12, 2017 15:04:38)
Офлайн
1
py.user.next
Ты должен сначала все строки выбрать скопом, чтобы отвязаться от pdf-формата. И вот когда у тебя будет текст, вытащенный из pdf, тогда и надо его разбирать (написать функцию разбора текста).
P1 = pageObj.extractText() "€111 Some Ct, Some Nice Twp, ST 888881.8 miResidentialExterior: Brick Exterior, ......."
Отредактировано Acamori (Апрель 12, 2017 16:00:32)
Офлайн