Найти - Пользователи
Полная версия: Как сделать первую букву заглавной
Начало » Python для новичков » Как сделать первую букву заглавной
1 2 3
PSAS
Здравствуйте!
Подскажите почему capitalize() не срабатывает и почему - то печатается два раза один и тот же код хотя принт указан единажды


 import pdfplumber
import re
def extract_first():
    pdf = pdfplumber.open("16.4.pdf")
    page = pdf.pages[0]
    text = page.extract_text()
    pattern = re.compile('../..../.........')
    result = pattern.findall(text)
    #print (text)
        
    name = re.findall('Наименование:(.+)', text)
    nazn = re.findall('Назначение:(.+)', text)
    ploshad = re.findall('Площадь, м²:(.+)', text)
    etash = re.findall('Количество этажей(.+)', text)
    adress = re.findall('Адрес(.+)', text)
    nomer = re.findall('Кадастровый номер:(.+)', text)
    input_str = (str (name) + "." " Назначение:" + str (nazn)+ "." + "Площадь:" + str (ploshad) +" кв.м." + " Количество этажей" + str (etash)+ "." + " Адрес"
                 + str (adress)+ "." + " Кадастровый номер:" + str (nomer)+ "." )
    for x, y in ("[",""),("]",""):
        input_str = input_str.replace(x, y)
    for i, j in ("'",""),("&#x0d",""):
        input_str = input_str.replace(i, j)
    for q, w in (";",""),("кр.","край"):
        input_str = input_str.replace(q, w)
        
        print(input_str.capitalize())
?


py.user.next
PSAS
Подскажите почему capitalize() не срабатывает и почему - то печатается два раза один и тот же код хотя принт указан единажды
  
input_str = input_str.capitalize()
print(input_str)
И надо вынести это из последнего цикла for.
PSAS
Добрый день!
За цикл вынес - все ок 1 р. запускается.
Но буква первая не стала заглавной, а наоборот все стали маленькие.

 import pdfplumber
import re
def extract_first():
    pdf = pdfplumber.open("16.4.pdf")
    page = pdf.pages[0]
    text = page.extract_text()
    pattern = re.compile('../..../.........')
    result = pattern.findall(text)
    #print (text)
        
    name = re.findall('Наименование:(.+)', text)
    nazn = re.findall('Назначение:(.+)', text)
    ploshad = re.findall('Площадь, м²:(.+)', text)
    etash = re.findall('Количество этажей(.+)', text)
    adress = re.findall('Адрес(.+)', text)
    nomer = re.findall('Кадастровый номер:(.+)', text)
    input_str = (str (name) + "." " Назначение:" + str (nazn)+ "." + "Площадь:" + str (ploshad) +" кв.м." + " Количество этажей" + str (etash)+ "." + " Адрес"
                 + str (adress)+ "." + " Кадастровый номер:" + str (nomer)+ "." )
    
    for x, y in ("[",""),("]",""):
        input_str = input_str.replace(x, y)
    for i, j in ("'",""),("&#x0d",""):
        input_str = input_str.replace(i, j)
    for q, w in (";",""),("кр.","край"):
        input_str = input_str.replace(q, w)
    input_str = input_str.capitalize()
    print(input_str)

Вывод- нежилое здание - склад горюче-смазочных материалов. назначение: нежилое здание.площадь: 16.4 кв.м. количество этажей, в том числе подземных этажей: 1, в том числе подземных 0. адрес: российская федерация, краснодарский край, усть-лабинский район, ст-ца ладожская, ул.. кадастровый номер: 23:35:1006004:277.
py.user.next
PSAS
Но буква первая не стала заглавной, а наоборот все стали маленькие.
Значит, там в начале перед буквой какой-то символ.
  
>>> ' aaaBbbCCC'.capitalize()
' aaabbbccc'
>>> 
>>> 'aaaBbbCCC'.capitalize()
'Aaabbbccc'
>>>

Вообще, глуповато выглядит код твой.
PSAS
  
name = re.findall('Наименование:(.+)', text)
Надо так делать (если и искать таким образом)
  
name = re.findall('Наименование:(.+)', text)[0]
а не чистить строковое представление списка от его скобок и кавычек.

А вообще, в нём “прекрасно” всё! Ты бы описал, что ты пытаешься сделать, а то ты ещё так 100500 вопросов будешь задавать, потому что одни глупости с большой вероятностью порождают другие глупости.
PSAS
Здравствуйте!
Основная задача - создать программу, которая бы выбирала из файлов pdf в первую очередь (https://disk.yandex.ru/d/-cK-A-Ho-oe9aw - два файла для примера) необходимую информацию, а именно:

1) Делала из первого раздела (по земельному участку дополнительно берется 2 страница с указанием категории земельного участка) выписки из ЕГРН описание объекта последовательно (Наименование, Назначение, Площадь, Количество этажей, Адрес, Кадастровый номер), например,

