Найти - Пользователи
Полная версия: Импорт из PDF -> Преобразование -> Экспорт значений
Начало » Python для новичков » Импорт из PDF -> Преобразование -> Экспорт значений
1 2 3
PEHDOM
Acamori
В результате имеем одну длинную строку которую надо будет дробить на составные части или же сразу в ней искать нужные значения. Вот и думаю над алгоритмами поиска нужных частей.
Да какая разница, py.user.next пытаеться до вас донести другое, если данные неструктурированы, нужно определить признаки по которым вы будете искать нужную вам информацию.
Вот вы пишете A1pool = ‘No Swimming Pool’. А теперь ответте на вопрос почему в переменную “A1pool” вы занесли “No Swimming Pool” а не “Shingle Roof”? Ну например в переменную A1pool пишем текст начинающийся от запятой и заканчивающийся на Swimming Pool. Вот собственно первое условие поиска.+ ответте что должно заноситься, если ничего не найдет, или если найдет более одного.
Потом берете вторую переменную и делаете тоже самое. Когда вы составите полный перечень условий, можно будет думать как это орагнизовать, с помощью re или по иному както….
py.user.next
Acamori
Вот тут переменной P1 присваивается значение строки вытянутой с помощью операции pageObj.extractText().
Ну всё, теперь думай, как разобрать строку. Как выше тебе писал: если можешь вручную разобрать её правильно, значит у тебя есть какой-то метод. Вот надо это всё вытащить наружу, задавая себе вопросы “как я вытянул это значение из всего текста?”, “как я определил, что всё правильно вытянул?”. Тогда ты узнаешь признаки, по которым определяешь всё. Очень часто это делается подсознательно (будто ты всегда умел это делать), поэтому надо себе задавать вопросы, чтобы вытащить наружу. Например, вот ты текст обычный читаешь глазами, а как ты понимаешь, какое слово прочитал? Ты заметил, что прочитал сначала каждую букву, определил значение этой буквы, определил, как она звучит? А ведь это не врождённое (попробуй на турецком что-нибудь прочитать или на китайском), это бессознательный навык, выработанный в начальной школе. Вот при поиске значений точно так же работают бессознательные навыки, которые надо вытащить и по ним составлять алгоритм разбора. А потом программу просто пишешь, которая фактически делает то же самое, что ты руками делал, и “думает” так же, как ты думал в тот момент, когда разбирал.
Acamori
PEHDOM
Да какая разница, py.user.next пытаеться до вас донести другое, если данные неструктурированы, нужно определить признаки по которым вы будете искать нужную вам информацию.

И я это понял с первого же сообщения. Просто смутило разбитие на отдельные строки, когда единая строка всегда может быть разной длины и из разных составляющих. И я как раз думаю, как и по каким правилам мне все это доставать.

py.user.next
Ну всё, теперь думай, как разобрать строку. Как выше тебе писал: если можешь вручную разобрать её правильно, значит у тебя есть какой-то метод. Вот надо это всё вытащить наружу, задавая себе вопросы “как я вытянул это значение из всего текста?”, “как я определил, что всё правильно вытянул?”. Тогда ты узнаешь признаки, по которым определяешь всё. Очень часто это делается подсознательно (будто ты всегда умел это делать), поэтому надо себе задавать вопросы, чтобы вытащить наружу. Например, вот ты текст обычный читаешь глазами, а как ты понимаешь, какое слово прочитал? Ты заметил, что прочитал сначала каждую букву, определил значение этой буквы, определил, как она звучит? А ведь это не врождённое (попробуй на турецком что-нибудь прочитать или на китайском), это бессознательный навык, выработанный в начальной школе. Вот при поиске значений точно так же работают бессознательные навыки, которые надо вытащить и по ним составлять алгоритм разбора. А потом программу просто пишешь, которая фактически делает то же самое, что ты руками делал, и “думает” так же, как ты думал в тот момент, когда разбирал.

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

 >>>A1porch = {'Y': None, 'N': None}
>>>if 'Porch' in P1:
......  A1porch['Y'] = 'Porch'
else: 
......  A1porch['N'] = 'No Porch'
>>>myfile = open(r'D:\python\a1.txt', 'w')
>>>if A1porch['N'] == None:
......	myfile.write('%s\t%s\n' % ('Exterior:', A1porch['Y']))
else:
......	myfile.write('%s\t%s\n' % ('Exterior:', A1porch['N']))
>>>>myfile.close()

В итоге имею строку в файле - Exterior: No Porch

Это я планирую для легких и хорошо известных случаев, где объекты либо присутствуют либо отсутствуют в строке.

