새소식

반응형
AI/tutorials

한국어 텍스트 데이터 전처리

  • -
728x90
반응형

1) 텍스트 클리닝 (html / url / 특수 문자 제거 등)

  • 크롤링 데이터의 경우 html tag 제거
  • 필요하지 않은 특수문자 매핑 또는 제거
  • ㄱ-ㅎ/ㅏ-ㅣ 등 자음과 모음으로만 이루어진 글자들 제거
  • @#$%^&*() 등 puctuation(문장부호) 제거

 

import re

punct = "/-'?!.,#$%\'()*+-/:;<=>@[\\]^_`{|}~" + '""“”’' + '∞θ÷α•à−β∅³π‘₹´°£€\×™√²—–&'
punct_mapping = {"‘": "'", "₹": "e", "´": "'", "°": "", "€": "e", "™": "tm", "√": " sqrt ", "×": "x", "²": "2", "—": "-", "–": "-", "’": "'", "_": "-", "`": "'", '“': '"', '”': '"', '“': '"', "£": "e", '∞': 'infinity', 'θ': 'theta', '÷': '/', 'α': 'alpha', '•': '.', 'à': 'a', '−': '-', 'β': 'beta', '∅': '', '³': '3', 'π': 'pi', }
    
def cleaning(texts, punct, mapping):
    for text in texts:
        for p in mapping:	# 특수부호 mapping
            text = text.replace(p, mapping[p])
        
        for p in punct:		# 특수부호 제거
            text = text.replace(p, '')
		
        text = re.sub(r'<[^>]+>', '', text) 	  # remove Html tags
        text = re.sub(r''([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)'', '', text) 	  # remove e-mail
         text = re.sub(r'(http|ftp|https)://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', ' ', text)	  # remove URL  
        text = re.sub(r'\s+', ' ', text)		  # Remove extra space
        text = re.sub('([ㄱ-ㅎㅏ-ㅣ]+)', '', text)	# Remove 한글 자음, 모음
        text = re.sub('[^\w\s\n]', '', text)	  # Remove 특수기호
    
    return texts

 

 

 

2) 띄어쓰기 

  • 한국어의 경우 띄어쓰기에 따라 토큰 분리가 완전히 달라질 수 있기 때문에 띄어쓰기 검사를 제대로 해주는게 좋다.
  • 띄어쓰기가 없는 문장으로 바꾼 다음에 띄어쓰기 라이브러리 적용한다.

 

pykospacing 라이브러리

  • 100만개 뉴스로 학습된 딥러닝 모델 (CNN + GRU)

 

[ Installation ]

pip install git+https://github.com/haven-jeon/PyKoSpacing.git

 

[ Usage ]

sent = '김철수는 극중 두 인격의 사나이 이광수 역을 맡았다. 철수는 한국 유일의 태권도 전승자를 가리는 결전의 날을 앞두고 10년간 함께 훈련한 사형인 유연재(김광수 분)를 찾으러 속세로 내려온 인물이다.'

new_sent = sent.replace(" ", '') # 띄어쓰기가 없는 문장 임의로 만들기
from pykospacing import Spacing
spacing = Spacing()
kospacing_sent = spacing(new_sent)

 

 

 

3) 맞춤법 검사

py-hanspell 라이브러리

  • 네이버 맞춤법 검사기를 이용한 파이썬용 한글 맞춤법 검사 라이브러리

 

[ Installation ]

  • github 에서 직접 다운 받아야 하고, 코드 수정이 필요함
 

py-hanspell 맞춤법 검사기 설치하기

설치하기 pip 으로 인한 설치는 버전 문제 때문인지 안된다. github 저장소를 직접 내려받은 후, 일부 코드를 수정해야 한다. git clone https://github.com/ssut/py-hanspell.git 1) URL 변경 네이버 맞춤법 검사기

pinopino.tistory.com

 

[ Usage ]

from hanspell import spell_checker

sent = "맞춤법 틀리면 외 않되? 쓰고싶은대로쓰면돼지 "
spelled_sent = spell_checker.check(sent)

