Posts 문장 사이의 거리
Post
Cancel

문장 사이의 거리

1. 문장 사이의 거리


1.1 문장 사이의 거리

  • 평면이든 공간이든 두점 사이의 거리는 구할 수 있음
  • 비교해야할 문장을 벡터로 표현할 수 있다면 거리를 구할수 있을것 같다.


1.2 Count Vectorizer

1
2
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(min_df = 1)
  • sklearn이 제공하는 문장을 벡터로 변환하는 함수 CountVectorizer
  • 단어들의 카운트(출현 빈도(frequency))로 여러 문서들을 벡터화
  • 카운트 행렬, 단어 문서 행렬 (Term-Document Matrix, TDM)) 모두 소문자로 변환시키기 때문에 me 와 Me 는 모두 같은 특성이 됨


1.3 훈련용 문장

1
2
3
4
contents = ['상처받은 아이들은 너무 일찍 커버려',
           '내가 상처받은 거 아는 사람 불편해',
           '잘 사는 사람들은 좋은 사람 되기 쉬워',
           '아무 일도 아니야 괜찮아']
  • 훈련용 문장
  • 거리를 구하는 것이므로 지도하지 않아도됨


1.4 Okt import

1
2
from konlpy.tag import Okt
t = Okt()
  • 형태소 분석을 위해 Okt를 불러옴


1.5 형태소 분석

1
2
contents_tokens = [t.morphs(row) for row in contents]
contents_tokens
1
2
3
4
[['상처', '받은', '아이', '들', '은', '너무', '일찍', '커버', '려'],
 ['내', '가', '상처', '받은', '거', '아는', '사람', '불편해'],
 ['잘', '사는', '사람', '들', '은', '좋은', '사람', '되기', '쉬워'],
 ['아무', '일도', '아니야', '괜찮아']]
  • 훈련용 문장을 형태소로 나누었음


1.6 다시 문장으로 합침

1
2
3
4
5
6
7
8
9
10
contents_for_vectorize = []

for content in contents_tokens:
    sentence = ''
    for word in content:
        sentence = sentence + ' ' + word
        
    contents_for_vectorize.append(sentence)
    
contents_for_vectorize
1
2
3
4
[' 상처 받은 아이 들 은 너무 일찍 커버 려',
 ' 내 가 상처 받은 거 아는 사람 불편해',
 ' 잘 사는 사람 들 은 좋은 사람 되기 쉬워',
 ' 아무 일도 아니야 괜찮아']
  • 형태소 분석된 결과를 다시 하나의 문장씩으로 합침


1.7 Vectorize

1
2
X = vectorizer.fit_transform(contents_for_vectorize)
X
1
2
<4x17 sparse matrix of type '<class 'numpy.int64'>'
	with 20 stored elements in Compressed Sparse Row format>
1
2
num_samples, num_features = X.shape
num_samples, num_features
1
(4, 17)
  • 벡터라이즈를 수행하였고, 총 4개의 문장의 전체 말중치 단어가 17개 임


1.8 확인

1
vectorizer.get_feature_names()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
['괜찮아',
 '너무',
 '되기',
 '받은',
 '불편해',
 '사는',
 '사람',
 '상처',
 '쉬워',
 '아는',
 '아니야',
 '아무',
 '아이',
 '일도',
 '일찍',
 '좋은',
 '커버']
  • 17개의 형태소 확인


1.9 테스트용 문장

1
2
3
4
5
6
7
8
9
10
11
12
13
new_post = ['상처받기 싫어 괜찮아']
new_post_tokens = [t.morphs(row) for row in new_post]

new_post_for_vectorize = []

for content in new_post_tokens:
    sentence = ''
    for word in content:
        sentence = sentence + ' ' + word
        
    new_post_for_vectorize.append(sentence)
    
new_post_for_vectorize
1
[' 상처 받기 싫어 괜찮아']
  • 테스트용 문장 형태소 분석 후 문장 더하기


1.10 벡터로 표현

