14 subscribers
38 photos
3 files
18 links
Download Telegram
#cv #ml
Основные методы, основанные на глубоком обучении:

- Методы на основе сетки. Chargrid.
- Методы на основе токенов. BERT в нлп. LayoutLM, LayoutLMv2, LayoutXLM, StrucText. Сначала тренируется на больших наборах данных, чтобы дальше для улучшения требовался небольшой объем аннотированных данных.
- Методы на основе GCN: этот тип метода пытается изучить структурную информацию между изображениями и текстом, чтобы решить проблему извлечения информации из открытого набора (шаблоны, которые не были замечены в обучающем наборе), например GCN, SDMGR и другие алгоритмы.
- Сквозной метод: этот тип метода объединяет две существующие задачи: распознавание текста OCR и извлечение информации KIE в единую сеть для совместного обучения и усиливает друг друга в процессе обучения. Такие как Trie и другие алгоритмы.
#linux #ubuntu настройка нового пользователя

Создать

adduser jack 

Добавление в группу sudo

usermod -aG sudo jack

Далее тестим

Переходим в пользователя

su jack

запускаем команду доступную только root

#проверить содержимое /root
sudo ls -la /root # тут вводим пароль не root а именно пользователя jack
#django быстрый старт проекта

директория проекта
виртуальное окружение

pip install django


Создаем приложение

django-admin startproject mysite - создаем новое приложение

директория проекта
виртуальное окружение
pip install django


создаем новый репозиторий
git init


Создаем приложение
django-admin startproject mysite - создаем новое приложение

Далее можно запустить проверить
python manage.py runserver

В консоли будет адрес на локалхост если все сделано правильно увидим стартовую страницу
#ti #question Разрешение пространства имен в python

LEGB

порядок поиска имени переменной в областях видимости интерпретатором

1. local
2. Enclosing
3. global
4. built-in

В каждой области видимости могут независимо существовать переменные с одинаковыми именами !!!
#ti #question ООП. Абстракция

Представление объекта минимальным набором полей и методов, при этом с достаточной точностью для решаемой задачи.
cv_konovalov_en.pdf
163.7 KB
#resume Обновил резюме на hh ru и составил новое по образцу старшего специалиста
#教え
Видео 9/22

Существует 4 вида функций

Статическая функция
Статический метод - @staticmethod, обращаемся без
Метод класса (cls) - @classmethod, через cls позволяет обратиться к классу
Метод экземпляра (self)

Множественное наследование

посмотреть линеаризацию объекта можно через Object.mro

поиск атрибута в предках происходит по MRO(method resolution order) алгоритму C3

- линеаризацией класса называется список из самого класса и всех его предков (родителей и прородителей) в котором по порядку слева направо будет производиться поиск метода.
- порядок разрешения методов (MRO) — это способ, с помощью которого составляется линеаризация класса.
- монотонность — это свойство, которое требует соблюдения в линеаризации класса-потомка того же порядка следования классов-прородителей, что и в линеаризации класса-родителя.
- порядок локального старшинства (local precedence ordering)— это свойство, которое требует соблюдения в линеаризации класса-потомка того же порядка следования классов-родителей, что и в его объявлении.
L[C] = [C] + merge(L[C1], L[C2], …, L[CN], [C1, C2, …, CN])
https://habr.com/ru/articles/62203/

Unifying types and classes in Python 2.2 — о разделении объектной модели и модели мета-данных. Здесь же обсуждаются MRO, проблемы множественного наследования и super().
The Python 2.3 Method Resolution Order — алгоритм C3 с примерами. В конце есть реализация функций mro и merge на чистом Питоне для тех, кто лучше воспринимает код чем текст.
A Monotonic Superclass Linearization for Dylan — сравнение некоторых видов линеаризации.

Exceptions

нужны для того чтобы программа не падала


Абстрактный класс - класс шаблон, его экземпляр создать нельзя. Элемент архитектуры, а не физичского приложения. Имеет смысл "это должно быть в потомке и характеристики могут использоваться в разных объектах", но существовать самостоятельно не может

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


