Forwarded from Инжиниринг Данных (Dmitry Anoshin)
Заказал книжку с многообещающим названием - Data Engineering with Python.
Forwarded from Zen of Python
Подготовили для вас подборку статей, которые помогут легче начать свой путь программиста на Python, ведь тут вы узнаете:
— основные типы данных в Python: https://tprg.ru/7yw8
— какие встроенные функции нужно знать, а на какие не стоит тратить время: https://tprg.ru/DkFR
— зачем нужны функции с переменным количеством переменных и как ими пользоваться: https://tprg.ru/McGU
— что такое словари и что с ними делать: https://tprg.ru/U0I7
— как работают алгоритмы сортировки: https://tprg.ru/VHC5
— как работают импорты в Python: https://tprg.ru/3mRr
— зачем нужны декораторы и как ими пользоваться: https://tprg.ru/NoFh
— основные типы данных в Python: https://tprg.ru/7yw8
— какие встроенные функции нужно знать, а на какие не стоит тратить время: https://tprg.ru/DkFR
— зачем нужны функции с переменным количеством переменных и как ими пользоваться: https://tprg.ru/McGU
— что такое словари и что с ними делать: https://tprg.ru/U0I7
— как работают алгоритмы сортировки: https://tprg.ru/VHC5
— как работают импорты в Python: https://tprg.ru/3mRr
— зачем нужны декораторы и как ими пользоваться: https://tprg.ru/NoFh
'''import os, io
import errno
import urllib
import urllib.request
import hashlib
import re
import requests
from time import sleep
from google.cloud import vision
from google.cloud.vision import types
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup
import pandas as pd
from ast import literal_eval
from cdqa.utils.filters import filter_paragraphs
from cdqa.utils.download import download_model, download_bnpp_data
from cdqa.pipeline.cdqa_sklearn import QAPipeline
from cdqa.utils.converters import pdf_converter
result_urls = []
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'your_private_key.json'
client = vision.ImageAnnotatorClient()
FILE_NAME = 'your_image_file.jpg'
with io.open(os.path.join(FILE_NAME), 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations[0]
# print(texts.description)
if '?' in texts.description:
question = re.search('([^?]+)', texts.description).group(1)
elif ':' in texts.description:
question = re.search('([^:]+)', texts.description).group(1)
elif '\n' in texts.description:
question = re.search('([^\n]+)', texts.description).group(1)
slugify_keyword = urllib.parse.quote_plus(question)
# print(slugify_keyword)
def crawl_result_urls():
req = Request('https://google.com/search?q=' + slugify_keyword, headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
bs = BeautifulSoup(html, 'html.parser')
results = bs.find_all('div', class_='ZINbbc')
try:
for result in results:
link = result.find('a')['href']
print(link)
if 'url' in link:
result_urls.append(re.search('q=(.*)&sa', link).group(1))
except (AttributeError, IndexError) as e:
pass
def get_result_details(url):
try:
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
bs = BeautifulSoup(html, 'html.parser')
try:
title = bs.find(re.compile('^h[1-6]$')).get_text().strip().replace('?', '').lower()
# Set your path to pdf directory
filename = "/path/to/pdf_folder/" + title + ".pdf"
if not os.path.exists(os.path.dirname(filename)):
try:
os.makedirs(os.path.dirname(filename))
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
with open(filename, 'w') as f:
for line in bs.find_all('p')[:5]:
f.write(line.text + '\n')
except AttributeError:
pass
except urllib.error.HTTPError:
pass
def find_answer():
# Set your path to pdf directory
df = pdf_converter(directory_path='/path/to/pdf_folder/')
cdqa_pipeline = QAPipeline(reader='models/bert_qa.joblib')
cdqa_pipeline.fit_retriever(df)
query = question + '?'
prediction = cdqa_pipeline.predict(query)
# print('query: {}\n'.format(query))
# print('answer: {}\n'.format(prediction[0]))
# print('title: {}\n'.format(prediction[1]))
# print('paragraph: {}\n'.format(prediction[2]))
return prediction[0]
crawl_result_urls()
for url in result_urls[:3]:
get_result_details(url)
sleep(5)
answer = find_answer()
print('Answer: ' + answer)'''
import errno
import urllib
import urllib.request
import hashlib
import re
import requests
from time import sleep
from google.cloud import vision
from google.cloud.vision import types
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup
import pandas as pd
from ast import literal_eval
from cdqa.utils.filters import filter_paragraphs
from cdqa.utils.download import download_model, download_bnpp_data
from cdqa.pipeline.cdqa_sklearn import QAPipeline
from cdqa.utils.converters import pdf_converter
result_urls = []
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'your_private_key.json'
client = vision.ImageAnnotatorClient()
FILE_NAME = 'your_image_file.jpg'
with io.open(os.path.join(FILE_NAME), 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations[0]
# print(texts.description)
if '?' in texts.description:
question = re.search('([^?]+)', texts.description).group(1)
elif ':' in texts.description:
question = re.search('([^:]+)', texts.description).group(1)
elif '\n' in texts.description:
question = re.search('([^\n]+)', texts.description).group(1)
slugify_keyword = urllib.parse.quote_plus(question)
# print(slugify_keyword)
def crawl_result_urls():
req = Request('https://google.com/search?q=' + slugify_keyword, headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
bs = BeautifulSoup(html, 'html.parser')
results = bs.find_all('div', class_='ZINbbc')
try:
for result in results:
link = result.find('a')['href']
print(link)
if 'url' in link:
result_urls.append(re.search('q=(.*)&sa', link).group(1))
except (AttributeError, IndexError) as e:
pass
def get_result_details(url):
try:
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
bs = BeautifulSoup(html, 'html.parser')
try:
title = bs.find(re.compile('^h[1-6]$')).get_text().strip().replace('?', '').lower()
# Set your path to pdf directory
filename = "/path/to/pdf_folder/" + title + ".pdf"
if not os.path.exists(os.path.dirname(filename)):
try:
os.makedirs(os.path.dirname(filename))
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
with open(filename, 'w') as f:
for line in bs.find_all('p')[:5]:
f.write(line.text + '\n')
except AttributeError:
pass
except urllib.error.HTTPError:
pass
def find_answer():
# Set your path to pdf directory
df = pdf_converter(directory_path='/path/to/pdf_folder/')
cdqa_pipeline = QAPipeline(reader='models/bert_qa.joblib')
cdqa_pipeline.fit_retriever(df)
query = question + '?'
prediction = cdqa_pipeline.predict(query)
# print('query: {}\n'.format(query))
# print('answer: {}\n'.format(prediction[0]))
# print('title: {}\n'.format(prediction[1]))
# print('paragraph: {}\n'.format(prediction[2]))
return prediction[0]
crawl_result_urls()
for url in result_urls[:3]:
get_result_details(url)
sleep(5)
answer = find_answer()
print('Answer: ' + answer)'''
Forwarded from Pythonist.ru - образование по питону
Топ. Пишем на Python бота, который может решить любой вопрос с вариантами ответа по картинке [с кодом]
В этой статье:
- Vision AI,
- поиск вопроса в Google,
- сканирование информации (при помощи BeautifulSoup).
Читать статью
#топ
В этой статье:
- Vision AI,
- поиск вопроса в Google,
- сканирование информации (при помощи BeautifulSoup).
Читать статью
#топ
Forwarded from Python Lounge: работа и стажировки для программистов
📌Функция sum() в python3
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum():
Cинтакс функции sum().
Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.
Пример:
✅Результат:
🔴Примечания:
Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()
Пример:
✅Результат:
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum():
Cинтакс функции sum().
sum(iterable, start)
Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.
Пример:
numbers = [1,5,5]
#парметр start передается со значением по умолчанию(0).
numbers_sum = sum (numbers);
print (numbers_sum)
# парметр start передается со значением 7.
numbers_sum = sum (numbers, 7)
print (numbers_sum)
✅Результат:
11
18
🔴Примечания:
Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
sum(iterable , start)
, нужно вместе c import math
добавить следующую строку. math.fsum(iterable).
Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()
Пример:
myTuple = ("Python", "Lounge", "is", "the","best")
x = " ".join(myTuple)
print (x)
✅Результат:
Python Lounge is the best
Forwarded from Python Lounge: работа и стажировки для программистов
📌ДИНАМИЧЕСКИЕ АТТРИБУТЫ ДЛЯ ОБЪЕКТОВ
Есть возможность контролировать способы получения аттрибутов из объекта , с помощью магического метода
Когда мы вызваем что-то вроде
в нём.
Если ничего не найдено , то объект не имеет аттрибут с именем которую мы ищем, тогда extra метод
Получая это значение мы можем котролировать значения которые будут возвращены к нашим объектам.
Мы даже можем создать новый аттрибут и вернуть объекту "ненайденный аттрибут".
✅Ниже показано определение метода
Примечание:
🔴Будьте осторожны при реализации такого динамического метода, как __getattr__,
и используйте его с осторожностью. При реализации __getattr__,
поднять AttributeError.
Есть возможность контролировать способы получения аттрибутов из объекта , с помощью магического метода
__getattr__
.Когда мы вызваем что-то вроде
<myobject>.<myattribute>
,Python будет искать <myattribute>
в библиотеке объекта, вызвав __getattribute__
в нём.
Если ничего не найдено , то объект не имеет аттрибут с именем которую мы ищем, тогда extra метод
__getattr__
вызывается , получая имя аттрибута (myattribute) как параметр.Получая это значение мы можем котролировать значения которые будут возвращены к нашим объектам.
Мы даже можем создать новый аттрибут и вернуть объекту "ненайденный аттрибут".
✅Ниже показано определение метода
__getattr__
.class DynamicAttributes:
def __init__(self, attribute):
self.attribute = attribute
def __getattr__(self, attr):
if attr.startswith("fallback_"):
name = attr.replace("fallback_", "")
return f"[fallback resolved] {name}"
raise AttributeError(f"{self.__class__.__name__} has no attribute {attr}")
Примечание:
🔴Будьте осторожны при реализации такого динамического метода, как __getattr__,
и используйте его с осторожностью. При реализации __getattr__,
поднять AttributeError.
Forwarded from Python Lounge: работа и стажировки для программистов
📌ГЕТТЕРЫ И СЕТТЕРЫ В python
(Инкапсуляция)
В ЯП python по умолчанию все атрибуты в классах являются общедоступными(public), это значит , что из любого места программы мы можем получить аттрибут объекта и изменть его.
🎯Пример:
✅Результат:
В примере выше мы показали что без икапсуляции можно нежелательным образом изменять аттрибуты класса.
Не зря инкапсуляция является несущим звеном в мире ООП.
⚠️
На вопрос что такое инкапсуляция в программировании нужно ответить следующим образом.
Инкапсуляция предотвращает прямой доступ к атрибутам объект из вызывающего кода.
Касательно инкапсуляции непосредственно в языке программирования Python, скрыть атрибуты класса можно сделав их приватными или закрытыми и ограничив доступ к ним через специальные методы, которые еще называются свойствами.
Изменим выше определенный класс, определив в нем свойства:
Для создания приватного атрибута в начале его наименования ставится двойной прочерк:
👉Аннотации свойств
Выше мы рассмотрели, как создавать свойства. Но Python имеет также еще один - более элегантный способ определения свойств. Этот способ предполагает использование аннотаций, которые предваряются символом @.
Для создания свойства-геттера над свойством ставится аннотация
Для создания свойства-сеттера над свойством устанавливается аннотация имя_свойства_геттера.setter.
(Инкапсуляция)
В ЯП python по умолчанию все атрибуты в классах являются общедоступными(public), это значит , что из любого места программы мы можем получить аттрибут объекта и изменть его.
🎯Пример:
class Human:
def __init__(self, name, age): #коструктор класса Human
self.name = name #устанавливаем имя
self.age = age #устанавливаем возраст
def display_info(self):
print ("Имя : ", self.name, "\tВозраст:", self.age)
Me = Human ("python_lounge", 2)
Me.name = "Captain-America!" # изменяем атрибут name
Me.age = 132 # изменяем атрибут age
Me.display_info()
✅Результат:
Output : "Имя: Человек-паук Возраст: -129"
В примере выше мы показали что без икапсуляции можно нежелательным образом изменять аттрибуты класса.
Не зря инкапсуляция является несущим звеном в мире ООП.
⚠️
На вопрос что такое инкапсуляция в программировании нужно ответить следующим образом.
Инкапсуляция предотвращает прямой доступ к атрибутам объект из вызывающего кода.
Касательно инкапсуляции непосредственно в языке программирования Python, скрыть атрибуты класса можно сделав их приватными или закрытыми и ограничив доступ к ним через специальные методы, которые еще называются свойствами.
Изменим выше определенный класс, определив в нем свойства:
class Human:
def __init__(self, name, age): #коструктор класса Human
self.__name = name #устанавливаем имя
self.__age = age #устанавливаем возраст
def set_age(self, age):
if (age in range(1,100)):
self.__age = age #
else :
print ("Недопустимый возраст")
def set_name (self, name):
self.__name = name if name else print ("Недопустимое имя")
def display_info(self):
print ("Имя : ", self.__name, "\tВозраст:", self.__age)
def get_age(self):
return self.__age
def get_name(self):
return self.__name
Me = Human ("python_lounge", 2)
Me.display_info() #Имя:python_lounge Возраст: 2
Me.set_name ("Captain-America!") #изменяем атрибут name
Me.set_age(26) # изменяем атрибут age
Me.display_info() #Имя:Captain-America! Возраст: 26
Для создания приватного атрибута в начале его наименования ставится двойной прочерк:
self.__name
. К такому атрибуту мы сможем обратиться только из того же класса. Но не сможем обратиться вне этого класса. Например, присвоение значения этому атрибуту ничего не даст:Me.__age = 43
👉Аннотации свойств
Выше мы рассмотрели, как создавать свойства. Но Python имеет также еще один - более элегантный способ определения свойств. Этот способ предполагает использование аннотаций, которые предваряются символом @.
Для создания свойства-геттера над свойством ставится аннотация
@property.
Для создания свойства-сеттера над свойством устанавливается аннотация имя_свойства_геттера.setter.
Forwarded from Библиотека питониста | Python, Django, Flask
Forwarded from Библиотека питониста | Python, Django, Flask
Что, если mypy может предупредить вас о возможных проблемах во время компиляции?
https://proglib.io/w/278c806e
https://proglib.io/w/278c806e
Hakibenita
Exhaustiveness Checking with Mypy
Fail at compile time, not at run time
Forwarded from Библиотека питониста | Python, Django, Flask
Stack Overflow
Why is plus-equals valid for list and dictionary?
Adding a dictionary to a list using the __iadd__ notation seems to add the keys of the dictionary as elements in the list. Why? For example
a = []
b = {'hello':'world'}
a += b
>> a now stores ['
a = []
b = {'hello':'world'}
a += b
>> a now stores ['
Forwarded from Библиотека питониста | Python, Django, Flask
Realpython
Episode #39: Generators, Coroutines, and Learning Python Through Exercises – The Real Python Podcast
Have you started to use generators in Python? Are you unsure why you would even use one over a regular function? How do you use the special "send" method and the "yield from" syntax? This week on the show, we have Reuven Lerner to talk about his PyCon Africa…
Forwarded from Библиотека питониста | Python, Django, Flask
GitHub
GitHub - beartype/beartype: Unbearably fast near-real-time hybrid runtime-static type-checking in pure Python.
Unbearably fast near-real-time hybrid runtime-static type-checking in pure Python. - GitHub - beartype/beartype: Unbearably fast near-real-time hybrid runtime-static type-checking in pure Python.
Forwarded from Типичный программист
Стартует 6 раунд баттла ЯП: сегодня за вашу любовь соревнуются SQL с JS и Python C#
Вчера победу одержали Swift и C++. С чем и поздравляем любителей этих языков. А мы двигаемся дальше.
Сегодня мы выберем самый любимый язык между SQL и JS, Python и C#. Напоминаем, что выбираем максимально субъективно. Так что смело голосуйте за тот язык, что больше нравится вам:
https://tprg.ru/W5KX
Голосование закончится 20 декабря в 11:00 по московскому времени. Следить за всеми постами чемпионата можно по тегу #toplang2020 или в боте: https://t.me/tproger_official_bot/?start=toplang2020
Вчера победу одержали Swift и C++. С чем и поздравляем любителей этих языков. А мы двигаемся дальше.
Сегодня мы выберем самый любимый язык между SQL и JS, Python и C#. Напоминаем, что выбираем максимально субъективно. Так что смело голосуйте за тот язык, что больше нравится вам:
https://tprg.ru/W5KX
Голосование закончится 20 декабря в 11:00 по московскому времени. Следить за всеми постами чемпионата можно по тегу #toplang2020 или в боте: https://t.me/tproger_official_bot/?start=toplang2020
Forwarded from Zen of Python
Pylint: о попытке снизить потребление памяти
Желая выяснить, что потребляет большое количество памяти при проверке кода с помощью Pylint и как с этим бороться, автор провёл своё мини-расследование.
Эта статья — разбор кода стандартной библиотеки, который поможет лучше понять принципы его работы для более качественного её использования, а также избежать проблем, с которыми столкнулся автор:
https://tprg.ru/LHZI
#библиотека #pylint
Желая выяснить, что потребляет большое количество памяти при проверке кода с помощью Pylint и как с этим бороться, автор провёл своё мини-расследование.
Эта статья — разбор кода стандартной библиотеки, который поможет лучше понять принципы его работы для более качественного её использования, а также избежать проблем, с которыми столкнулся автор:
https://tprg.ru/LHZI
#библиотека #pylint
Forwarded from Zen of Python
Pip: как устанавливать пакеты в Python
Существует большое количество различных менеджеров пакетов. Их использование позволяет упростить и ускорить создание проекта за счёт быстрого поиска и установки.
В этой статье вы узнаете, как работать с пакетами, используя менеджер Pip:
https://tprg.ru/psiz
Существует большое количество различных менеджеров пакетов. Их использование позволяет упростить и ускорить создание проекта за счёт быстрого поиска и установки.
В этой статье вы узнаете, как работать с пакетами, используя менеджер Pip:
https://tprg.ru/psiz
Forwarded from Библиотека питониста | Python, Django, Flask
⛱ Как правильно ничего не делать в Python: инструкция pass
Говорят, что в Python нет ничего проще ключевого слова pass – всего лишь инструкция «ничего не делать», чтобы соблюсти синтаксис языка. Однако не всегда pass служит заглушкой – есть и более интересные применения.
https://proglib.io/sh/64oStjVNXh
Говорят, что в Python нет ничего проще ключевого слова pass – всего лишь инструкция «ничего не делать», чтобы соблюсти синтаксис языка. Однако не всегда pass служит заглушкой – есть и более интересные применения.
https://proglib.io/sh/64oStjVNXh
Forwarded from Библиотека питониста | Python, Django, Flask
Real-World Python: A Hacker's Guide to Solving Problems with Code (2020)
Автор: Lee Vaughan
Количество страниц: 360
Если вы освоили основы и готовы изучить некоторые из более мощных инструментов, доступных на Python, данная книга покажет вам, как это сделать. В рамках серии практических проектов вы исследуете и решите реальные задачи с помощью сложных инструментов компьютерного зрения, машинного обучения, анализа данных и языковой обработки. Вы познакомитесь с важными модулями, такими как OpenCV, NumPy, Pandas, NLTK, Bokeh, Beautiful Soup, Requests, HoloViews, Tkinter, turtle, matplotlib и другими.
Скачать книгу
Автор: Lee Vaughan
Количество страниц: 360
Если вы освоили основы и готовы изучить некоторые из более мощных инструментов, доступных на Python, данная книга покажет вам, как это сделать. В рамках серии практических проектов вы исследуете и решите реальные задачи с помощью сложных инструментов компьютерного зрения, машинного обучения, анализа данных и языковой обработки. Вы познакомитесь с важными модулями, такими как OpenCV, NumPy, Pandas, NLTK, Bokeh, Beautiful Soup, Requests, HoloViews, Tkinter, turtle, matplotlib и другими.
Скачать книгу
Telegram
Книги для программистов (reserved)
Real-World Python: A Hacker's Guide to Solving Problems with Code (2020)
Автор: Lee Vaughan
Автор: Lee Vaughan
Forwarded from Zen of Python
Что работодатели ждут от Junior Python-разработчика
Автор нашей статьи, имея за плечами соответствующий опыт и знания, делится ими с нашими читателями.
В статье вы узнаете, как успешно пройти собеседование и не ударить в грязь лицом, какие навыки нужны, что повторить перед собеседованием и многое другое:
https://tprg.ru/WP42
Автор нашей статьи, имея за плечами соответствующий опыт и знания, делится ими с нашими читателями.
В статье вы узнаете, как успешно пройти собеседование и не ударить в грязь лицом, какие навыки нужны, что повторить перед собеседованием и многое другое:
https://tprg.ru/WP42