![TfidfVectorizer와 Cosine Similarity를 이용한 한국어 텍스트 유사도 계산 방법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKdIQL%2Fbtsz1JijyjZ%2FAmrKtIzGQztRHGWNf6CfIK%2Fimg.png)
TfidfVectorizer와 Cosine Similarity를 이용한 한국어 텍스트 유사도 계산 방법Python/자연어처리 & 형태소 분석기2023. 11. 10. 05:35
Table of Contents
반응형
TfidfVectorizer를 사용하여 텍스트를 벡터로 변환한 후(이때 형태소 분석기 Okt를 추가로 사용합니다) , cosine_similarity를 사용하여 벡터간 유사도를 계산합니다.
2023. 11. 08 최초작성
윈도우에 KoNLPy 설치하는 방법은 아래 포스트를 참고하세요.
윈도우에 KoNLPy 설치하는 방법
https://webnautes.tistory.com/1956
추가로 sklearn를 설치합니다.
pip install scikit-learn
from konlpy.tag import Okt from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # 형태소 분석기 인스턴스 생성 tokenizer = Okt() # 형태소 분석을 수행하는 함수 정의 def tokenize_ko(x): x = tokenizer.normalize(x) # 텍스트 Normalization x = tokenizer.morphs(x) # 형태소 분리 return x texts = [ "나는 사과를 좋아합니다", "나는 빵을 좋아합니다", "나는 바나나를 좋아합니다" ] # 새로운 문장 추가 new_texts = ["나는 사과들을 좋아합니다.", "나는 사과를 싫어합니다", "너는 사과를 좋아합니다"] # TfidfVectorizer 객체 생성 ( 토크나이저로 형태소 분석기 사용) vectorizer = TfidfVectorizer(tokenizer=tokenize_ko) # 텍스트 데이터를 벡터 형태로 변환 tfidf_matrix = vectorizer.fit_transform(texts) for new_text in new_texts: # 새로운 문장을 벡터 형태로 변환 new_tfidf_vector = vectorizer.transform([new_text]) # 새로운 문장과 기존 문장들 사이의 코사인 유사도 계산 cosine_similarities = cosine_similarity(new_tfidf_vector, tfidf_matrix) # 새로운 문장과 기존 문장을 비교하여 유사도를 출력합니다. print(f"새로운 문장: {new_text}") print('-'*75) print(f"기존 문장:") for idx in range(3): most_similar_idx = cosine_similarities.argsort()[0][(idx+1)*-1] most_similar_sentence = texts[most_similar_idx] similarity_score = cosine_similarities[0][most_similar_idx] print(f"{most_similar_sentence} (유사도: {similarity_score:.4f})") print('\n\n') |
실행 결과입니다. 새로운 문장과 기존 문장 사이의 코사인 유사도를 보여줍니다. 기존 문장에서 유사도가 높을 수록 새로운 문장과 유사한 문장입니다.
반응형
'Python > 자연어처리 & 형태소 분석기' 카테고리의 다른 글
한국어 형태소 분석기 Kiwipiepy 사용방법 (0) | 2024.08.11 |
---|---|
윈도우에 KoNLPy 설치하는 방법 (0) | 2023.10.31 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!