PinkWink / DataScience

책) 파이썬으로 데이터 주무르기 - 소스코드 및 데이터 공개
http://pinkwink.kr/1070
246 stars 502 forks source link

8장 314p, Navie Bayes Classifier 관련 오류 문의 #42

Open briankim1027 opened 6 years ago

briankim1027 commented 6 years ago

안녕하세요 김혁입니다. NLP 요즘 학습을 하고 있는데요. 314p 분석에 이견이 있어서 제가 한 분석을 기술해 봅니다.

책/코드 [in]test_sentence = [("난 수업이 마치면 메리랑 놀거야")] test_docs = Okt.pos(test_sentence[0]) test_docs [out] [('난', 'Noun'), ('수업', 'Noun'), ('이', 'Josa'), ('마치', 'Noun'), ('면', 'Josa'), ('메리', 'Noun'), ('랑', 'Josa'), ('놀거야', 'Verb')] [in] test_sent_features = {word: (word in tokens) for word in test_docs} test_sent_features [out] {('난', 'Noun'): False, ('놀거야', 'Verb'): False, ('랑', 'Josa'): False, ('마치', 'Noun'): False, ('메리', 'Noun'): False, ('면', 'Josa'): False, ('수업', 'Noun'): False, ('이', 'Josa'): False} 토큰에 단어가 있음에도 전부 False로 나온게, 애초 형태소 분석을 정의한 토크나이즈 함수로 해서 형태가 '난/noun' 이렇게 되어 있는 동일한 모양으로 형태소 분석을 해야 하는게 아는지요, Twitter(이름이 바뀐 Okt)로 형태소 분석을 하는게 아니구요,

제가 작성한 코드는 [in] test_data = [] for sentence in test_sentence: test_data.extend(tokenize(sentence)) print (test_data) [out] ['난/Noun', '수업/Noun', '이/Josa', '마치/Noun', '면/Josa', '메리/Noun', '랑/Josa', '놀다/Verb']

[in]print(tokens) test_sent_features = {word: (word in tokens) for word in test_data} test_sent_features [out] ['메리/Noun', '가/Josa', '좋다/Adjective', '고양이/Noun', '도/Josa', '좋다/Adjective', '난/Noun', '수업/Noun', '이/Josa', '지루하다/Adjective', '메리/Noun', '는/Josa', '이쁘다/Adjective', '고양이/Noun', '야/Josa', '난/Noun', '마치/Noun', '고/Josa', '메리/Noun', '랑/Josa', '놀다/Verb'] {'난/Noun': True, '놀다/Verb': True, '랑/Josa': True, '마치/Noun': True, '메리/Noun': True, '면/Josa': False, '수업/Noun': True, '이/Josa': True}

이렇게 코드를 바꾸면, test-sentence에 있는 단어들의 T/F 값이 기존 전부 False에서 바뀌게 되고 분류기를 돌리면 부정으로 결과값이 바뀌어서 나오게 됩니다. [in] classifier.classify(test_sent_features) [out] 'neg'

요게 맞는거 아닌가 해서 의견 한 번 구해봅니다. 감사합니다.

PinkWink commented 6 years ago

네... 코드 오류가 분명합니다. 좋은 발견에 감사합니다.ㅠㅠ. 지금 개정 작업중인데.. 꼭 반영하도록 하겠습니다. 그나저나.. 정말 빠르게 공부하시는데요^^ 대단하십니다.