본문 바로가기

[NLP]

[NLP] 한국어 전처리 패키지

앞서 소개한 형태소와 문장 토크나이징 도구들인 koNLPy와

KSS와 함께 유용하게 사용할 수 있는 패키지 들입니다.

 

1. PyKoSpacing

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

 

GitHub - haven-jeon/PyKoSpacing: Automatic Korean word spacing with Python

Automatic Korean word spacing with Python . Contribute to haven-jeon/PyKoSpacing development by creating an account on GitHub.

github.com

전희원님이 개발한 띄어쓰기가 되어 있지 않은 문장을

띄어쓰기를 한 문장으로 변환해 주는 패키지 입니다.

 

2. Py-Hanspell

 

pip install git+https://github.com/ssut/py-hanspell.git

 

GitHub - ssut/py-hanspell: 파이썬 한글 맞춤법 검사 라이브러리. (네이버 맞춤법 검사기 사용)

파이썬 한글 맞춤법 검사 라이브러리. (네이버 맞춤법 검사기 사용). Contribute to ssut/py-hanspell development by creating an account on GitHub.

github.com

네이버 한글 맞춤법 검사기를 바탕으로 만들어진 패키지 입니다.

 

form hanspell import spell_checker

spell_checker.check()

 

이 패키지는 띄어쓰기 또한 보정합니다.

 

3. SOYNLP를 이용한 단어 토큰화

 

soynlp는 품사 태깅, 단어 토큰화 등을 지원하는 단어 토크나이저입니다.

비지도 학습으로 단어 토큰화를 한다는 특징을 갖고 있으며,

데이터에 자주 등장하는 단어들을 단어로 분석합니다.

 

1) 신조어 문제

기존의 형태소 분석기는 신조어나 형태소 분석기에 등록되어 있지 않은 단어를

제대로 구분 하지 못하는 경우가 있습니다

 

텍스트 데이터에서 특정 문자 시퀀스가 자주 등장하고, 앞 뒤로 조사 또는 완전히 다른

단어가 등장하는 것을 고려해서

해당 문자 시퀀스를 형태소라고 판단하는 단어 토크나이저가 soyclp입니다.

 

2) SOYNlP의 응집 확률

 

응집확률은

내부 문자열이 얼마나 응집하여 자주 등장하는지를 판단하는 척도 입니다.

 

이값이 높을수록 전체 코퍼스에서 이 문자열 시퀀스는 하나의 단어로 등장할 가능성이 높습니다.

 

3) SOYNLP의 브랜칭 엔트로피

 

branching entropy는 확률 분포의 엔트로피값을 사용합니다.

주어진 문자열에서 얼마나 다음 문자가 등장할 수 있는지를 판단하는 척도입니다.

 

4) SOYNLP의 L tokenizer

한국어는

띄어쓰기 단위로 나눈 어절 토큰은

주로 L 토큰 + R 토큰의 형식을 가질 때가 많습니다.

 

L 토크나이저는 L 토큰 + R 토큰으로 나누되, 
분리 기준을 점수가 가장 높은 L 토큰을 찾아내는 원리를 가지고 있습니다.

from soynlp.tokenizer import LTokenizer

 

5) 최대 점수 토크나이저

띄어쓰기가 되지 않는 문장에서

점수가 높은 글자 시퀀스를 순차적으로 찾아내는 토크나이저입니다.

띄어쓰기가 되어 있지 않은 문장을 넣어서 점수를 통해 토큰화 된 결과를 보여줍니다.

from soynlp.tokenizer import MaxScoreTokenizer

 

6) SOYNLP를 이용한 반복되는 문자 정제

sns나 채팅 데이터와 같은 한국어 데이터는 ㅋㅋ,ㅎㅎ 등의 

이모티콘 같이 불필요하게 연속되는 경우가 있는데 ㅋㅋ,ㅋㅋㅋㅋ,ㅋㅋㅋㅋㅋ을 모두 서로 다른 단어로 처리하는것ㄷ은

불필요한데 이와 같이 반복되는 단어를 하나로 정규화 시켜줍니다.

from soynlp.normalizer import *

 

4. Custonmized KoNLPy

 

pip install customized_konlpy 사용자 사전 추가가 매우 쉬운 패키지

 

from ckonlpy.tag import Twitter
twitter = Twitter()
twitter.morphs('은경이는 사무실로 갔습니다.')
['은', '경이', '는', '사무실', '로', '갔습니다', '.'] >> 은, 경이 글자가 분리됨

 

twitter.add_dictionary('은경이', 'Noun')  추가하여 은경이 라는 단어가 제대로 하나의 토큰으로 인식하게 만들 수 있습니다.

 

 

 

 

'[NLP]' 카테고리의 다른 글

[NLP] 원-핫 인코딩  (0) 2023.03.27
[NLP] 패딩(padding)  (0) 2023.03.27
[NLP] 정수 인코딩  (0) 2023.03.27
[NLP] 정규 표현식(Regular Expression)  (0) 2023.03.27
[NLP] 표제어 추출 and 어간 추출  (0) 2023.03.27