- 정의
- Sentences에서 각 단어들이 나온 개수를 확인하는 분석 방법
- 종류
- countVectorizer : 의미있는 단어 파악 불가
- TF-IDF : 의미있는 단어 파악 가능
- 정의
- 단순 단어들의 빈도수를 추출하여 벡터화하는 작업
- 단어의 의미 파악이 불가능하다.
- 정의
- TF : 특정 단어가 하나의 문장 안에서 등장하는 횟수
- DF : 특정 단어가 여러 문장에 등장하는 횟수
- IDF : DF에 역수를 취함
- TF-IDF
- 하나의 문장 안에서 자주 나오는 단어에 대해 가중치를 줌
- 여러 문장에서 자주 등장하는 단어의 경우에는 패널티를 부여함
- 특징
- 여러 문장에서 많이 나오는 단어인 StopWord(불용어)를 파악할 수 있다.
- 즉, 특정 단어에 대한 의미 파악(문서 설명력, 분별력)이 가능함
1. 라이브러리 Import
# 형태소 분석 from konlpy.tag import Okt # 단어 빈도 분석(TF-IDF) from sklearn.feature_extraction.text import TfidfVectorizer
2. 한글 데이터 준비
text_data = ['나는 배 고프다.', '오늘 점심 뭐 먹지?', '내일 공부 해야겠다.', '점심 먹고 공부 해야지!']
3. 형태소 분석
# 형태소 분석 객체 선언 okt = Okt() # 문장별 명사, 형용사, 동사만 저장할 리스트 my_words = [] for text in text_data: text_pos = [] for word in okt.pos(text, stem=True): if word[1] in ['Noun', 'Adjective', 'Verb']: text_pos.append(word[0]) text_pos = ' '.join(text_pos) my_words.append(text_pos) print(my_words) # ['나 배 고프다', '오늘 점심 뭐 먹다', '내일 공부 하다', '점심 먹다 공부 하다']
4. 단어 빈도 분석(TF-IDF) 수행
- min_df : 단어 최소 허용 빈도수
- max_df : 단어 최대 허용 빈도수
- stop_words : 불용어 지정
- ngram_range : 특정 단어 기준으로 주위 단어를 몇개씩 묶을지 지정# TF-IDF 벡터 모듈 선언 tf_idf = TfidfVectorizer( analyzer='word', min_df=1, max_df=5, stop_words=['오늘', '내일'], ngram_range=(1, 1) ) # TF-IDF 벡터 모듈 학습 tf_idf_vec = tf_idf.fit_transform(raw_documents=my_words) print(tf_idf_vec.toarray()) print(tf_idf.get_feature_names_out()) # [[1. 0. 0. 0. 0. 0. 0.] # [0. 0. 0. 0.52640543 0.66767854 0.52640543 0.] # [0. 0.52640543 0.66767854 0. 0. 0. 0.52640543] # [0. 0.5 0. 0.5 0. 0.5 0.5]] # ['고프다' '공부' '내일' '먹다' '오늘' '점심' '하다']