본문 바로가기
Python

[python] 한국어 KR 자연어 처리 텍스트 마이닝 내용 정리

by 퍼포먼스마케팅코더 2022. 10. 18.
반응형

python 한국어 KR 자연어 처리 텍스트 마이닝 내용 정리 

python 한국어 KR 자연어 처리 텍스트 마이닝 내용 정리

오늘 같은 경우에는 한국어 한국어에 관련됐었던 자연어 처리 이것에 관련해서 테스트 마이닝에 대해서 정리하는 시간을 가져보고자 하고 있어요.대표적으로 파이썬 코딩 기반으로 만들어서 진행을 했었었고요 살펴보면서 제가 느꼈었던 거는 아직까지도 제가 원하는 수준의 ai 라든가 파이썬 코딩이 것들이 아직까지는 없구나라는 것을 안타깝게 느끼게 된 계기가 되지 않았나 싶네요. 보자면 창피 하나하나씩 다 살펴보겠냐 할 건데 기술은 많이 발달했습니다. 기술은 많이 발달했고 여러 가지 기술 이런 것들을 활용을 해야 되잖아요.활용하겠다는 이런 것들은 알겠는데 본격적으로 어떻게 써먹어서 갈 것이냐라는 이 부분이 남아 있습니다.그래서 오늘은 대해서 알아볼 거고요 그래서 해서 오늘 하나하나씩 알아보도록 한 번 해볼게요 제가 쓸 만한 것들만 골라 놨거든요. 시작해 보도록 하겠습니다.

한국어 KR 자연어 처리 텍스트 마이닝 word tokenize 해보기

첫 번째입니다. 첫 번째 지금 이거 같은 경우에는 단어를 토크나 만들어준다 대해서 나오긴 하는데 한국어로서는 특별히 쓴다거나 것들은 없을 것 같아요. 영문 같은 경우 이 단어에 관련해서 데이터를 처리를 할 때 흔히 말하면 전 처리라든가 양식이죠. 흔히 말하면 떤 텍스트 안에서 형용사, 명사 아니면 불필요한 이런 단어들을 처리를 하고 뭔가 정제를 시켜놓는 클렌징 한다고 얘기하죠. 그것들을 할 때 쓰는 용도인 것 같아요. 그렇지만 어떠한 문장을 통해서 뭔가 만들어내는 이런 부분으로 가 고 있기 때문에 특별하게 사용할 필요성이 많이 떨어지는 것 같습니다. 그렇지만 사용하고 싶으신 이런 분들을 위해서 만들어 놓은 거고요.

 

from nltk.tokenize import word_tokenize
from nltk.tokenize import WordPunctTokenizer
from tensorflow.keras.preprocessing.text import text_to_word_sequence

#word_tokenize 해보기

print('단어 토큰화1 :', word_tokenize("Don't be fooled by the dark sounding name, Mr. Jone's Orphanage is as cheery as cheery goes for a pastry shop."))


#아래 에러

#Resource punkt not found. Please use the NLTK Downloader to obtain the resource:
    
#>>> import nltk
#>>> nltk.download('punkt')  이전 탭에서 다운로드 설치 진행 완료 및 문제 해결 끝

 

한국어 KR 자연어 처리 텍스트 마이닝 문장 토큰 리스트화 해보기

두 번째입니다. 두 번째는 필요한 건데 흔히 말하 면 한국어 문장 리스트 화한다고 하죠.흔히 말하면 어떠한 띄어쓰기라든가 어떠한 문장 부호에 따라서 따라서 리스트 형식으로 만들어줘야 됩니다.엄청난 문맥 같은 지 이런 것들이 아니고 하나하나의 문장 바탕으로 해서 어떻게 문장 형식 하나하나를 알아서 맞춰줄 수 있도록 만들어 놓은 거예요.뭔가 리스트 형식으로 뭔가 만들어 줄 수 있느냐 뭔가 확인을 했었을 때 그것의 용도로 쓰이는 게 두 번째입니다.두 번째 같은 경우에는 달라 요 기존의 문장을 이거 코딩으로 돌려버리는 게 아니고요 띄어쓰기나 기타 등등 이런 것들이 있고 그거를 다 제거를 해놓고 진행을 하는 것들이 되겠죠. 진행을 하더라고요 그래서 테스트가 필요할 것 같기는 한데 여하튼 말로서는 사용을 한다고 하니 재미 삼아서 보면 될 것 같습니다.