Нежилое здание - склад горюче-смазочных материалов. Назначение: нежилое здание.Площадь: 16.4 кв.м. Количество этажей, в том числе подземных этажей: 1, в том числе подземных 0. Адрес: Российская федерация, Краснодарский край, Усть-лабинский район, ст-ца ладожская, ул.Коншиных, д.100. Кадастровый номер: 23:35:1006004:277.

При этом каждое предложение с заглавной буквы, в конце предложения ставится точка, если информация находится на двух строчках - это желательно надо проверить и добавить информацию из этой строчки тоже.
2) Также из 2 раздела http://prntscr.com/1zkgyd4 необходимо дополнительно составить информацию о наличии обременений, например,
Объект имеет следующие обременения:

“вид: Ипотека
дата государственной регистрации: 17.01.2018
номер государственной регистрации: 23:35:1006004:277-23/033/2018-3
срок, на который установлено ограничение прав и обременение объекта
недвижимости: с 17.01.2018 по 10.10.2020
лицо, в пользу которого установлено ограничение прав и обременение
объекта недвижимости: Акционерное общество Банк ”Северный морской путь“, ИНН: 7750005482
основание государственной регистрации: ‘Договор ипотеки (залога недвижимости) №0800100420.102017КЛ/ДИ-02’ от 12.01.2018”
и т.д.
Также желательно проверить и добавить информацию из следующей строчки если результирующая информация переносится на следующую строку.

3) Сохранить эту информацию в файл либо в шаблон вордовского документа в соответствующие поля

В папке где хранится программа добавляются несколько пдф файлов из которых последовательно выбирается указанная информация, также берется определенная информация из реквизитов ЕГРН в части указания номера выписки, номера права собственности, даты.

py.user.next
PSAS
Основная задача - создать программу
Короче, для тебя это О-О-Очень сложная программа будет. Если xam1816 дорос до таких программ, то ему будет неплохая тренировка. Как делать подобные программы, я писал здесь, и саму реализацию я полностью привёл здесь. Вот она делается точно так же.
doza_and
py.user.next
Короче, для тебя это О-О-Очень сложная программа будет.
Ну не настолько все плохо если чуток изменить постановку задачи.

PSAS
При этом каждое предложение с заглавной буквы, в конце предложения ставится точка, если информация находится на двух строчках

В вашем файле понять что вы вытаскиваете на основе локального анализа - типа большая буква точка в конце и т.п. это ненадежно и похоже неоднозначно. Надо анализировать файл как целое и писать нормальный парсер c использованием например https://pypi.org/project/pyparsing/ .

Например так - найти пары ключ значение, ключ - последовательность русских слов разделенных пробелами. В конце ключа двоеточие, перед началом перевод строки.




PSAS
Также желательно проверить и добавить информацию из следующей строчки если результирующая информация переносится на следующую строку.

Тут не добавлять нужно а не обращать внимания на переводы строк.

Такой парсер и с регулярками можно написать. но конечно не findall а последовательный разбор по частям.
PSAS
либо в шаблон вордовского документа в соответствующие поля
Я этот вопрос изучал в свое время. Вы что имеете в виду когда говорите “соответствующие поля”? Ворд очень плохо приспособлен для шаблонизации. Лучше сразу отказаться от идеи использовать вордовый файл как шаблон. Генерировать лучше pdf или html. Что такое шаблоны посмотрите тут: https://www.makotemplates.org/
https://jinja.palletsprojects.com/en/3.0.x/
https://docs.python.org/3/tutorial/inputoutput.html

PSAS
В папке где хранится программа добавляются несколько пдф файлов
Это дурацкая идея. Обычно программа установлена в питон или еще куда в стандартное место. в нормальной ОС вы в эту папку даже прав обычно не имеете что-то добавлять. А данные обрабатываются в ТЕКУЩЕЙ рабочей директории. Посмотрите в чем разница между текущей рабочей директорией и директорией в которой расположен скрипт.
xam1816
py.user.next
Если xam1816 дорос до таких программ, то ему будет неплохая тренировка.
Ну да, у меня еще не было опыта с парсингом PDF,воспользовался camelot,вполне оправдал ожидания для данных pdf
 import csv
import camelot
tables = camelot.read_pdf('16.4.pdf',pages='1,4')
# tables.export('table.csv',f='csv') # 'экспортирует всe найденые таблицы целиком в csv
tbl = tables[1].df #данные из dataframe можно использовать как угодно
indexes = [6, 5, 4, 7, 3, 0]
data = []
for i in indexes:
	k = tbl[0][i]
	v = tbl[1][i]
	data.append((k,v))
tbl_2 = tables[2].df
for i in range(5,16):
	k = tbl_2[2][i]
	v = tbl_2[3][i]
	data.append((k,v))