Модули
В python все что имеет расширение .py является модулем, видимо этот канал тоже модуль
Существует 2 вида импортов

imort ___

from ___ import ___ as _ (в разы меньше нагружает интерп)


Работа с файлами

file = open('text.txt')
file.readline() # читает строку
file.readlines() # создает список из всех строк что есть в файле
file.close() # при работе с open, close обязателен!

# with работает с объектами которые нужно закрыть после работы, удобен с базами данных
with open('text.txt', 'w') as file: # мы можем создавать свои контекстные менеджеры
# "r(чтение),w(запись), x(создать на запись иначе исключение), a(запись в конец), b(двоичный),
# t(текстовый режим + по умолчанию),+(чтение и запись)" - режимы работы
for line in my_file.readlines()
# после with close не нужен


JSON

json.dumps - в json
json.loads - из json
load и dump - без сериализации
#hw lesson 9

from functools import reduce

# 1. Дан список строк. Отформатировать все строки в формате ‘{i} - {string}’,
# где i это порядковый номер строки в списке. Использовать генератор списков.

str_list = ['asfgasdags', 'bbbbbbb', 'cccccc', 'ddddddd']

mod_str_list = [f'{i} - {string}' for i, string in enumerate(str_list)]

# 2. Создать lambda функцию, которая принимает на вход неопределенное количество именных аргументов
# и выводит словарь с ключами удвоенной длины. {‘abc’: 5} -> {‘abcabc’: 5}

double_key = lambda *args, **kwargs: {key * 2: value for key, value in kwargs.items()}


# 3. Создать декоратор для функции, которая принимает список чисел.
# Декоратор должен производить предварительную проверку данных - удалять все четные элементы из списка.

def even_face_control(func):
def wrapper(*args, **kwargs):
numbers = args[0]
faced_numbers = [num for num in numbers if not num & 1 == 0] # (҂◡̀_◡́)ᕤ
new_args = [faced_numbers, *args[1::]]
return func(*new_args, **kwargs)

return wrapper


@even_face_control
def num_multiplier(numbers: list[int]) -> int:
result = reduce(lambda acc, el: acc * el, numbers, 1)
return result


# 4. Создать универсальный декоратор,
# который меняет порядок аргументов в функции на противоположный.


def arg_reverse(func):
def wrapper(*args, **kwargs):
if args:
args = args[::-1]
if kwargs:
kwargs = kwargs[::-1]
return func(*args, **kwargs)

return wrapper


@arg_reverse
def foo(numbers: list[int], string: str) -> bool:
print(numbers, string)
return True
#教え
Видео 10/22 Базы данных

- популярные субд
SQLite - мощная встаиваемая рсубд
MySQL - самая популярная и часто используемая рсубд
PostgreSQL - самая провинутая и гибкая рсубд

- у баз данных есть свои типы данных

char(при задавании количества символов, если передано больше остальное добивается пробелами), varchar(недостающие символы не добиваются), int. decimal, datetime etc...

- первичные ключи (primary key или pkey) - когда мы называем столбец первичным ключом это говорит о том что сущности стоящие за ним повторяться не будут

- виды sql команд

1) определение данных DDL Data definition language (создать CREATE. изменить ALTER. удалить DROP)
2) управление данных ВСД Data Control language (GRANT - предоставить доступ, REVOKE - отозвать доступ, SET ROLE - разрешает или запрещает роли для текущего сеанса)
3) управление транзакциями TCL Transaction Control language (BEGIN/COMMIT и ROLLBACK - откат ) Транзация неделимая сущность(с точки зрения изменения на базу данных) состоящая из нескольких минитранзакций, в банке перевод лаве с одного счета на другой это не перекладывание золота с одного места на другое, по сути сначала берется ваш счет и вычитается определенная сумма, и далее прибавляется к счету другого человека. Транзакция засчитывается только если все минитранзакции прошли успешно.
4) Манипулирование данными DML Data manipulation language ( INSERT, DELETE, UPDATE, SELECT)