import kss  #한국어 문장 토큰화 (리스트화)

text = '띄어쓰기가 될 때, 문장부호의 역할이 중요한 듯 하니 띄어쓰기 먼저 하고 문장부호 제거를 해야겠다. 문장부호 제거를 어느 순서로 하느냐도 좀 고려해 봐야할 필요가 있을 것 같다.'
print('한국어 문장 토큰화 :',kss.split_sentences(text))

 

한국어 KR 자연어 처리 텍스트 마이닝 길이가 1~2인 단어들을 정규 표현식을 이용하여 삭제

세 번째는 단어가 하나 두 개인 것에 한국어 이런 것이 있다면 거를 정규식의 표현 이런 것을 사용을 해서 삭제를 한다거나 이런 것을 쓸 수 있다고 해서 나왔었었는데 잘 이걸 쓸지 잘 모르겠습니다.문장 하나로 단어 하나로 됐었을 때도 많이 쓰이는 경우가 있었었기 때문에 하나로 되어 있는 단어가 있을 수도 있죠.그럴 때는 흔히 말하면 필터링 작업이라고 해야 될까
것들은 자동으로는 다 할 수는 있는데 그렇게까지 한두 번 정도는 쓰겠다 싶어서 일단 집어넣었습니다. 근데 거의 웬만해서는 저 같은 경우에는 단어 하나 단어 하나에서 규칙적이고 반복적으로 제가 말하는 지금 같은 경우에도 제가 직접 말을 하는 것들이잖아요.해서 음성 더빙으로 돼 있던 거를 텍스트로 뽑아올 때 직접 다 이 필터링 작업을 다 합니다.지금과 같이 전 기 표현식이라든가 기타 등등 이런 것을 사용할 때도 간혹 씩 쓰기는 해요. 해서 이 코딩을 집어넣고요.

import re
text = "띄어쓰기가 될 때, 문장부호의 역할이 중요한 듯 하니 띄어쓰기 먼저 하고 문장부호 제거를 해야겠다. 문장부호 제거를 어느 순서로 하느냐도 좀 고려해 봐야할 필요가 있을 것 같다."

# 길이가 1~2인 단어들을 정규 표현식을 이용하여 삭제
shortword = re.compile(r'\W*\b\w{1,2}\b')
print(shortword.sub('', text))

 

 

한국어 KR 자연어 처리 텍스트 마이닝 불용어 제거하기

네 번째는 이것도 세 번째랑 비슷한 내용입니다. 부용어라고 얘기를 해서 흔히 말해서 쓰지 않는 이런 단어들을 집어넣는 거라고 보시면 될 것 같아요.그래서 단어를 어떠한 테스트 안에 다가 집어넣고 그걸 돌려버리면 그게 리스트 안에서 돌려놔서 결과 값을 보여주겠죠. 불용어 제거라는 게 실제로 제가 음성으로 말하지 않습니까 이 음성으로 말하는 이런 것들도 다 알아서 제거를 해서 나오는 용도로 보시면 될 것 같습니다.

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize 
from konlpy.tag import Okt

#한국어 불용어 제거하기

okt = Okt()

example = "고기를 아무렇게나 구우려고 하면 안 돼. 고기라고 다 같은 게 아니거든. 예컨대 삼겹살을 구울 때는 중요한 게 있지."
stop_words = "를 아무렇게나 구 우려 고 안 돼 같은 게 구울 때 는"

stop_words = set(stop_words.split(' '))
word_tokens = okt.morphs(example)

result = [word for word in word_tokens if not word in stop_words]

print('불용어 제거 전 :',word_tokens) 
print('불용어 제거 후 :',result)

 

 

한국어 KR 자연어 처리 텍스트 마이닝 문장 띄어쓰기