hanspell_sent = spelled_sent.checked
print(hanspell_sent)
맞춤법 틀리면 왜 안돼? 쓰고 싶은 대로 쓰면 되지

 

 

 

4) Tokenizing ( Pos Tagging )

  • 형태소 분석하기
  • soynlp / konlpy / kiwi / khaiii 등 다양한 라이브러리 존재
  • 각 형태소 분석기 마다 장단점이 있기 때문에 데이터셋에 맞게 사용하는 것이 좋다.

 

4-1. KoNLPy

  • 한국어 정보처리를 위한 파이썬 패키지로 형태소 분석 외에도 다양한 기능을 지원하고 있다.
  • 형태소 분석에는 Kkma / Komoran / Hannanum / Okt / Mecab  5개 모델이 있다.

 

4-2. Kiwi

  • 빠른 속도와 범용적인 성능을 지향하는 한국어 형태소 분석기 라이브러리

 

[ Installation ]

pip install kiwipiepy

 

[ Usage ]

from kiwipiepy import Kiwi

kiwi = Kiwi()

text = "맞춤법 틀리면 왜 안돼? 쓰고 싶은 대로 쓰면 되지"
result = kiwi.analyze(text)
print(result)
[([ Token(form='맞춤법', tag='NNG', start=0, len=3), 
	Token(form='틀리', tag='VV', start=4, len=2), 
    Token(form='면', tag='EC', start=6, len=1), 
    Token(form='왜', tag='MAG', start=8, len=1), 
    Token(form='안', tag='MAG', start=10, len=1), 
    Token(form='되', tag='VV', start=11, len=1), 
    Token(form='어', tag='EF', start=11, len=1), 
    Token(form='?', tag='SF', start=12, len=1), 
    Token(form='쓰', tag='VV', start=14, len=1), 
    Token(form='고', tag='EC', start=15, len=1), 
    Token(form='싶', tag='VX', start=17, len=1), 
    Token(form='은', tag='ETM', start=18, len=1), 
    Token(form='대로', tag='NNB', start=20, len=2), 
    Token(form='쓰', tag='VV', start=23, len=1), 
    Token(form='면', tag='EC', start=24, len=1), 
    Token(form='되', tag='VV', start=26, len=1), 
    Token(form='지', tag='EF', start=27, len=1)], -72.46429443359375)]

 

4-3. Khaiii

[ Installation ]

  • cmake 이용해서 다운 받아야 함
 

Khaiii 형태소 분석기 설치하기

빌드 환경 MS Window 는 지원하지 않는다. C++14로 개발했기 때문에 이를 지원하는 컴파일러가 필요하다. 1. 빌드 툴 다운로드 pip install cmake 2. khaiii 빌드 및 설치 git clone https://github.com/kakao/khaiii.git # k

pinopino.tistory.com

 

 

[ Usage ]

from khaiii import KhaiiiApi
api = KhaiiiApi()

for word in api.analyze("안녕, 세상."):
    print(word)
안녕,	안녕/IC + ,/SP
세상.	세상/NNG + ./SF

 

 

5) Stemming

  • 동사를 원형으로 바꾸기
  • 고유 명사와 일반 명사는 그대로 단어를 추가하고, 동사와 형용사의 경우 '다'를 붙여준다.
  • 아래 코드는 Khaiii 형태소 분석기를 이용한 코드
def stemming(sentence):
    morphtags = morphs = [(morph.lex, morph.tag) for word in KhaiiiApi().analyze(sentence) for morph in word.morphs]
	
    words = []
    
    for lex, tag in enumerate(morphtags) :
      if tag=='NNP' or tag=='NNG' :
        words.append(lex)
      elif tag=='VA' or tag=='VV' :
        words.append(lex+'다')
    return words

 

 

 

6) Stop word

  • 의미 없는 조사, 단어 등 제거하기
  • 의미 있는 리스트는 아직 발견하지 못했다.

 

 

 

 

References

반응형

'AI > tutorials' 카테고리의 다른 글

LINER PDF Chat Tutorial (2)  (0) 2024.03.06
LINER PDF Chat Tutorial  (0) 2024.03.06
키워드 추출하기 (1)  (0) 2023.04.22
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.