본문 바로가기

분류 전체보기

(67)
02. Selection Selection Problem 입력 : 리스트에 n개의 수와 1과 n 사이의 자연수 k가 주어진다 출력 : k번째로 작은 수 를 찾아 리턴한다 목적 : 비교횟수를 되도록 줄인다 상한과 하한 상한(upper bound) : 어떠한 값 x가 있고 집합 A의 모든 원소보다 크거나 같을 때, x를 상계라고 한다. 그리고 이러한 상계들의 집합에서 최소원소를 상한이라고 한다. 알고리즘에서 수행시간의 상한은 최악의 경우에서 문제를 수행하는데 걸리는 시간을 의미. 즉, 항상 해당 시간 이하로 답을 찾을 수 있다는 것을 내포. 우리가 말하는 점근적 표기법에서 $Big-O$ 표기법이 상한을 나타내는데 사용된다. 하한(lower bound) : 어떠한 값 x가 있고 집합 A의 모든 원소보다 작거나 같을 때, x를 상계라고..
01. Recursion 재귀 재귀 함수란, 하나의 함수에서 자신을 다시 호출하여 작업을 수행하는 방식으로 주어진 문제를 푸는 방법이다. 재귀함수는 매 호출시마다 입력값이 변한다. 입력값의 변화가 없는 호출은 무한히 반복된다. 입력값의 변화가 없거나 입력값의 변화가 특정 패턴을 반복하게 되면 그 재귀함수는 영원히 반복되다가 콜스택 초과로 종료된다. 따라서 재귀함수 설계 시에는 입력값이 종료 조건으로 수렴하는지를 꼭 검증해야 한다. 재귀 함수의 구조는 크게 2가지로 나눌 수 있다. 종료 조건 (base case) 재귀 함수가 무한 호출에 빠지지 않게 해주는 조건을 명시하는 것이다. 이는 곧 이미 문제가 충분히 작아서, 더 작은 부분 문제로 나누지 않고도 바로 답을 알 수 있는 경우를 뜻한다. 재귀 조건 (recursive case) 종..
Crawling, English Linguistics 논문 초록 가져오기 학술제를 준비하며, Linguistics 관련 논문 Abstract 데이터가 필요했다. 좋은 사이트를 찾기 위해서 정말 많이 찾아보았지만, 아래의 사이트가 그나마 괜찮았다. 크롤링 사이트 lingbuzz - archive of linguistics articles URL 구조 및 설명 Base url : https://ling.auf.net/ 카테고리 및 페이지 url : https://ling.auf.net/lingbuzz/_listing?community=카테고리&start=시작번호 가져올 카테고리는 총 4개 → semantics, syntax, phonology, morphology 시작 번호 : 처음 페이지에는 논문 30개씩 존재 → 이후 부터는 100개씩 존재 base_url = base + "..
Selenium 웹은 크게 2가지로 나눌 수 있다. 웹의 종류 selenium은 가장 유명한 브라우저 자동화도구이다. 실제 웹브라우저를 켜는 과정을 거치기 때문에 selenium을 이용하면 동적 페이지에서도 데이터를 수집할 수 있다 브라우저를 직접 동작시킨다는 것은 JavaScript를 이용해 비동기적으로 혹은 뒤늦게 불러와지는 컨텐츠들을 가져올 수 있다는 것이다. 즉, ‘눈에 보이는’ 컨텐츠라면 모두 가져올 수 있다는 뜻이다. requests에서 사용했던 .text의 경우 브라우저에서 ‘소스보기’를 한 것과 같이 동작하여, JS등을 통해 동적으로 DOM이 변화한 이후의 HTML을 보여주지 않는다. 반면 Selenium은 실제 웹 브라우저가 동작하기 때문에 JS로 렌더링이 완료된 후의 DOM결과물에 접근이 가능하다. S..
15. Fast API 응답 코드 설정 지금 현재는 Rest API의 응답은 아마 status code가 200일 것이다. 하지만 이는 HTTP status code와는 약간은 동떨어진 응답 코드이다. 일반적으로 get은 200, post는 201, delete는 204의 응답 코드를 가진다. 그렇다면 fast api에서도 해당 코드를 반환하게 만들어야한다. @app.post("/items/", status_code=201) async def create_item(name: str): return {"name": name} 위와 같이 status_code=201로 선언하여 api 함수가 정상적으로 종료되면 응답 코드로 201을 반환하게 만들 수 있다. /docs에는 아래와 같이 자동적으로 바뀌게 된다. Shortcut to remember t..
14. Fast API Syntactic sugar / 꿀팁 Reduce Duplication 이전의 내용에서 유저에 관한 모델을 생각해보자. input model은 password가 있어야하고, output model은 password를 내보내지 말아야하고, database model은 hashed password가 필요하다. 이를 단순히 작성하면 아래와 같을 것이다. class UserIn(BaseModel): username: str password: str email: EmailStr full_name: Optional[str] = None class UserOut(BaseModel): username: str email: EmailStr full_name: Optional[str] = None class UserInDB(BaseModel): usernam..
13. Fast API Response Model (Output 데이터 형식) Fast API에서는 response_model이라는 인자로 손쉽게 데이터를 정형화하여 내보낼 수 있다. response model은 pydantic으로 정의된 모델이나 이를 담는 데이터 형식이 될 수 있다. from typing import List, Optional from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None tags: List[str] = [] @app.post("/items/", response_model=Item) a..
12. Fast API, 쿠키와 헤더 받기 Query와 Path와 같이 쿠키와 헤더를 설정할 수 있다. Cookie from typing import Optional from fastapi import Cookie, FastAPI app = FastAPI() @app.get("/items/") async def read_items(ads_id: Optional[str] = Cookie(None)): return {"ads_id": ads_id} Cookie는 Path와 Query의 형제 Class이며 Param클래스를 똑같이 상속받는다. 이 말은 Cookie또한 함수라는 것! Header Cookie 설정한 것과 똑같이 하면 된다. Header 또한 함수! from typing import Optional from fastapi import Fa..