머신 러닝 - 자연어 처리(2)
◾자연어 처리 - 육아 휴직 관련 법안 분석
육아휴직관련 법안 대한민국 국회 제 1809890호 의안
import nltk
from konlpy.corpus import kobill
files_ko = kobill.fileids()
doc_ko = kobill.open("1809890.txt").read()
doc_kofrom konlpy.tag import Okt
t = Okt()
tokens_ko = t.nouns(doc_ko)
tokens_ko[:10]- nltk 토큰(빈도수 포함) 분석
ko = nltk.Text(tokens_ko, name="대한민국 국회 의안 제 1809890호")
koprint(len(ko.tokens))
print(len(set(ko.tokens)))- 토큰 빈도별 그래프
import matplotlib.pyplot as plt
import set_matplotlib_korean
plt.figure(figsize=(12, 6))
ko.plot(50)
plt.show()# stop_words 처리
stop_words = [
    '.',
    '(',
    ')',
    ',',
    "'",
    '%',
    '-',
    'X',
    ')',
    'x',
    '의',
    '자',
    '에',
    '안',
    '번',
    '호',
    '을',
    '이',
    '다',
    '만',
    '로',
    '가',
    '를',
]
ko = [each_word for each_word in ko if each_word not in stop_words]
ko[:10]ko = nltk.Text(ko, name='대한민국 국법 의안 제 1809890호')
plt.figure(figsize=(12, 6))
ko.plot(50)
plt.show()- 특정 단어의 빈도 확인
ko.count("초등학교")- 특정 단어가 등장하는 위치 확인
plt.figure(figsize=(12, 6))
ko.dispersion_plot(["육아휴직", "초등학교", "공무원"])
plt.show()- 연어(collocation): 함께 위치하는 단어들이란 뜻으로, 어휘의 조합 또는 짝을 이루는 말을 일컫는다.
ko.concordance("초등학교")- 빈도 분포 확인
ko.vocab()from wordcloud import WordCloud
data = ko.vocab().most_common(150)
wordcloud = WordCloud(
	# 한글을 wordCloud하기 위해서 폰트 변경
    font_path="C:/Windows/Fonts/malgun.ttf",
    relative_scaling=0.2,
    background_color="white"
).generate_from_frequencies(dict(data))
plt.figure(figsize=(12, 8))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()◾나이브 베이즈 정리(Naive Bayes Classifier)
- 나이브 베이즈 분류- 기계 학습 분야에서 특성들 사이의 독립을 가정하는 베이즈 정리를 활용한 확률 분류기의 일종이다.
- 적절한 전처리를 거치면 더 진보된 방법들과도 충분히 경쟁력을 가진다.
 
1. 감성 분석 : 영어
from nltk.tokenize import word_tokenize
import nltk- 학습용 데이터 준비
train = [
    ('i like you', "pos"),
    ('i hate you', "neg"),
    ('you like me', "neg"),
    ('i like her', "pos"),
]- 전체 말뭉치 만들기
all_words = set(
    word.lower() for sentence in train for word in word_tokenize(sentence[0])
)
all_words- 말 뭉치 대비 단어가 있고 없음을 표기
t = [({word : (word in word_tokenize(x[0])) for word in all_words}, x[1]) for x in train]
t- Naive Bayes 분류기 훈련- 각 단어별로 독립적인 확률 계산하기 때문에 Naive하다고 한다.
 
classifier = nltk.NaiveBayesClassifier.train(t)
classifier.show_most_informative_features()- 학습 결과 이용 테스트
test_sentence = "i like Merui"
test_sent_features = {
    word.lower() : (word in word_tokenize(test_sentence.lower())) for word in all_words
}
test_sent_features- 결과
classifier.classify(test_sent_features)2. 감성 분석 : 한글
from konlpy.tag import Okt
pos_tagger = Okt()- 학습용 데이터
train = [
    ('메리가 좋아', 'pos'),
    ('고양이도 좋아', 'pos'),
    ('난 수업이 지루해', 'neg'),
    ('메리는 이븐 고양이야', 'pos'),
    ('난 마치고 메리랑 놀거야', 'pos'),
]- 형태소 분석 미진행
- 메리가, 메리는, 메리랑을 모두 다른 단어로 인식한다.
all_words = set(
    word.lower() for sentence in train for word in word_tokenize(sentence[0])
)
all_words- 계속 진행
t = [({word : (word in word_tokenize(x[0])) for word in all_words}, x[1]) for x in train]
t- 학습
classifier = nltk.NaiveBayesClassifier.train(t)
classifier.show_most_informative_features()- 테스트
test_sentence = "난 수업이 마치면 메리랑 놀거야"
test_sent_features = {
    word.lower() : (word in word_tokenize(test_sentence.lower())) for word in all_words
}
test_sent_features- 잘못된 결과 획득
classifier.classify(test_sent_features)- 형태소 분석 진행
- 형태소 분석을 한 후 품사를 단어 뒤에 붙여준다.
def tokenize(doc):
    return ["/".join(t) for t in pos_tagger.pos(doc, norm=True, stem=True)]
train_docs = [(tokenize(row[0]), row[1]) for row in train]
train_docs- 말뭉치 만들기
tokens = [t for d in train_docs for t in d[0]]
tokens- 말 뭉치 대비 단어가 있고 없음을 표기
def term_exists(doc):
    return {word : (word in set(doc)) for word in tokens}
    
train_xy = [(term_exists(d), c) for d, c in train_docs]
train_xy- 학습
classifier = nltk.NaiveBayesClassifier.train(train_xy)
classifier.show_most_informative_features()test_sentence = [("난 수업이 마치면 메리랑 놀거야")]
test_docs = pos_tagger.pos(test_sentence[0])
test_docs = (tokenize(test_sentence[0]))
test_docstest_sent_features = {word : (word in test_docs) for word in tokens}
test_sent_features- 결과가 잘못 나온 것같은데.. 어디가 문제인지 잘 모르겠다.
- 잘못된 부분을 찾으면 수정할 예정
classifier.classify(test_sent_features)Author And Source
이 문제에 관하여(머신 러닝 - 자연어 처리(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@skarb4788/머신-러닝-자연어-처리2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            




