Но тут одна проблема, к примеру в Exterior: я хотел бы иметь общую запись из одного списка. Пока додумался только до:

 >>> Exterior = []
>>> if 'Porch' in P1:
	Exterior.append('Porch')
>>> if 'Deck' in P1:
	Exterior.append('Deck')
>>> if 'Patio' in P1:
	Exterior.append('Patio')
>>> if 'Fenc' in P1:
	Exterior.append('Fence')
>>> myfile = open(r'D:\python\bpo\act.txt', 'w')
>>> myfile.write('%s\t%s\n' % ('Exterior:', Exterior[:]))
>>> myfile.close()

В итоге в файле получаю строку
 Exterior: ['Deck', 'Patio', 'Fence']
Пока не знаю как убрать скобки, оставив только значения. Или для этого лучше подойдет словарь ?
PEHDOM
Acamori
Пока не знаю как убрать скобки, оставив только значения.
делайте join перед запистью
 >>> a=['1','2']
>>> str(a)
"['1', '2']"
>>> ','.join(a)
'1,2'
Acamori
PEHDOM
делайте join перед запистью
Спасибо ! Все гениальное - просто Буду теперь разбираться с модулем re для выборки более специфичных данных.

И просто вопрос на засыпку, возможно ли преобразовать только значения словарей ?
PEHDOM
Acamori
возможно ли преобразовать только значения словарей ?
не совсем понял вопрос, так чтоли?
 >>> a={1:'One',2:'Two',3:'three'}
 >>> a
{1: 'One', 2: 'Two', 3: 'three'}
>>> a.values()
dict_values(['One', 'Two', 'three'])
>>> ', '.join(a.values())
'One, Two, three'
>>>
Acamori
PEHDOM
не совсем понял вопрос, так чтоли?
  >>> a={1:'One',2:'Two',3:'three'}
 >>> a
{1: 'One', 2: 'Two', 3: 'three'}
>>> a.values()
dict_values(['One', 'Two', 'three'])
>>> ', '.join(a.values())
'One, Two, three'
>>>

Да Не знал что с помощью .join можно так. Думал работает только со списками.
PEHDOM
Acamori
Думал работает только со списками.
так dict.values() b возвращает список значений в словаре.
Acamori
PEHDOM
так dict.values() b возвращает список значений в словаре.

Я когда экспериментировал с print(dict.values(a)) или к примеру print(a.values()), всегда смущал возврат:

 dict_values(['One', 'Two', 'three'])

А c .join не пробовал.
Acamori
Решил апнуть темку, что б не создавать новую. Хотелось бы услышать мнение по поводу возможности оптимизации кода.

Все из тех же PDF будут вытягиваться цифровые значения в виде строк, оттуда удаляется ненужный символ ',' и с помощью .join они будут собираться/отправляться в виде строк дальше. Но появилась потребность в округлении значений.
Правило округление вполне простое 2345 = 2300, 2567 = 2600, 987 = 1000, 935 = 900

Моих знаний пока хватило для такого способа:

 >>>A = '1,356'
>>>Ab = list(A)
>>>if ',' in Ab:
	Ab.remove(',')
>>>if len(Ab) == 4:
	if int(Ab[1]) == 9:
		if int(Ab[2]) >= 5:
			Ab[0] = int(Ab[0]) + 1
			Ab[1] = '0'
			Ab[2] = '0'
			Ab[3] = '0'
			Ab[0] = str(Ab[0])
		else:
			Ab[2] = '0'
			Ab[3] = '0'
	else:
		if int(Ab[2]) >= 5:
			Ab[1] = int(Ab[1]) +1
			Ab[2] = '0'
			Ab[3] = '0'
			Ab[1] = str(Ab[1])
else:
	if len(Ab) == 3:
		if int(Ab[0]) == 9:
			if int(Ab[1]) >= 5:
				Ab[0] = int(Ab[0]) + 1
				Ab[1] = '0'
				Ab[2] = '0'
				Ab[0] = str(Ab[0])
			else:
				Ab[1] = '0'
				Ab[2] = '0'
		if int(Ab[1]) >= 5:
			Ab[0] = int(Ab[0]) + 1
			Ab[1] = '0'
			Ab[2] = '0'
			Ab[0] = str(Ab[0])
		else:
			Ab[1] = '0'
			Ab[2] = '0'
>>>A = ''.join(Ab)
'1400'

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

Поэтому не особо смущает получения списка по типу:
 >>>A = '978'
>>>Ab = list(A)
>>>if ',' in Ab:
	Ab.remove(',')
>>> if ...........
>>>Ab
'['10','0','0']
>>>A = ''.join(Ab)
>>>A
'1000'
Но есть ли альтернативные способы ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB