728x90
TF(d, t): 특정 문서 d 내에서 특정 단어 t가 등장하는 횟수
DF(t): 특정 단어 t가 등장한 문서의 수
IDF(d, t): DF(t)에 반비례하는 값
---> TF-IDF = TF*IDF
doc_1 = "I like cats"
doc_2 = "I like dogs"
doc_3 = "Cats are cute"
doc_4 = "Dogs are loyal"
total_docs = 4
# 문서들을 리스트로 저장
documents = [doc_1, doc_2, doc_3, doc_4]
# 각 단어가 등장한 문서 수 저장할 딕셔너리
word_doc_count = {}
for doc in documents:
words = doc.split()
unique_words = set(words)
for word in unique_words:
if word in word_doc_count:
word_doc_count[word] += 1
else:
word_doc_count[word] = 1
print("전체 문서 수: ", total_docs, '\n')
for word, count in word_doc_count.items():
print(f'단어 "{word}"가 등장한 문서 수: ', count )
출력 결과>>
전체 문서 수: 4
단어 "cats"가 등장한 문서 수: 1
단어 "I"가 등장한 문서 수: 2
단어 "like"가 등장한 문서 수: 2
단어 "dogs"가 등장한 문서 수: 1
단어 "cute"가 등장한 문서 수: 1
단어 "are"가 등장한 문서 수: 2
단어 "Cats"가 등장한 문서 수: 1
단어 "Dogs"가 등장한 문서 수: 1
단어 "loyal"가 등장한 문서 수: 1
- "I":
- IDF("I") = log((전체 문서 수) / (단어 "I"가 등장한 문서 수)) = log(4 / 2) = 0.301
- TF-IDF("I") = TF("I") * IDF("I") = (1 / 3) * 0.301 = 0.100 - "like":
- IDF("like") = log((전체 문서 수) / (단어 "like"가 등장한 문서 수)) = log(4 / 2) = 0.301
- TF-IDF("like") = TF("like") * IDF("like") = (1 / 3) * 0.301 = 0.100 - "cats":
- IDF("cats") = log((전체 문서 수) / (단어 "cats"가 등장한 문서 수)) = log(4 / 2) = 0.301
- TF-IDF("cats") = TF("cats") * IDF("cats") = (1 / 3) * 0.301 = 0.100 - "dogs":
- IDF("dogs") = log((전체 문서 수) / (단어 "dogs"가 등장한 문서 수)) = log(4 / 2) = 0.301
- TF-IDF("dogs") = TF("dogs") * IDF("dogs") = (1 / 3) * 0.301 = 0.100 - "are":
- IDF("are") = log((전체 문서 수) / (단어 "are"가 등장한 문서 수)) = log(4 / 2) = 0.301
- TF-IDF("are") = TF("are") * IDF("are") = (1 / 3) * 0.301 = 0.100 - "cute":
- IDF("cute") = log((전체 문서 수) / (단어 "cute"가 등장한 문서 수)) = log(4 / 1) = 1.386
- TF-IDF("cute") = TF("cute") * IDF("cute") = (1 / 3) * 1.386 = 0.462 - "loyal":
- IDF("loyal") = log((전체 문서 수) / (단어 "loyal"가 등장한 문서 수)) = log(4 / 1) = 1.386
- TF-IDF("loyal") = TF("loyal") * IDF("loyal") = (1 / 3) * 1.386 = 0.462
728x90
'자연어 처리(NLP) 공부' 카테고리의 다른 글
Sequence to Sequence(Seq2Seq)의 학습과 추론 과정의 차이 (0) | 2023.08.30 |
---|---|
KoNLPy 형태소 분석기별 품사태그(PoS) 비교 (0) | 2023.08.23 |
뉴스 기사 전처리 시 고려할 것들? (0) | 2023.08.19 |
KoNLPy 한국어 형태소 분석기 (1) | 2023.08.18 |
텍스트 데이터 전처리 - 정규화(Normalization) (0) | 2023.08.18 |