-- CREATE TABLE person (
-- id SERIAL primary key ,
-- firstname varchar,
-- lastname varchar
-- );
-- DROP TABLE person;
-- ALTER TABLE person
-- ADD COLUMN email varchar(255)
-- INSERT INTO person (id,firstname, lastname)
-- VALUES (1, 'Alex', 'Varkalov');
SELECT firstname FROM person WHERE lastname like '%ov';


типы связей в бд

- один ко многим
- один к одному
- многие ко многим

JOIN

left/right inner join - совпадение левой таблицы с правой
left/right outer join - все из левой и совпадения из правой, где не нашел null
full outer join - все из первой,все из второй, где не нашел стыка данных null
cross join - создает все возможные соединения 2х таблиц, декартово произведение, напимер берем сочетание 2х таблиц размеров футболок и цветов и получаем возможный набор ассортимента
#hw lesson 10
from random import randint
import csv
from pprint import pprint
from datetime import date, timedelta

today = date.today()

# 1. Создать csv файл с данными следующей структуры: Имя, Фамилия, Возраст.
# Создать отчетный файл с информацией по количеству людей входящих в ту или иную
# возрастную группу. Возрастные группы: 1-12, 13-18, 19-25, 26-40, 40+.
firstnames = ['ivan', 'slava', 'ulia', 'jenya', 'denis', 'igor',
'muslim', 'radik', 'natasha', 'vlad', 'jacks', 'ulia', 'petya', 'andrew', 'alice']
secondnames = ['petrov', 'usatov', 'polisatov', 'hvastunov', 'nosatov', 'dzevadze', 'shushkupa', 'ugvey']

people = [[firstnames[randint(0, len(firstnames) - 1)],
secondnames[randint(0, len(secondnames) - 1)],
str(randint(0, 50))] for _ in range(30)]

# без либы
# with open('people.csv','a') as f:
# for p in people:
# f.writelines(','.join(p) + '\n')

# c либой
# with open('people.csv', 'a', newline='') as csvfile:
# humanwriter = csv.writer(csvfile)
# for p in people:
# humanwriter.writerow(p)

#
# with open('people.csv', 'r', newline='') as csvfile:
# people_ages_groups = {
# (1, 12): 0,
# (13, 18): 0,
# (19, 25): 0,
# (26, 40): 0,
# (40, 100): 0
# }
# humanreader = csv.reader(csvfile)
# # люди с 15 годами возраста находятся на индексе 14 .example
# people_ages_list = [0 for age in range(1, 51)]
#
# for row in humanreader:
# people_age = int(row[2])
# people_ages_list[people_age - 1] += 1
#
# # people.append(row)
#
# for age_group_interval, count in people_ages_groups.items():
# for age in range(age_group_interval[0], age_group_interval[1] + 1):
# age_index = age - 1
# if age_index > len(people_ages_list) - 1:
# break
# people_ages_groups[age_group_interval] += people_ages_list[age_index]
#


# 2. Создать csv файл с данными о ежедневной погоде.
# Структура: Дата, Место, Градусы, Скорость ветра.
# Найти среднюю погоду(скорость ветра и градусы) для Минска за последние 7 дней.

people = [[firstnames[randint(0, len(firstnames) - 1)],
secondnames[randint(0, len(secondnames) - 1)],
str(randint(0, 50))] for _ in range(30)]

cities = 'Moscow', 'London', 'Washington', 'Minsk'
degrees_interval = (15, 26)
wind_speed_interval = (1, 10)
dates = ('20.05.2025', '03.06.2025')
weather_value = []
for day_num in range(10):
day_date = date.today() - timedelta(days=day_num)
weather_value.append([
[
day_date.isoformat(),
city_name,
randint(degrees_interval[0], degrees_interval[1]),
randint(wind_speed_interval[0], wind_speed_interval[1])
]
for city_name in cities
])
# создание файла погоды
# with open('weather.csv', 'a', newline='') as csvfile:
# weather_observer = csv.writer(csvfile)
# for day_info in weather_value:
# weather_observer.writerow(day_info)

