파이썬을 위한 객체지향 프로그래밍 기본 개념 설명

비전공자로써 파이썬을 하며 겪었던 힘든 내용들 중 객체의 핵심 내용 위주로..


우선 다음의 예시를 위한 클래스를 정의해보자

class User:
    def say_hello(user):
        print(f"안녕하세요! 저는 {user.name}입니다.")

    def login(user, my_email, my_password):
        if (user.email == my_email and user.password == my_password):
            print("로그인 성공")
        else:
            print("로그인 실패")

유저클래스는 해당 유저의 이름과 로그인 성공 실패 여부를 나타낸다.


 

인스턴스 메소드의 특별한 규칙

객체 지향 프로그래밍에 대해 정말 아무것도 모르시다면, 매우 간단히 정리해놓은 이전글을 참고하고 오시길..

 

객체 지향 프로그래밍

객체 속성, 행동 모든 것이 객체가 된다. 현실에 존재하든 가상이든 속성과 행동이 떠오른다면 객체가 될 수 있다. 객체지향 프로그래밍: 객체들과 객체들간의 소통 객체지향적으로 설계 = 모델�

koreadatascientist.tistory.com

 

User.say_hello(user1) # 클래스에서 메소드 호출
user1.say_hello() # 인스턴스에서 메소드를 호출

인스턴스에서 메소드를 호출하면, .(dot)왼쪽이 첫번째 파라미터로 자동으로 들어간다.

만약 이 상태에서 괄호를 빈 채로 놔두지 않고, 파라미터까지 써준다면, 2가지의 parameter를 넘겨준것이나 다름없다. 

그러므로 1개의 파라미터를 넘겨줘야 되는데, 2개를 넘겨줬다는 오류가 뜬다.

이는 마치 아래의 에러 코드에서 알 수 있듯, 중복된 파라미터로 기능을 한다.

user1.say_hello(user1) # 에러; 파라미터를 2개 전달받음
User.say_hello(user1, user1) # 위와 동일한 기능

 

파이썬의 첫번째 파라미터 권장사항

파이썬에서는 인스턴스 메소드의 첫번째 파라미터에 대해 'self'로 써주기를 권장한다.

그런 이유로 대부분의 파이썬 IDE(VScode, Pycharm 등)에서는 클래스 내의 메소드를 입력할 때 자동완성으로 첫 번째 파라미터로 self를 생성한다.

self는 결국 주인공일 것이고, 이것은 가독성도 좋게 만든다.

self를 적용해서 위의 클래스를 새로 정의하였다.

맨 위에서 정의한 클래스와 현재 클래스에서 달라진 내용이 무엇인지 찾아볼 것.

class User:
    def say_hello(self):
        print(f"안녕하세요! 저는 {self.name}입니다.")

    def login(self, my_email, my_password):
        if (self.email == my_email and self.password == my_password):
            print("로그인 성공")
        else:
            print("로그인 실패")

 

인스턴스 변수와 같은 이름을 갖는 파라미터

파라미터로 넘기는 변수 이름이 name인 경우가 있고,

인스턴스 변수가 user.name 이라면, 중복의 문제가 없을까?

class User:
    def say_hello(self):
        print(f"안녕하세요 {self.name}입니다.")
        
    def check_name(self, name):
        return self.name == name

맨 아래 코드를 잘 보면 self.name == name이다.

self.name은 인스턴스 변수를 나타내는 name을 의미하고,

뒤의 name은 파라미터로 받은 name이다.

과연 이 둘은 충돌의 문제가 있지 않을까?

 

결론적으로, 없다.

자연어 처리, 형태소 분석, 텍사노미, 시소러스에 대한 정리

파이썬 형태소 분석기 mecab, kkma, komoran, hannanum, okt에 대한 결과


  •  목차
    • 자연어처리(NLP)
    • 형태소분석
    • 텍사노미
    • 시소러스
    • 파이썬 텍스트 분석

  • 자연어 처리 NLP
    • 정의
      • 자연어(natural language): 우리가 쓰는 일상 언어. ex) 오늘 밥먹고 카페 감ㅋㅋㅋ
    • 활용
      • 음성 인식, 내용 요약, 번역, 감성 분석, 텍스트 분류 작업(스팸, 카테고리), 질의 응답 시스템, 챗봇

  • 형태소
    • 정의
      • 형태소: 일정한 의미가 있는 작은 말의 단위(최소 의미의 말 단위) + 문법적, 관계적인 단어 성분
      • (품사)태깅: 문맥을 고려하여 형태소 분석기의 중의성을 해결하는 과정
    • 구성: 어근, 조사, 접사, 어미
      • 어근(실질형태소): 실질적 의미의 중심이 되는 부분(9품사 중 조사를 제외한 8품사는 실질적 의미를 나타내는 중심부분이다)
      • 접사(형식형태소): 단독으로 쓰이지 않고, 접두사와 접미사가 있다.
  • 형태소의 분류
    • 실질형태소와 형식형태소
      • 실질형태소: 구체적인 대상, 동작, 상태를 표시하는 형태소
      • 형식형태소: 관계, 문법을 표시하는 형태소(조사, 접사, 어미)
    • 자립형태소와 의존형태소
      • 자립형태소: 다른 말에 의존하지 않고 혼자 사용 가능한 형태소
      • 의존형태소: 다른 말에 의존하여 쓰이는 형태소

  • 텍사노미(Taxonomy)
    • 정의: 분류(tassein) + 과학(nomos)
    • Q. 바이럴마케팅과 같은 허위 댓글의 다수를 모두 긁어오는것에 대한 방지책이 있을까?

  • Linguistic Rule
    • 거리에 기반한 언어 분석

  •  시소러스
    • 정의
      • 동의어, 유의어로 구축된 사전이 본 뜻이나, 텍스트분석에서는 용어의 계층관계를 나타낸다.
    • 활용
      • 동의어, 유의어를 추천하거나, 반의어를 보여주거나, 동음이의어를 통제하는 방식으로 활용

  • 파이썬 형태소 분석기 성능 비교 및 속도 비교
