Search

텍스트 처리

대분류
언어
소분류
Python
유형
비트/바이트
코드
인/디코딩
base64
정규표현식
최종 편집 일시
2024/10/27 15:35
생성 일시
2024/07/09 01:17
15 more properties

비트와 바이트

bit
컴퓨터에서 사용하는 가장 작은 데이터 단위, 하나의 비트는 2진수 1 또는 0으로 표현되어 데이터를 처리, 저장, 전송할 때 사용
byte
데이터 파일의 크기, 디스크 또는 그 외 저장 매체의 공간, 그리고 네트워크를 통하여 전송되는 데이터의 양을 표현하는데 사용 (1바이트는 8비트와 같다.)

ASCII(아스키 코드)

최초 인코딩
128개 문자 조합 제공
7비트 부호 (1비트는 통신 에러 검출용)
ord('한') # 54620 chr(54620) # 한
Python
복사

Unicode(유니 코드)

각 나라별 언어를 모두 표현하기 위해 나온 코드 체계
UTF-8 (가변길이 인코딩)
문자마다 고유한 코드 값 제공

Nuicode Normalization(유니코드 정규화)

파이썬으로 텍스트 전처리를 하다가 정규식으로 한글 영어만 추출할 때, 가끔 데이터가 None이 되는 경우가 많이 발생
그런 경우에는 대부분 같은 문자이지만 `아스키 코드가 달라서` 발생하는 문제들
이런 이슈(오류)들을 피하기 위해서 유니코드 정규화를 해야 한다.

유니코드 함수

normalize()
NFC(Normal From Composed)
구성된 문자 반환 : 조합형
NFD(Normal Form Decomposed)
분해, 결합된 문자 제공 : 완성형
unicodedata.category(chr):
chr 문자에 할당된 일반 범주(general category)를 문자열로 반환합니다.
`Mn`: Mark, no spacing(발음구별기호)
`LI`: Letter, lower case
`Lu`: Letter, upper case

인코딩

문자열을 바이트코드로 변환하는 과정
유니코드를 utf-8, euc-kr, ascii 형식의 byte 코드로 변환하는 것
korean_str = '한글' encoded = korean_str.encode('utf-8') encoded
Python
복사

디코딩

바이트코드를 문자열로 변환하는 과정
korean_str = b'\xed\x95\x9c\xea\xb8\x80' decoded = korean_str.decode('utf-8') decoded
Python
복사

base64

바이너리 데이터를 ASCII문자만으로 표현하기 위해 만들어진 인코딩 방법
import base64 # 인코딩 str = '안녕?' bytes = str.encode('UTF-8') result = base64.b64encode(bytes) result_str = result.decode('ascii') print(result_str) # 디코딩 code = '7JWI64WVPw==' code_bytes = code.encode('ascii') decoded = base64.b64decode(code_bytes) str = decoded.decode('UTF-8') print(str)
Python
복사

URL 인코딩/디코딩

from urllib import parse nave_str = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94" decoding_url = parse.unquote(nave_str) decoding_url # 'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=안녕하세요' incoding_url = parse.quote(decoding_url) incoding_url # 'https%3A//search.naver.com/search.naver%3Fwhere%3Dnexearch%26sm%3Dtop_hty%26fbm%3D1%26ie%3Dutf8%26query%3D%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94'
Python
복사

정규표현식

복잡한 문자열을 처리할 때 사용하는 기법

정규표현식 문법

메타 문자
> . ^ $ * + ? { } [ ] \ | ( )
정규 표현식에서 사용하는 메타 문자
원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
문자 클래스 []
문자 클래스를 만드는 메타 문자인 `[]` 사이에는 어떤 문자도 들어갈 수 있다.
`[]`안의 두 문자 사이에 하이픈(-)을 사용하면, 두 문자 사이의 범위(from - to)를 의미 (`^`은 not을 의미)
`[a-zA-Z]`: 알파벳 모두
`[0-9]`: 숫자
`[^0-9]`: 숫자가 아닌 문자
import re txt = "a1b2c3d4e5" pat = re.compile("[a-zA-Z]") pat.findall(txt)
Python
복사

Dot(.)

정규 표현식의 Dot(.) 메타 문자는 줄바꿈 문자인 \\n을 제외한 모든 문자와 매치됨을 의미
정규식을 작성할 때, re.DOTALL 옵션을 주면 `\n` 문자도 매치

반복(*)

와일드카드
* 바로 앞에 있는 문자 a가 0부터 무한대로 반복될 수 있다는 의미

반복(+)

+는 최소 1번 이상 반복될 때 사용
0번일땐 에러

반복({m,n},?)

m번 만큼 반복 횟수 고정

조건(?)