with open('result.csv','w',newline='',encoding='1251',errors='ignore') as f:
	writer = csv.writer(f)
	writer.writerows(data)

на выходе из примера этого кода csv файл:

 Наименование:,нежилое здание - склад горюче-смазочных материалов
Назначение:,Нежилое здание
"Площадь, м:",16.4
"Количество этажей, в том числе подземных этажей:","1, в том числе подземных 0"
Адрес:,"Российская Федерация, Краснодарский кр., Усть-Лабинский район, ст-ца
 Ладожская, ул.
Коншиных, 111"
Номер кадастрового квартала:,23:35:1006004
вид:,Ипотека
дата государственной регистрации:,06.02.2019
номер государственной регистрации:,23:35:1006004:277-23/033/2019-5
"срок, на который установлено ограничение прав и обременение объекта
недвижимости:",с 06.02.2019 по 30.07.2021
"лицо, в пользу которого установлено ограничение прав и обременение
объекта недвижимости:","Акционерное общество Банк ""Северный морской путь"", ИНН: 7750005482"
основание государственной регистрации:,'Договор ипотеки' №08001009.122018КЛ/ДИ-03 от 30.01.2019
вид:,Ипотека
дата государственной регистрации:,21.08.2019
номер государственной регистрации:,23:35:1006004:277-23/033/2019-7
"срок, на который установлено ограничение прав и обременение объекта
недвижимости:",с 21.08.2019 по 12.08.2022
"лицо, в пользу которого установлено ограничение прав и обременение
объекта недвижимости:","Акционерное общество Банк ""Северный морской путь"", ИНН: 7750005482"

для файла 496.2.pdf из архива
получилось

 Наименование:,Ангар
Назначение:,Нежилое здание
"Площадь, м:",496.2
"Количество этажей, в том числе подземных этажей:","1, в том числе подземных 0"
Адрес:,"Краснодарский край, р-н. Усть-Лабинский, ст-ца. Ладожская, ул. Коншиных, д. 111"
Номер кадастрового квартала:,23:35:1011002
вид:,Ипотека
дата государственной регистрации:,06.02.2019
номер государственной регистрации:,23:35:1011002:271-23/033/2019-6
"срок, на который установлено ограничение прав и обременение объекта
недвижимости:",с 06.02.2019 по 30.07.2021
"лицо, в пользу которого установлено ограничение прав и обременение
объекта недвижимости:","Акционерное общество Банк ""Северный морской путь"", ИНН: 7750005482"
основание государственной регистрации:,'Договор ипотеки' №08001009.122018КЛ/ДИ-03 от 30.01.2019
вид:,Ипотека
дата государственной регистрации:,21.08.2019
номер государственной регистрации:,23:35:1011002:271-23/033/2019-7
"срок, на который установлено ограничение прав и обременение объекта
недвижимости:",с 21.08.2019 по 12.08.2022
"лицо, в пользу которого установлено ограничение прав и обременение
объекта недвижимости:","Акционерное общество Банк ""Северный морской путь"", ИНН: 7750005482"

Для реализации ваших потребностей,нужно понимать мотив этой задачи,т.е. какую проблему она будет решать, исходя из этого,стремиться к определенным результатам, которые удовлетворят этот мотив
py.user.next
xam1816
Ну да, у меня еще не было опыта с парсингом PDF,воспользовался camelot,вполне оправдал ожидания для данных pdf
Не, речь-то не про PDF. Надо взять текст из PDF, а потом работать с этим текстом. Форматировать его. А сначала ещё чистить и приводить к нормальному виду, чтобы можно было форматировать его без ошибок. И потом отформатированный результат сохраняется в текстовый файл. Вот для всех этих операций и нужно написать полноценную программу с разными подпрограммами, через которые протекают данные.

Например, вот он говорит “нужно увеличить только первую букву”, а там может стоять как буква, так и пробел или дефис, вот их надо сначала почистить. При этом ему нужно увеличить только первую букву, а все остальные буквы, большие они или маленькие, оставить нетронутыми. В тексте же могут быть и аббревиатуры типа ООО или ИНН. Их не надо трогать. Так что тут и простой str.capitalize() не подходит.

В общем, надо писать много функций и всё выверять. Тут есть такой секрет: чтобы уметь делать такие программы, их нужно делать раз за разом. А если ты думаешь, что ты их будешь уметь делать типа просто так чудесным образом, то ты так и будешь уметь только то, что делал и больше ничего.
xam1816
py.user.next
чтобы уметь делать такие программы, их нужно делать раз за разом
Это понятно,чтобы сделать программу,нужно знать конечную цель этой программы.По моему мнению,автор этой темы абстрактно представляет,что должна делать его программа,потому что сохранить текстовые данные из его pdf в виде рассказа в вордовском документе не эффективно.
py.user.next
Например, вот он говорит “нужно увеличить только первую букву”
lambda s: s[0].upper()+s[1:]
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