# data[].attributes.body
1. 구글 코랩 실행
2. 파일 -> 노트 업로드
3. 엑셀 파일 업로드
4. 코드 수정

# data[].attributes.body
import pandas as pd

df = pd.read_excel('baept.xlsx')
df.head()

# data[].attributes.body
question = df['Q'].tolist()
question

# data[].attributes.body
from sklearn.feature_extraction.text import CountVectorizer

vector = CountVectorizer()
sen_vector = vector.fit_transform(question)
sen_array = sen_vector.toarray()
sen_array

# data[].attributes.body
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 데이터셋에서 모든 문장을 사용하여 벡터화 도구 학습
vector = TfidfVectorizer()
sen_array = vector.fit_transform(df['A'].tolist()).toarray()

def get_most_similar_sentence():
    new_sen = input("질문을 하세요 (종료하려면 'exit'를 입력하세요): ")
    if new_sen == 'exit':
        return False

    # 사용자로부터 입력받은 질문을 벡터로 변환
    new_sen_vector = vector.transform([new_sen])
    new_sen_array = new_sen_vector.toarray()
    print(new_sen_array)
    simil_score = cosine_similarity(new_sen_array, sen_array)
    max_index = simil_score.argmax()
    print(df['A'].tolist()[max_index])
    return True

while True:
    if not get_most_similar_sentence():
        break

# data[].attributes.headline
선생님의 자비로운 힌트

# data[].attributes.subject
선생님의 자비로운 힌트

# data[].attributes.attachment_link.title
선생님의 자비로운 힌트

# data[].attributes.body
def calc_distance(a, b):

''' 레벤슈타인 거리 계산하기 '''

if a == b: return 0 # 같으면 0을 반환

a_len = len(a) # a 길이

b_len = len(b) # b 길이

if a == "": return b_len

if b == "": return a_len

# 2차원 표 (a_len+1, b_len+1) 준비하기 --- (※1)

matrix = [[] for i in range(a_len+1)]

for i in range(a_len+1): # 0으로 초기화

matrix[i] = [0 for j in range(b_len+1)]

# 0일 때 초깃값을 설정

for i in range(a_len+1):

matrix[i][0] = i

for j in range(b_len+1):

matrix[0][j] = j

# 표 채우기 --- (※2)

for i in range(1, a_len+1):

ac = a[i-1]

for j in range(1, b_len+1):

bc = b[j-1]

cost = 0 if (ac == bc) else 1

matrix[i][j] = min([

matrix[i-1][j] + 1,     # 문자 삽입

matrix[i][j-1] + 1,     # 문자 제거

matrix[i-1][j-1] + cost # 문자 변경

])

return matrix[a_len][b_len]

# "가나다라"와 "가마바라"의 거리 --- (※3)

print(calc_distance("가나다라","가하마라"))

right_world = ['apple','computer','melon','book','water','campus','camp']

input_word = 'comtpter'

r = sorted(right_world, key= lambda n: calc_distance(input_word, n))

# 가장 작은 거리를 가진 단어 출력

print("가장 가까운 단어:", r[0])