데이터 사이언스(Data Science)/자연어 처리 ,NLP

딥러닝 챗봇 만들기 - 3 (파이썬 이용하기)

게임이 더 좋아 2021. 1. 10. 00:12
반응형
728x170

파이썬의 기본들을 알고가야 한다고 한다.

내가 아무리 책을 따라간다고 해도...? 이미 아는 것 까지 따라가는 것은 시간낭비니까..ㅎ

 

읽으면서 내가 놓쳤던 부분이나 모르는 것 또는 중요한 것만 짚고 넘어가자.

 


 

파이썬은 우선 내장함수란 것이 존재한다.

우리가 어떠한 패키지(라이브러리)를 import 하지 않아도 쓸 수 있는 것들을 모아놓은 것이 있다.

바로 그것이 Built-in Method라고 한다.

docs.python.org/3/library/functions.html

 

Built-in Functions — Python 3.9.1 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer, a floating poin

docs.python.org

 

위 링크를 가면 다 볼 수 있다.

                                                                     


 

 

처음엔 숫자를 연산하는 방법을 배워보자

 

정수형, 실수형이 존재하며 영어로는 Integer Float가 존재한다. 

 

사칙연산 +-/* 는 물론 가능하며

몫을 얻기 위해선 // 를 사용하고 나머지를 위해서는 % 모듈러 연산을 사용한다.

**는 거듭제곱(power)에 사용된다.

 

파이썬에선 일반적으로 실수형을 사용하면 정수형과 섞어쓸 때 결과는 실수형이 나온다. 나머지는 정수형이 나온다.

 


 

문자열은 문자들의 집합을 의미하는데

**문자열 처리는 프로그램에서 필수적이다 -> 사용자가 사람이니까 ㅎ

 

파이썬에서는 문자열은 크게 2가지로 선언한다.

큰 따옴표와 작은 따옴표가 있다.

왜 2개냐고??

 

우선 인터프리터는 문자열 결과를 보여줄대 숫자값과 구분하기 위해 기본적으로 작은 따옴표로 묶어서 출력해주는데

만약 작은 따옴표가 포함되어있다면 큰 따옴표로 출력해준다.

-> 수많은 이유 중 하나임

 

줄바꿈은 안되느냐??

당연히 된다. 다만 다른 언어와 마찬가지로 방법이 따로 있다. 

 

\ = 백슬래시를 의미함.(그냥 슬래시아님)

아래와 같이 이스케이프 코드를 이용하여 문자열을 표현하기도 하는데

  • \n -> 줄바꿈

  • \t -> tab 8칸 인가 4칸임

  • \\ -> 백슬래시 출력 

  • \' -> 작은 따옴표 출력

  • \" -> 큰따옴표 출력

-> 위에 2개는 이해가지만 아래 3개는 왜있는지 모를 수 있다.

정말 문자로 따옴표나 백슬래시를 입력 하고 싶지만 인터프리터가 바로 그게 문자열 시작신호로 알아버리면 우리는 작은 따옴표를 입력을 할 수 없다.

그래서 우리는 이스케이프 코드를 이용해 

이스케이프 코드 뒤에는 내가 진짜로 따옴표를 사용할거야 하고 인터프리터한테 알려주는 식이다. 가릿?

 


List라는 자료형에 대해서 알아보자면

다른 언어의 Array와 같다고 보면 된다. 

따로 정리할 것은 없고

항상 유념해야할 것만 꼭 집어내자.

 

append는 리스트의 마지막에 !!! 추가시키는 거야!!! (스택의 push와 같음)

insert는 리스트의 index를 알아야 추가시킬 수 있는거야!!! 

 

pop은 리스트의 마지막 것을 꺼내는 거야 (스택의 pop과 같음)

del은 index를 알아야 삭제하는거야 !! 그리고 반환 안한다? (슬라이싱도 가능하단 얘기다)

remove는 리스트 정방향 순서대로 가장 먼저 나오는 위치의 x를 삭제하는거야!!

 

extend할 때 

기존 리스트의 뒤에다 추가시키는거야!!

 

 


 

 

다음은 딕셔너리(dictionary)

사전이냐고?? 뭐 그렇지

 

얘는 key : value 로 이루어져있고 array가 아니라 hash 형태의 자료구조라고 보면 된다.

그래서 value에 접근하려면 key로만 접근이 가능하다. (직접적으로 value 못건듬)

 

**Key가 숫자일 경우 인덱스 같긴 한데 인덱스로 착각하면 안된다.

 

추가 삭제도 key를 이용한다는 말이겠지?

 


 

조건문에 대해서 살짝만 복습하고 넘어가자

 

: 사용하는 것과 indent(들여쓰기) 잊지말고!

 

 

if는 조건이 True일 때만 실행되는 거다.

 

그러니까 그 조건도 Boolean으로 나올 수 있어야 겠지?

  • A == B

  • A !=B

  • A and B

  • A or B

  • A

  • not A

  • A > B

  • A >= B

  • A < B

  • A <= B

위와 같이 조건이 들어가서 if문을 완성시키는 것이다.

 

++elif 와 else를 이용해서 많은 조건이나 나머지에 대해서 정의하면 된다.

 


While 반복문에 대해서 말해보자

 

While은 참이면 반복한다. 라는 말이다.

값이 계속 참이면 계속 반복하는 것이다.

 

그래서 break같은 것들을 해줘서 탈출시키곤 한다.

 

 

for 반복문도 조건만큼 반복하는 것이다. 다만 그 조건이 어떠한 요소가 될 뿐 

숫자를 꺼내서 쓰든, 리스트의 요소를 꺼내든 뭐 아무튼 꺼내는 대로 반복해준다.

 

 


내장함수 중 몇개만 주목해서 알아보자

 

format() 메서드는 문자열 포매팅 방법인데 얘는 편리하다. (변수 타입을 신경쓰지 않아서)

출력할 때 너무 편하다. 굳이 %d 이런거 안써도 된다.

이런 식으로 쓴다.

print( ' a: {} / b: {} / c:{}'.format(10,1.2,'sdsd'))  

결과: a:10/b: 1.2/c: sdsd

즉 문자열에다 .format을 붙이고 문자열 안에는 {}가 들어가면 된다. 그리고 순서대로 입력하면 끝~

 

다음은 enumerate() 함수!

순서가 있는 자료형(리스트, 튜플, 문자열) 같은 경우 인덱스를 포함해서 값을 반환시킨다.

 

for 반복문을 이용해서 요솟값만 사용하게 했지만 enumerate는 반복하면서 인덱스도 활용할 수 있는 것이다.

 

그래서 사용할 때 이렇게 사용한다

for idx, value in enumerate(abc):

 

 

join() 함수!

리스트에다 쓰는 함수로 리스트를 문자열로 바꾸는 함수라고 보면된다.

 

' '.join(abc) 이렇게 많이 쓰는데

따옴표 사이에는 구분자를 선택한다. 

abc는 리스트를 넣는 것이다.

 

-> abc의 요소들을 공백 한 칸을 두고 모조리 합쳐서 문자열로 출력하겠다라는 말이다.

 

 


split()

얘는 join과 반대로 문자열을 리스트로 만드는 함수

 

 

abc.split( )

abc는 스플릿을 할 문자열

괄호 안의 값은 문자열에서 해당 값을 만날 때 마다 요소를 추가시키겠다는 뜻이다.

 

 

find()

특정 문자열을 찾는 함수다.

못찾으면 -1을 반환한다 -> 조건문에 잘 쓸 수 있겠지??

 

 

filter()

읽어도 필터다. 진짜 무엇인가 걸러내는 함수라고 보면 되겠다.

셀 수 있는 객체(iterable) 을 입력받아 요소를 함수로 수행해서 결과가 True만 걸러낸다.

 

 

filter( abc, def) 이런식으로 쓰인다.

abc에 함수가 들어가고 def에 셀 수 있는 객체가 들어간다. (예를 들면 숫자 범위 1-10 리스트)

-> 1을 abc로 돌려서 true확인 ... 10까지 확인하는 것이다.

 

 

lambda 키워드라는 것이 있는데

흠.. 굳이 필요한가는 싶다..

알아보고 싶다면 각자 알아보자

 

다음은 마지막 진짜 유용한 함수인 map()함수이다.

 

map 함수는 얘도 iterable한 객체를 입력받아 함수로 실행한 후 모든 결과를 묶어서 반환하는 것이다.

약간 filter랑 비슷하긴 하다.

 

++메모리 절약 효과가 있다고 한다.(Lazy evaluation을 하기 때문)

쓰이는 방법은 filter랑 같다.

 


 

내장함수가 있다면 외장함수가 있겠지?

근데 외장함수는 내가 라이브러리를 가져오는 것에 따라서 달라진다. 

클래스와 모듈 형태로 묶여 있어서 document보고 잘 이용하면 된다.

 

그래도 그냥 넘어가긴 그러니까 조금 유명한 라이브러리는 조금 만지고 넘어가는게 좋겠지??

물론 각자 더 알고싶다면 document를 찾아보도록

 

 

 

1.sys

파이썬 인터프리터와 관련된 정보와 기능을 제공하고

** sys에 관한 몇가지 함수는 우리가 내장되어 있는 함수보다 빠르다고 한다.(같은 역할임에도)

 

2. pickle

파이썬 객체를 파일로 저장하고 메모리로 읽어올 수 있게 도와주는 모듈이다.

객체가 메모리에 있었을 때 프로그램이 종료되면 내용이 싹다 사라지는데

그 때 다시 실행시켜도 유지하고 싶다면 pickle모듈을 사용해 파일로 저장하고 읽어오면 된단다.

-> 나 전처리하고 토크나이징 할 때 한듯.

 

** 프로그램 내부에서 사용되는 환경 설정이나 계산 결과를 유지하기 위해 사용한다.

 

3. time 모듈

time은 말 그대로 시간에 관한 함수들 모아놨다.

random 함수에서 시드를 현시간으로 해서 난수를 만들곤 한다.

 

 

4. random 모듈

랜덤 관련 함수의 집합체로

정말 정수 랜덤이든 실수 랜덤이든 들어있다.

 

여기까지만 하고.. 이어가보자

외장함수 진짜 많아.. 필요할 때마다 배우는 거야 그런건

 

 

 

 

반응형
그리드형