with open('weather.csv', 'r', newline='') as csvfile:
weather_reader = csv.reader(csvfile)
minsk_wind = []
minks_degrees = []
day_counter = 7
while day_counter > 1:
day_weather_info = next(weather_reader)
minks_degrees.append(int(day_weather_info[3][2]))
minsk_wind.append(int(day_weather_info[3][3]))
day_counter -= 1
middle_degrees = sum(minks_degrees) // len(minks_degrees)
middle_wind = sum(minsk_wind) // len(minsk_wind)

print(f'Minsk last 7 days middle weather is {middle_degrees} as degrees and {middle_wind} as wind')

# 3. Дан файл, содержащий различные даты. Каждая дата - это число, месяц и год.
# Найти самую раннюю дату.


with open('dates.csv','r',newline='') as csvfile:
dates_reader = csv.reader(csvfile)
earliest_date = False
for row_date in dates_reader:
if earliest_date is False:
earliest_date = row_date
continue
if row_date < earliest_date:
earliest_date = row_date
print(earliest_date)
#教え
Видео 11/22 WEB

Клиент серверная архитектура

клиент - узел запрашивающий данные
сервер - узел хранящий данные

компьютеры общаются в сети с помощью протоколов http\ip

http запросы

get - получить инфу (можно отправить данные, но это небезопасно)
сочный value, в теории можно создать honey pot с открытой сетью вай фая и смотреть какой трафик через него гонят

post - запрос на отправку данных (регистрация - отправляем логин пароль)
put, patch - запрос на изменение(put - отправляем целый объект, path не требует отправки целого объекта)

delete - запрос на удаление


OSI - модель работы интернета. Сейчас интрнет работает на модели TCP\IP

1) Верхний уровень прикладной http(мы доставим определенному пользователю)

2) далее TCP определяет маршрут до адресата, разбивает по пакетам данные. Валидирует целостность данных. (мы доставим это в нужное приложение
UDP отправляет пакеты без подтверждения, работает быстрее, но данные могут прийти не все

далее
3) IP - internet protokol (мы доставим в нужный компьютер)

на этом уровне распределяются адреса для отправителей и получателей

4) Ethernet и тд Сетевой протокол (мы доставим это кабелем или вайфаем)

Интернет держат IEEE (некоммерческие)

они дают адреса местным региональным ребятам,
а они дают местным компаниям поменьше
#教え #django
Видео 11/22 Django blog

django-admin startproject core .

settings.py

allowed hosts откуда можем принимать запросы ['*'] можно поставить для начала

installed apps - регистрация написанного приложения в движке джанго

middleware - запросы приходящие в приложение проходят через эти прослойки

database - как будто понятно зачем

auth passwords - валидаторы пароля

далее внизу там переменные окружения для проекта

- urls.py - роутинг по сути
ссылки доступные на вашем сайте

- manage.py - файл который запускает весь проект
он кладет переменные окружение из settings.py в окружение и начинает с ними работать
запускает проект, запускает веб сервер

создать базу данных в django можно одной командой

python manage.py migrate


создаем админа
python manage.py createsuperuser


можем запустить

python manage.py runserver


создаем приложение
python manage.py startapp blog


появляется папка приложения, в нем
папка migrations будет описывать классы работающие с бд
admin.py - настройки админки
models - модели, таблицы баз данных
tests.py - тесты
views.py - вьюшки

Django основывается на MVT model-view-template
хранение, представление, отображение
#hw 11
from decimal import Decimal
from random import randint
from datetime import date


# 1
# Создать пять классов описывающие реальные объекты.
# Каждый класс должен содержать минимум три приватных атрибута,
# конструктор, геттеры и сеттеры для каждого атрибута, два метода.

class Robot:
last_model = 0


class Computer:
__cpu = False
__login: str
__password: str