from konlpy.tag import Kkma
from konlpy.tag import Komoran
from konlpy.tag import Hannanum
from konlpy.tag import Okt
from konlpy.tag import Mecab # 해당 코드는 윈도우에서 되지 않는다.
import MeCab # 윈도우 mecab 불러오기
import re # 정규표현식

# 형태소 분석을 위한 객체 생성.
kkma = Kkma()
komoran = Komoran()
hannanum = Hannanum()
okt = Okt()
mecab = MeCab.Tagger()

# 띄어쓰기로 직장 잘리는거 주의
text1 = "무지개같은사장님"
text2 = "아저씨발냄새나요"
text3 = "아버지가방에들어가신다"


# 각각의 분석기에 대한 결과 출력
print(f'\n---------------------"{text1}"에 대한 분석------------------------\n')
print("꼬꼬마 : %s\n" % kkma.pos(text2))
print("코모란 : %s\n" % komoran.pos(text2))
print("한나눔 : %s\n" % hannanum.pos(text2))
print("Okt : %s\n" % okt.pos(text2))
print("mecab : %s\n" % mecab_pos(text2))


print(f'\n---------------------"{text2}"에 대한 분석------------------------\n')
print("꼬꼬마 : %s\n" % kkma.pos(text2))
print("코모란 : %s\n" % komoran.pos(text2))
print("한나눔 : %s\n" % hannanum.pos(text2))
print("Okt : %s\n" % okt.pos(text2))
print("mecab : %s\n" % mecab_pos(text2))


print(f'\n---------------------"{text3}"에 대한 분석------------------------\n')
print("꼬꼬마 : %s\n" % kkma.pos(text2))
print("코모란 : %s\n" % komoran.pos(text2))
print("한나눔 : %s\n" % hannanum.pos(text2))
print("Okt : %s\n" % okt.pos(text2))
print("mecab : %s\n" % mecab_pos(text2))

# 속도 비교를 위한 장문의 뉴스 글
news = """윤태호 중앙사고수습본부 방역총괄반장은 1일 정부세종청사에서 열린 중앙재난안전대책본부 브리핑에서 전공의들의 의대정원 확대 정책 철회 요구와 관련해 "정부는 이미 어떠한 조건도 걸지 않고 교육부 정원 통보 등 의사 수 확대 정책의 추진을 중단해 둔 상태"라고 말했다.

윤 방역총괄반장은 "코로나19의 위기 극복 이후에 모든 가능성을 열어놓고 협의를 하자는 제안을 지속해서 제시한 바 있다"며 "전공의단체가 새로운 정책 대안을 제시한다면 정부도 진정성을 갖고 논의에 임할 것"이라고 했다.

그러면서 "정부의 양보와 제안에도 불구하고 의사 수 확대 철회라는 요청이 환자들의 생명과 안전을 위협하는 집단적인 진료 거부까지 강행할 만큼 중요하고 시급한 것인지 재고해 달라"고 말했다.

정부는 의대정원 확대와 관련해서는 모든 가능성을 열어두고 논의해가겠다는 입장을 '대통령 약속'이라고 언급하면서 업무 복귀를 촉구했다.

윤 방역총괄반장은 "어제 문재인 대통령도 코로나19의 위기가 해소된 이후 정부가 약속한 협의체와 국회의 협의기구 등을 통해 의료계와 충분한 협의를 추진하겠다고 말했다"며 "대통령까지 약속한 협의를 믿고 조속히 진료현장으로 돌아와 달라"고 말했다.

또 정부는 전날 지방의 한 수련병원의 업무개시명령 현장조사 과정에서 벌어진 시위와 관련해서는 의사 표현 방식의 일환으로 보고, 공무집행방해죄 적용 등을 검토하지 않겠다는 입장을 밝혔다. 현재로서는 추가 현장조사도 계획하지 않고 있다.

아울러 정부는 업무개시명령 위반으로 고발된 전공의들에 대해서는 곧바로 사법처리가 이뤄지는 것이 아니라 적법성, 고의성 등에 대한 추가 검증이 진행될 예정이라고 전했다.

또 수련병원에서 전공의 근무를 파악하는 과정에서 착오가 있었던 사례가 발견된 만큼 검증 과정을 체계화할 방침이다."""
%%time
print(kkma.pos(news)[:5])

%%time
print(komoran.pos(news)[:5])

%%time
print(hannanum.pos(news)[:5])

%%time
print(okt.pos(news)[:5])

%%time
print(mecab_pos(news)[:5])

 

kkma 꼬꼬마
komoran 코모란
hannanum 한나눔
okt
mecab

 

 

+ Recent posts