다섯 번째인데요. 이 다섯 번째가 특이한 부분이 하는데 이 문장 띄어쓰기입니다. 문장을 띄어 쓴 다 있는데 처음에 썼을 때가 처음에 띄어쓰기를 다 없애요 없애고 그다음에 이곳의 패키지 부분을 실행을 시킵니다.실행을 시키면 결과 값이 띄어쓰기가 제대로 교정이 돼서 나온다. 이건데 이것도 테스트해봐야 될 것 같기는 해요. 제가 몇몇 개를 돌려보기는 했는데 잘 되는 것도 있고 안 되는 것도 있고 경우에 따라서 다릅니다. 계속 추가적으로 업그레이드를 해놓고 제대로 된 게 있으면 좋겠냐 하겠지만 만약에 그게 없으면 어쩔 수 없겠죠. 용도로 보시면 될 것 같고 문장 맞춤법 이겁니다.

from pykospacing import Spacing

#문장 띄어쓰기

sent = '띄어쓰기가 될 때, 문장부호의 역할이 중요한 듯 하니 띄어쓰기 먼저 하고 문장부호 제거를 해야겠다. 문장부호 제거를 어느 순서로 하느냐도 좀 고려해 봐야할 필요가 있을 것 같다.'

new_sent = sent.replace(" ", '') # 띄어쓰기가 없는 문장 임의로 만들기
#print(new_sent)

spacing = Spacing()
kospacing_sent = spacing(new_sent) 

print(sent)
print(kospacing_sent)

 

 

한국어 KR 자연어 처리 텍스트 마이닝 문장 맞춤법

여섯 번째 이거 문장 맞춤법 문장 맞춤법은 아주 간단하죠. 최대 제한 텍스트 수가 500자까지예요. 500자만 집어넣고 돌리면 따라서 제대로 된 맞춤법 이런 것들을 해줘서 결과 물을 보여주는 이 형식이라고 보시면 될 것 같습니다.특별히 어렵다거나 이런 것은 없을 거예요.이것도 패키지 다운로드해 놓고 돌려버리면 되기 때문에 크게 어렵다거나 이런 것은 없습니다.
근데 유용하게 쓰이기는 합니다. 저 같은 경우에도 문장 맞춤법 이런 것들이 뭔가 잘못되어 있다든가 뭔가 이런 것이 있을 때 이런 것을 많이 쓰기 때문에 많이 유용하게 쓸 수 있다 라고 보시면 될 것 같아요.

from hanspell import spell_checker

#문장 맞춤법

sent = "띄어쓰기가 될 때, 문장부호의 역할이 중요한 듯 하니 띄어쓰기 먼저 하고 문장부호 제거를 해야겠다. 문장부호 제거를 어느 순서로 하느냐도 좀 고려해 봐야할 필요가 있을 것 같다."
spelled_sent = spell_checker.check(sent)

hanspell_sent = spelled_sent.checked
print(hanspell_sent)


#위에꺼랑 비교

spelled_sent = spell_checker.check(new_sent)

hanspell_sent = spelled_sent.checked
print(hanspell_sent)
print(kospacing_sent)

 

한국어 KR 자연어 처리 텍스트 마이닝 신조어 문제 확인

마지막입니다. 마지막 신조어 문제 확인 이거에 대해서 나오긴 했는데 선생님 뭐 마지막 거는 근데 많이 쓴다거나 이런 것은 없을 것 같 내요.솔직히 신조어 단어를 뭔가 계속 업데이트를 해두는 뭔가 이런 데이터가 있다면 요 그걸 학습시켜서 한다면 알아서 그거를 처리를 해주겠지만 이런 오픈 소스를 지금까지 찾아본 거는 거의 없었네요.지금 전방위적으로 다 살펴봤었었는데요.

from konlpy.tag import Okt

#신조어 문제

tokenizer = Okt()
print(tokenizer.morphs('에이비식스 이대휘 1월 최애돌 기부 요정'))

 

중요한 포인트만 말씀드리자면 흔히 말하면 한 세 가지 부분으로 볼 수 있겠죠.예를 들자면 어떠한 특정 단어라든가 문장 내에서 반복적인 말들을 뭔가 필터링을 한다든가 이런 것이 첫 번째에 쓰이는 경우가 있겠고 두 번째가 문장 이런 것을 어떤 리스트화시키는 리스트 화 시켜놨어 리스트화를 뭔가 시켜놓을 수 있는 이런 것이 뭔가 필요한 반면에 문장 띄어쓰기라든가 맞춤법 거를 쓰는 데 유용하다 라는 정도만 하면 될 것 같습니다. 

 