1
2
new_post_vec = vectorizer.transform(new_post_for_vectorize)
new_post_vec.toarray()
1
array([[1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
  • 새로운 테스트용 문장을 만들고 벡터로 만듬
  • 벡터이니, 거리를 구할 수 있음


1.11 유클리드 거리

1
2
3
4
5
import scipy as sp

def dist_raw(v1, v2):
    delta = v1 - v2
    return sp.linalg.norm(delta.toarray())
  • 단순히 기하학적인 거리를 사용해보기


1.12 결과

1
2
dist = [dist_raw(each, new_post_vec) for each in X]
dist
1
[2.449489742783178, 2.23606797749979, 3.1622776601683795, 2.0]
1
2
3
print('Best post is ', dist.index(min(dist)), ', dist = ', min(dist))
print('Test post is : ', new_post)
print('Best dist post is : ', contents[dist.index(min(dist))])
1
2
3
Best post is  3 , dist =  2.0
Test post is :  ['상처받기 싫어 괜찮아']
Best dist post is :  아무 일도 아니야 괜찮아
  • 테스트용 문장과 훈련용 문장의 거리를 구함
  • 가장 가까운 거리는 2.0으로, 4번째 문장이 제일 가까움


1.13 유사도 - 벡터사이의 거리

1
2
3
4
5
for i in range(0, len(contents)):
    print(f'{[i]}', X.getrow(i).toarray())
    
print('-----------------------------------------')
print('[T]', new_post_vec.toarray())
1
2
3
4
5
6
[0] [[0 1 0 1 0 0 0 1 0 0 0 0 1 0 1 0 1]]
[1] [[0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0]]
[2] [[0 0 1 0 0 1 2 0 1 0 0 0 0 0 0 1 0]]
[3] [[1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0]]
-----------------------------------------
[T] [[1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]]
  • 문장의 유사도는 벡터사이의 거리를 잘 구하는 것이다
  • 결국 관건은 문장을 벡터로 잘 만드는것
  • 만들어진 벡터 사이의 거리를 잘 계산하는 것


1.14 TF-IDF

  • 한 문서에서 많이 등장한 단어에 가중치를 주는것 (Term Frep)
  • 전체 문서에서 많이 나타나는 단어는 중요하지 않게 하는 것 (Inverse Document Freq)


1.15 Tfidf Verctorizer

1
2
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df = 1, decode_error='ignore')
  • sklearn에 패키지로 있다


1.16 TF-IDF 적용

1
2
3
X = vectorizer.fit_transform(contents_for_vectorize)
num_samples, num_features = X.shape
num_samples, num_features
1
(4, 17)
  • TF-IDF을 다시 적용함


1.17 테스트 문장 적용

1
2
new_post_vec = vectorizer.transform(new_post_for_vectorize)
new_post_vec.toarray()
1
2
3
4
array([[0.78528828, 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.6191303 , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        ]])
  • 테스트 문장의 벡터화


1.18 결과

1
2
dist = [dist_raw(each, new_post_vec) for each in X]
dist
1
[1.254451632446019, 1.2261339938790283, 1.4142135623730951, 1.1021396119773588]
1
2
3
print('Best post is ', dist.index(min(dist)), ', dist = ', min(dist))
print('Test post is : ', new_post)
print('Best dist post is : ', contents[dist.index(min(dist))])
1
2
3
Best post is  3 , dist =  1.1021396119773588
Test post is :  ['상처받기 싫어 괜찮아']
Best dist post is :  아무 일도 아니야 괜찮아
  • 아까의 유클리드거리보다 거리값이 바뀌어 있음
  • 그래도 테스트 문장과 비슷한 문장의 결과는 똑같이 4번째 문장임


2. 실습


2.1 네이버 API 포스트에서 사용한 함수 사용

1
2
3
import urllib.request
import json
import datetime
1
2
3
4
5
6
7
8
def get_search_url(api_node, search_text, start_num, disp_num):
    base = 'https://openapi.naver.com/v1/search'
    node = '/' + api_node + '.json'
    param_query = '?query=' + urllib.parse.quote(search_text)
    param_start = '&start=' + str(start_num)
    param_disp = '&display=' + str(disp_num)
    
    return base + node + param_query + param_start + param_disp
1
2
3
4
5
6
7
8
9
10
def get_result_onpage(url):
    request = urllib.request.Request(url)
    request.add_header('X-Naver-Client-Id', client_id)
    request.add_header('X-Naver-Client-Secret', client_secret)
    
    response = urllib.request.urlopen(request)
    
    print('[%s] Url Request Success' %datetime.datetime.now())
    
    return json.loads(response.read().decode('utf-8'))


2.2 문장 수집

1
2
3
4
5
6
client_id = 'your_id' # your_id
client_secret = 'your_secret' # your_secret

url = get_search_url('kin', '파이썬', 10, 10)
one_result = get_result_onpage(url)
one_result['items'][0]['description']
1
2
3
4
5
6
7
[2020-10-18 22:02:19.228174] Url Request Success





'<b>파이썬</b> 독학으로 강의 들으려고 합니다 코딩 배워보려구요.. <b>파이썬</b> 강의 사이트 추천 부탁드릴게요 추천해주시면... 답변드리겠습니다 <b>파이썬</b>을 독학으로 공부하시는데 어려움이 있으신가요? <b>파이썬</b>이 다른 언어들에 비해 비교적... '
  • 훈련용 문장으로 사용할 데이터를 네이버 지식인에서 API로 받아옴


2.3 태그 제거

1
2
def delete_tag(input_str):
    return input_str.replace('<b>', '').replace('</b>', '')
1
2
3
4
5
6
def get_description(pages):
    contents = []
    for sentences in pages['items']:
        contents.append(delete_tag(sentences['description']))
        
    return contents
1
2
contents = get_description(one_result)
contents
1
2
3
4
5
6
7
8
9
10
['파이썬 독학으로 강의 들으려고 합니다 코딩 배워보려구요.. 파이썬 강의 사이트 추천 부탁드릴게요 추천해주시면... 답변드리겠습니다 파이썬을 독학으로 공부하시는데 어려움이 있으신가요? 파이썬이 다른 언어들에 비해 비교적... ',
 '... 64비트용 파이썬 설치할 수 있나요? 2. 64비트 윈도우에 32비트용 파이썬 설치할 수 있나요? 3. 윈도우용의 설치 파일의 확장자는 exe인가요? 4. 파이썬 설치... 32비트 윈도우에 64비트용 파이썬 설치할 수 있나요?... ',
 '파이썬 이제 막 해보려고 하는데 어떻게 공부해야하나요? 파이썬 공부로 KG에듀원 이룸 추천해드립니다. PC로만... 많은데 파이썬 강의마다 필요한 자료가 업로드돼 있어서... 그래서 파이썬 공부하시는 분들이 선호를 많이 하세요.... ',
 '파이썬수업을 듣고싶은데 다들 어디서 학습을 활용을 하시나요?? 파이썬 수업쪽으로 전문화된 곳 추천해주세요. 파이썬수업은 KG에듀원이룸을 추천해드리겠습니다. 이번년도에 찍은 신규오픈 현장강의입니다.... ',
 '파이썬 교육과정을 듣고싶은데요. 제가 나이가 40이... 파이썬교육과정을 배워보고 싶어서 찾아보고 있는데요. 파이썬교육과정을 좀 쉽게 가르쳐주는 학원이 있는지 궁금합니다. 안녕하세요, IT 컨설턴트 큐쌤입니다. 파이썬교육... ',
 '... C언어, 자바, 파이썬 등 너무 많은데 일단 좀 추려서 파이썬이랑 자바 두개 중에 정하려고 하는데 좀 난이도... 추천해주세요ㅠㅠ  파이썬이 제일 접근하기 쉬운언어이니 파이썬 먼저 공부해보시고, c언어 자바 하시면... ',
 "... 저장되도록 파이썬 코드로 구현해주실 수 있을까요?... 파이썬 pandas 라이브러리를 설치하시고, 아래 코드를... read_excel('파이썬 질문.xlsx', data_only=True) df['고유번호'] = df.groupby('이름').ngroup() + 1 df.to_excel('파이썬 질문... ",
 '부산에 파이썬 제대로 배울 수 있는 곳 있나요? 파이썬학원을 찾고 있는데 아는게 많이 없어서 제한적이네요 부산 파이썬학원 추천해주세요 부산 파이썬학원으로... ',
 '파이썬 공부 하려고 하는데 독학으로도 가능할까요? 비전공자 입니다... 파이썬공부에 대해 질문 남겨주셨는데요, 우선, 파이썬은 홈페이지 개발에 많이... 쓰입니다 파이썬은 사람이 생각하는 방식을 그대로 표현할 수 있도록 해주는... ',
 '파이썬 언어를 공부하려고 합니다. 인강으로 공부하려고 방향잡을려고 합니다. 파이썬 강좌는 어떤 사이트가 잘가르쳐주는지 파이썬 강좌 추천 부탁드립니다. 파이썬강좌는 국내 no.1 it 인터넷 전문 강의 사이트 kg에듀원 이룸... ']
  • 네이버 지식인에 있던 질문과 답변을 가져옴
  • 하지만 b 태크가 갈이 있어서 제거시키고 질문과 답변만 리스트화해서 저장함


2.4 형태소 분석

1
2
3
4
5
6
7
8
from sklearn.feature_extraction.text import CountVectorizer
from konlpy.tag import Okt

t = Okt()
vectorizer = CountVectorizer(min_df = 1)

contents_tokens = [t.morphs(row) for row in contents]
contents_tokens
1
2
3
4
5
6
7
8
9
10
[['파이썬',
  '독학',
  '으로',
  '강의',
  '들으려고',
  '합니다',
  '코딩',
  '배워',
  '보려구요',
  '...']]
  • 가져온 데이터를 형태소 분석 해봄


2.5 Vectorize 후 합치기

1
2
3
4
5
6
7
8
9
10
contents_for_vectorize = []

for content in contents_tokens:
    sentence = ''
    for word in content:
        sentence = sentence + ' ' + word
        
    contents_for_vectorize.append(sentence)
    
contents_for_vectorize
1
2
3
4
5
6
7
8
9
10
[' 파이썬 독학 으로 강의 들으려고 합니다 코딩 배워 보려구요 .. 파이썬 강의 사이트 추천 부탁드릴게요 추천 해주시면 ... 답변 드리겠습니다 파이썬 을 독학 으로 공부 하시는데 어려움 이 있으신 가요 ? 파이썬 이 다른 언어 들 에 비해 비교 적 ...',
 ' ... 64 비트 용 파이썬 설치 할 수 있나요 ? 2 . 64 비트 윈도우 에 32 비트 용 파이썬 설치 할 수 있나요 ? 3 . 윈도우 용의 설치 파일 의 확장자 는 exe 인가요 ? 4 . 파이썬 설치 ... 32 비트 윈도우 에 64 비트 용 파이썬 설치 할 수 있나요 ?...',
 ' 파이썬 이제 막 해보려고 하는데 어떻게 공부 해야하나요 ? 파이썬 공부 로 KG 에듀 원 이룸 추천 해드립니다 . PC 로만 ... 많은데 파이썬 강의 마다 필요한 자료 가 업로드 돼 있어서 ... 그래서 파이썬 공부 하시는 분 들 이 선호 를 많이 하세요 ....',
 ' 파이썬 수업 을 듣고싶은데 다 들 어디서 학습 을 활용 을 하시나요 ?? 파이썬 수업 쪽 으로 전문화 된 곳 추천 해주세요 . 파이썬 수업 은 KG 에듀 원 이룸을 추천 해드리겠습니다 . 이번 년도 에 찍은 신규 오픈 현 장강 의 입니다 ....',
 ' 파이썬 교육과정 을 듣고 싶은데요 . 제 가 나이 가 40 이 ... 파이썬 교육과정 을 배워 보고 싶어서 찾아보고 있는데요 . 파이썬 교육과정 을 좀 쉽게 가르쳐주는 학원 이 있는지 궁금합니다 . 안녕하세요 , IT 컨설턴트 큐쌤 입니다 . 파이썬 교육 ...',
 ' ... C 언어 , 자바 , 파이썬 등 너무 많은데 일단 좀 추려서 파이썬 이랑 자바 두 개 중 에 정 하려고 하는데 좀 난이도 ... 추천 해주세요 ㅠㅠ 파이썬 이 제일 접근 하기 쉬운 언어 이니 파이썬 먼저 공부 해보시고 , c 언어 자바 하시면 ...',
 " ... 저장 되도록 파이썬 코드 로 구현 해주실 수 있을까요 ?... 파이썬 pandas 라이브러리 를 설치 하시고 , 아래 코드 를 ... read _ excel (' 파이썬 질문 . xlsx ', data _ only = True ) df [' 고유 번호 '] = df . groupby (' 이름 '). ngroup () + 1 df . to _ excel (' 파이썬 질문 ...",
 ' 부산 에 파이썬 제대로 배울 수 있는 곳 있나요 ? 파이썬 학원 을 찾고 있는데 아는게 많이 없어서 제한 적 이네 요 부산 파이썬 학원 추천 해주세요 부산 파이썬 학원 으로 ...',
 ' 파이썬 공부 하려고 하는데 독학 으로도 가능할까 요 ? 비 전공자 입니다 ... 파이썬 공부 에 대해 질문 남겨주셨는데요 , 우선 , 파이썬 은 홈페이지 개발 에 많이 ... 쓰입니다 파이썬 은 사람 이 생각 하는 방식 을 그대로 표현 할 수 있도록 해주는 ...',
 ' 파이썬 언어 를 공부 하려고 합니다 . 인강 으로 공부 하려고 방향 잡을려고 합니다 . 파이썬 강좌 는 어떤 사이트 가 잘 가르쳐주는지 파이썬 강좌 추천 부탁드립니다 . 파이썬 강좌 는 국내 no . 1 it 인터넷 전문 강의 사이트 kg 에듀 원 이룸 ...']
  • 앞에서 훈련용 문장을 했던것 처럼 다시 Vectorize 후 합침


2.6 결과

1
2
X = vectorizer.fit_transform(contents_for_vectorize)
X
1
2
<10x171 sparse matrix of type '<class 'numpy.int64'>'
	with 221 stored elements in Compressed Sparse Row format>
1
2
num_samples, num_features = X.shape
num_samples, num_features
1
(10, 171)
1
vectorizer.get_feature_names()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
['32',
 '40',
 '64',
 'data',
 'df',
 'excel',
 'exe',
 'groupby',
 'it',
 'kg',
 'ngroup',
 'no',
 'only',
 'pandas',
 'pc',
 'read',
 'to',
 'true',
 'xlsx',
 'ㅠㅠ',
 '가능할까',
 '가르쳐주는',
 '가르쳐주는지',
 '가요',
 '강의',
 ...
 '해야하나요',
 '해주는',
 '해주세요',
 '해주시면',
 '해주실',
 '홈페이지',
 '확장자',
 '활용']
  • 총 10개의 문장이 있고, 171개의 형태소가 있음


2.7 유사도 측정할 테스트 문장

1
2
3
4
5
6
7
8
9
10
11
12
13
new_post = ['파이썬을 배우는데 좋은 방법이 어떤것인가요?']
new_post_tokens = [t.morphs(row) for row in new_post]

new_post_for_vectorize = []

for content in new_post_tokens:
    sentence = ''
    for word in content:
        sentence = sentence + ' ' + word
        
    new_post_for_vectorize.append(sentence)
    
new_post_for_vectorize
1
[' 파이썬 을 배우는데 좋은 방법 이 어떤 것 인가요 ?']
  • 테스트 문장을 형태소로 나누고, 다시 합침


2.8 테스트 문장의 Vectorize

1
2
new_post_vec = vectorizer.transform(new_post_for_vectorize)
new_post_vec.toarray()
1
2
3
4
5
6
7
8
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
  • 테스트 문장을 Vectorize화


2.9 유클리드 거리

1
2
3
4
5
6
7
8
import scipy as sp

def dist_raw(v1, v2):
    delta = v1 - v2
    return sp.linalg.norm(delta.toarray())

dist = [dist_raw(each, new_post_vec) for each in X]
dist
1
2
3
4
5
6
7
8
9
10
[6.782329983125268,
 9.746794344808963,
 6.6332495807108,
 6.164414002968976,
 6.324555320336759,
 7.0,
 7.280109889280518,
 6.557438524302,
 6.164414002968976,
 7.211102550927978]

2.10 유클리드 거리로 확인하는 테스트 문장과 가장 가까운 문장

1
2
3
print('Best post is ', dist.index(min(dist)), ', dist = ', min(dist))
print('Test post is : ', new_post)
print('Best dist post is : ', contents[dist.index(min(dist))])
1
2
3
Best post is  3 , dist =  6.164414002968976
Test post is :  ['파이썬을 배우는데 좋은 방법이 어떤것인가요?']
Best dist post is :  파이썬수업을 듣고싶은데 다들 어디서 학습을 활용을 하시나요?? 파이썬 수업쪽으로 전문화된 곳 추천해주세요. 파이썬수업은 KG에듀원이룸을 추천해드리겠습니다. 이번년도에 찍은 신규오픈 현장강의입니다.... 
  • 생각보다 괜찮아 보인다.


2.11 Normalize

1
2
3
4
5
6
7
def dist_norm(v1, v2):
    v1_normalized = v1 / sp.linalg.norm(v1.toarray())
    v2_normalized = v2 / sp.linalg.norm(v2.toarray())
    
    delta = v1_normalized - v2_normalized
    
    return sp.linalg.norm(delta.toarray())
  • 벡터의 거리를 구하는 방법중 유클리드 방식이 아닌 놈의 방식으로 구해봄
  • Norm은 벡터의 길이 혹은 크기를 측정하는 방법(함수)입니다. Norm이 측정한 벡터의 크기는 원점에서 벡터 좌표까지의 거리라고 함


2.12 Normalize 결과확인

1
2
3
4
dist = [dist_norm(each, new_post_vec) for each in X]
print('Best post is ', dist.index(min(dist)), ', dist = ', min(dist))
print('Test post is : ', new_post)
print('Best dist post is : ', contents[dist.index(min(dist))])
1
2
3
Best post is  9 , dist =  1.1172976201519322
Test post is :  ['파이썬을 배우는데 좋은 방법이 어떤것인가요?']
Best dist post is :  파이썬 언어를 공부하려고 합니다. 인강으로 공부하려고 방향잡을려고 합니다. 파이썬 강좌는 어떤 사이트가 잘가르쳐주는지 파이썬 강좌 추천 부탁드립니다. 파이썬강좌는 국내 no.1 it 인터넷 전문 강의 사이트 kg에듀원 이룸... 
  • 유클리드 거리와는 결과가 다르지만, 그래도 어느정도 맞아보인다.


2.13 Tfidf로 Vectorize

1
2
3
4
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df = 1, decode_error= 'ignore')
X = vectorizer.fit_transform(contents_for_vectorize)
X.shape
1
(10, 171)
  • 이번에는 Tfidf로 Vectorize를 해보았음


2.14 Norm 방식의 거리구하기로 결과 확인

1
2
3
4
dist = [dist_norm(each, new_post_vec) for each in X]
print('Best post is ', dist.index(min(dist)), ', dist = ', min(dist))
print('Test post is : ', new_post)
print('Best dist post is : ', contents[dist.index(min(dist))])
1
2
3
Best post is  9 , dist =  1.2312580680454142
Test post is :  ['파이썬을 배우는데 좋은 방법이 어떤것인가요?']
Best dist post is :  파이썬 언어를 공부하려고 합니다. 인강으로 공부하려고 방향잡을려고 합니다. 파이썬 강좌는 어떤 사이트가 잘가르쳐주는지 파이썬 강좌 추천 부탁드립니다. 파이썬강좌는 국내 no.1 it 인터넷 전문 강의 사이트 kg에듀원 이룸... 
  • 결과는 똑같이 나오긴 했음


3. 요약


3.1 요약

  • 문장간의 유사도는 문장을 벡터화 시켜서 벡터의 거리를 가까운 거기로 구하는 방식
  • 벡터의 거리가 가까우면 유사한 문장으로 생각 할수 있음.
  • 벡터의 거리를 구하는 방식은 Norm, 유클리드 방식이 있음.
This post is licensed under CC BY 4.0 by the author.