1. nltk.NaiveBayesClassifier + show_most_informative_features()
# nltk 패키지 다운 (오래 걸리니까 punkt만 다운) |
|
# train 데이터셋 |
|
# word_tokenize() : 단어 분류 예시 word_tokenize("강사님 이집트 언제 가실래요?") [word for sentence in train for word in word_tokenize(sentence[0])] |
|
# 중복제거 allword = set(word for sentence in train for word in word_tokenize(sentence[0])) |
|
# allword가 사전의 역할 t = [({word : (word in word_tokenize(x[0])) for word in allword},x[1]) for x in train] |
|
# '너무'가 없을때 긍정과 부정의 비율 model = nltk.NaiveBayesClassifier.train(t) model.show_most_informative_features() |
2. 일반 텍스트 형식을 사용할때
# 데이터 불러들여와서 [(,),(,),...]모습 만들기 data = pd.read_csv("C:/data/bulletin_board.txt",header=None, encoding="CP949") data.columns = ['feature','label'] data['label'] = data['label'].str.strip() # 데이터프레임을 리스트처럼 반복해서 한줄씩 읽을 수 있게 하는 메소드 train = [(feature,label) for index,(feature,label) in data.iterrows()] |
|
# train의 단어로 사전 만들기 allword = set(word for sentence in train for word in word_tokenize(sentence[0])) |
|
# 사전에 문장에 있는 단어가 있으면 True, 없으면 False t = [({word : (word in word_tokenize(x[0])) for word in allword},x[1]) for x in train] |
|
# 모델의 단어별 긍정 부정 확률 확인 |
|
# 테스트 test = "난 수업을 마치면 홍길동이랑 놀거야" test_t = {word : (word in word_tokenize(test)) for word in allword} model.classify(test_t) |
|
<Okt 종류> test = "난 수업을 마치면 홍길동이랑 놀아도 되나욬" from konlpy.tag import Okt pos_tagger = Okt() # stem : 원형글자로 만드는것("되나욬ㅋㅋ" -> "되나요") pos_tagger.pos(test, norm=True, stem=True) # nouns() : 명사 추출 pos_tagger.nouns(test)
pos_tagger.morphs(test) |
|
# 글자와 형태소 같이 붙이기(구분자 : /) def tokenize(doc): return ['/'.join(i) for i in pos_tagger.pos(doc, norm=True, stem=True)]
train_doc = [(tokenize(i[0]),i[1])for i in train] train_doc |
|
# 긍정,부정을 뺀 부분만 뽑아내기 tokens = [t for i in train_doc for t in i[0]] |
|
# 있으면 True 없으면 False def term_exists(doc): return {word:(word in set(doc)) for word in tokens} train_x = [(term_exists(x),y) for x,y in train_doc] train_x |
|
# '너무'가 없을때 긍정과 부정의 비율 |
|
# 테스트 데이터 만들기
|
'인공지능 > 머신러닝' 카테고리의 다른 글
의사결정트리 (0) | 2020.05.18 |
---|---|
머신러닝 연습 ① - 영화평 긍정/부정 리뷰 예측 (0) | 2020.05.14 |
베르누이 나이브베이즈 (0) | 2020.05.14 |
붓꽃 데이터 (iris.csv) 분석하기 / 가우시안 나이브베이즈 (0) | 2020.05.13 |
나이브베이즈(Naive Bayes) 분류 (0) | 2020.05.12 |