외적으로 더 깊숙하게 살펴보자면 제가 바라는 거는 이런 것 들 이에요. 형용사 명사 이런 것을 받아들인 것까지는 알겠다. 더 추가적으로 뭔가 하고 싶은 거는 어투와 어 조 그다음에 문체 문장 이런 것들 예를 들면 여성적인 문장이라든가 남성적인 문장 이런 것들도 많이 쓰일 수 있겠죠. 이런 것들을 뭔가 볼 수 있는 그거를 뭔가 마케팅적으로 뭔가 사용할 수 있는 것들이 출 시가 돼서 봤으면 좋겠습니다. 오늘 여기까지입니다. 맨 밑에는 제가 음성 더빙을 한 메모장을 직접 자연어 처리로 가공해서 만든 파이썬 코딩입니다. 천천히 살펴보시고, 유용한 내용이 되셨으면 좋겠습니다. 

from pykospacing import Spacing
import kss
from hanspell import spell_checker


f = open ('C:/Users/user/Desktop/recording.txt', 'r', encoding='utf-8')

text = f.read()

#단어 필터링

text = text.replace("약간 ", "")
text = text.replace("좀 ", "")
text = text.replace("좀", "")
text = text.replace("이제 ", "")
text = text.replace("매우 ", "")
text = text.replace("보통 ", "")
text = text.replace("물론 ", "")
text = text.replace("또 ", "")
text = text.replace("굉장히 ", "")
text = text.replace("아마 ", "")
text = text.replace("그냥 ", "")
text = text.replace("조금 ", "")
text = text.replace("그 ", "")
text = text.replace("정말 ", "")
text = text.replace("그래서 ", "")
text = text.replace("그러니까 ", "")
text = text.replace("이게 뭐냐면은 ", "")
text = text.replace("진짜 ", "")
text = text.replace("이제 ", "")
text = text.replace("무슨 말이냐면 ", "")
text = text.replace("그냥 ", "")
text = text.replace("이게 ", "")
text = text.replace("이제", "")
text = text.replace("뭐 ", "")
text = text.replace("그런 ", "")
text = text.replace("이러한 ", "")
text = text.replace("그것을 ", "")
text = text.replace("저는 ", "")
text = text.replace("이거를 ", "")
text = text.replace("굳이 ", "")
text = text.replace("그런 ", "")
text = text.replace("그렇게 ", "")
text = text.replace("바로 ", "")

text = text.replace("이거는 ", "")


text = text.replace("그것을 ", "")
text = text.replace("그것도 ", "")
text = text.replace("그것에 ", "")
text = text.replace("그것만 ", "")
text = text.replace("이렇게 ", "")

text = text.replace("그중에서 ", "")
text = text.replace("그 중에서", "")
text = text.replace("왜냐하면 ", "")
text = text.replace("아마", "")
text = text.replace("음\t", "")
text = text.replace("\n어", "")
text = text.replace("\n음", "")
text = text.replace("\n아", "")
text = text.replace("\n\n\n", "\n")
text = text.replace("\n\n", "\n")
text = text.replace("먼저 ", "\n")
text = text.replace("여러분들 ", "\n")
text = text.replace("아까 ", "\n")
text = text.replace("블로포스팅", "블로그 포스팅")
text = text.replace("여러분들이 ", "")
text = text.replace("마찬가지로 ", "")
text = text.replace("예\n", "")
text = text.replace("예\n", "")
text = text.replace("응\n", "")
text = text.replace("음\n", "")



# 띄어쓰기 정리

new_sent = text.replace(" ", '')
new_sent = text.replace("\n", '')

spacing = Spacing()
kospacing_sent = spacing(new_sent) 
#print(kospacing_sent)

#문장 리스트화

text_list = kss.split_sentences(kospacing_sent)

#for i in text_list :
    #print(i)
    
# 맞춤법 정리
for i in text_list :
    spelled_sent = spell_checker.check(i)
    hanspell_sent = spelled_sent.checked
    print(hanspell_sent)
반응형

댓글