def __init__(self, login, password):
self.__login = login
self.__password = password

@property
def cpu(self):
return self.cpu

@property.setter
def cpu(self, cpu):
self.__cpu = cpu

@property
def login(self):
return self.login

@property.setter
def login(self, login):
self.__login = login

@property
def password(self):
return self.__password

@property.setter
def password(self, password):
self.__password = password

def turn_on(self):
self.__cpu = True

def sing_in(self, login, password):
if login == self.__login and password == self.__password:
return True
return False


class Catgirl(Robot):
__uid: int
__race: str
__character: str

name: str

def __init__(self, race, character):
self.__uid = super().last_model + 1
super().last_model += 1
self.__race = race
self.__character = character

@property
def uid(self):
return self.uid

@uid.setter
def uid(self, uid):
self.__uid = uid

@property
def race(self):
return self.__race

@race.setter
def race(self, race):
self.__race = race

@property
def character(self):
return self.character

@character.setter
def character(self, character):
self.__character = character

def love(self, target):
while target.life > 0:
self.love(target)

@staticmethod
def kill(target):
del target


class Grave:
__material: str
__inside: str
__secret: str

def __init__(self, material, inside, secret):
self.__material = material
self.__inside = inside
self.__secret = secret

@property
def material(self):
return self.__material

@material.setter
def material(self, material):
self.__material = material

@property
def inside(self):
return self.__inside

@inside.setter
def inside(self, inside):
self.__inside = inside

@property
def secret(self):
return self.__secret

@secret.setter
def secret(self, secret):
self.__secret = secret

def fill_in(self, dead_human):
self.__inside = dead_human

def get_secret_from_inside(self):
return self.secret + self.inside


class Casino:
__bank: int
__jackpot: int
__owner: str

def __init__(self, owner_name):
self.__owner = owner_name
self.__bank = 0
self.__jackpot = 0

@property
def bank(self):
return self.__bank

@bank.setter
def bank(self, value):
self.__bank = value

@property
def jackpot(self):
return self.__jackpot

@jackpot.setter
def jackpot(self, value):
self.__jackpot = value

@property
def owner(self):
return self.__owner

@owner.setter
def owner(self, owner_name):
self.__owner = owner_name

def feed_owner(self):
self.__bank = 0

def enter_trouble(self):
self.__owner = None


class Success:
__luck: decimal
__try_count: int
__owner: str

def __init__(self):
self.__luck = Decimal(1, 100)
self.__try = 0
self.__owner = None

@property
def luck(self):
return self.__luck

@luck.setter
def luck(self, luck):
self.__luck = luck

@property
def try_count(self):
return self.__try

@try_count.setter
def try_count(self, try_count):
self.__try_count = try_count

@property
def owner(self):
return self.__owner
#教え #django
Видео 12/22 Django blog

в core директории в django есть wsgi(Web Server Gateway Interface)
прослойка между веб сервером типа Apache и py приложением

в setting.py можно настроить timezone

UTC - Coordinated Universal Time

admin.py - файл настройки admin интерфейса
apps.py - конфиг нашего приложения(название приложениея и тд)

самое важное находится
models.py - модели
test.py - тесты
urls.py - адреса и их обработчики
views.py

python manage.py makemigrations - собрать таблицы ( при изменениях или при первом создании таблиц)
python manage.py migrate - отправка транзакции подготовленной предыдущим шагом

можно зайти в оболожчу django
python manage.py shell
# тут на фоне в админке создаем объект модели Post
#и к пример получаем этот объект в консоли через
from blog.models import Post
Post.objects.all() # objects - обращение к менеджеру моделей
#ml #value Качество модели. Ресурсы про многогранную и важную тему

1. Sowa J. F. Knowledge representation. Logical, philosophical and computational foundations. Brooks/Cole, 2000
2. Partridge,Chris.BusinessObjects:Re-EngineeringforRe-Use[2ndEdition], BORO Centre, 2005
3. West Matthew. Developing High Quality Data Models. Elsevier, 2011