본문 바로가기
IT, Software/Python

Python chardet 모듈 활용 웹사이트, 문장단위 텍스트 인코딩 타입 확인하기

by 기타마을이장 2021. 3. 15.

파이선으로 텍스트 관련 처리를 하다 보면

하나의 파일 안에서도 문장마다 다양한 형태로 인코딩 된 경우를 볼 수 있다.

메모장에서도 한글이 포함돼 있지 않다면 해당 문장은 ascii로,

한글이 포함되면 utf-8로 저장되는 것 같다.

혹은 텍스트 포맷을 일괄 변환해주는 툴들을 활용하면 그런 것 같기도 하다.(추측)

텍스트 분할기를 만들다 보니 일반적으로 메모장으로 생성했다면 나오기 힘든 인코딩 타입들을 접하게 된다.

어떻게 생성된 파일인지는 알 수 없지만 문장별로 인코딩이 다른 경우가 많았다.

따라서, 문서 내 정말 특이한 형태의 인코딩이 있는 경우는

가급적 본 작업을 하기 전에 예외처리를 하거나 알람을 줘야 했다.

 

Python chardet모듈 detect 함수 활용 문장 인코딩 정보 확인

Python chardet 모듈을 활용하면 파일 혹은 url의 인코딩 정보를 확인할 수 있다.

해당 모듈을 활용해서 텍스트 파일 내 문장단위로 인코딩 정보를 확인해본다.

detect 함수를 활용하면 해당 문장의 정보가 map형태로 저장되어 나온다.

그리고 인코딩 정보만 보려면 get() 함수로 'encoding' 키에 대한 정보만 얻으면 된다.

f = open(".\\data\\test.txt")
for i in range(5):
	r = chardet.detect(f.readline())
	print(r)
    print(r.get("encoding"))

결과는 아래와 같다.

{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
ascii
{'encoding': 'utf-8', 'confidence': 0.938125, 'language': ''}
utf-8
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
ascii
{'encoding': 'utf-8', 'confidence': 0.87625, 'language': ''}
utf-8
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
ascii

 

Python chardet모듈 detect 함수 활용 웹사이트 인코딩 정보 확인

chardet.detect 모듈을 활용하면 url을 통해 웹사이트의 인코딩 정보도 확인할 수 있다.

import urllib.request

with urllib.request.urlopen('https://tistory.com') as f:
	r = f.read()
	print(chardet.detect(r))

with urllib.request.urlopen('https://interpark.com') as f:
	r = f.read()
	print(chardet.detect(r))

 

티스토리는 utf-8로, 인터파크는 EUC-KR로 인코딩 된 것을 확인할 수 있다.

{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
{'encoding': 'EUC-KR', 'confidence': 0.99, 'language': 'Korean'}

 

 

역시 파이선이 왜 이렇게까지 널리 사용되게 되었는지를 잘 보여주는 좋은 예인 것 같다.

이런 다양한 모듈들을 만들어주는 전 세계 고수들에게 다시 한번 감사를...ㅎㅎ

반응형

댓글