이번 포스팅은 앞의 이론에서 언급했었던 유사도 계산 방법들을 한번 더 설명하고, 구현해보겠습니다. 이론 포스팅은 여기를 클릭해주세요. 텍스트 유사도는 두 개 이상의 텍스트가 얼마나 유사한지 표현하는 방식 중 하나입니다. 텍스트 유사도 측정 방법은 여러가지가 있지만, 여기서는 4가지를 다루겠습니다. 1. 자카드 유사도(Jaccard Similarity) ▶구현 포인트 (1) 입력 받은 문장을 단어 단위로 쪼개주고, 중복을 제거해줍니다. (2) 두 단어 집합의 합집합을 구해줍니다. (3) 두 단어 집합의 교집합을 구해줍니다. (4) 교집합/합집합을 통해 유사도를 구해줍니다. 아래 코드는 자카드 유사도를 구현한 코드입니다. def jaccard(sent1,sent2): #(1) 입력 받은 문장을 단어 ..
▶자연어 처리의 문제들 앞의 포스팅에서 자연어 처리를 활용하는 아래와 같은 여러 문제들이 있다고 언급했습니다. 이번 포스팅에서는 그 문제들에 대해서 알아보겠습니다. · 텍스트 분류 · 텍스트 유사도 · 텍스트 생성 · 기계 이해 (1) 텍스트 분류 텍스트 분류란 자연어 처리 기술을 활용해 특정 텍스트를 사람들이 정한 몇가지 범주(class) 중 어느 범주에 속하는지 분류하는 문제입니다. 2가지 문제일 경우 이진 분류 문제, 3가지 이상일 경우 다중 범주 분류 문제라고 합니다. 텍스트 분류의 예시로는 스팸 분류, 영화 리뷰의 감정 분류, 뉴스 기사 분류 등이 있습니다. 텍스트 분류는 크게 지도 학습을 통한 분류, 비지도 학습을 통한 분류가 있습니다. · 지도 학습을 통한 분류 지도 학습을 통한 분류..
이번 포스팅은 앞의 이론에서 언급했었던 임베딩 방법들을 한번 더 설명하고, 구현해보겠습니다. 이론 포스팅은 여기를 클릭해주세요. 단어 임베딩이란 컴퓨터가 언어적인 의미가 담겨있는 자연어를 인식하기 위해, 언어적 특성을 반영하여 수치화 하는 것을 뜻합니다.단어 임베딩은 다음과 같이 크게 3가지로 나눌 수 있습니다. 1. 원핫 인코딩(one-hot enocoding) ▶구현 포인트 (1) 단어의 중복을 제거해줍니다. (2) 단어의 수만큼 배열을 만들고, 0으로 채워줍니다. (3) 해당 단어의 인덱스를 찾고, 그 부분을 1로 만들어줍니다. 아래의 코드는 아무런 라이브러리도 사용하지 않고, 구현한 코드입니다. ## no library def one_hot(word_list): #(1) 단어의 중복을 제거..
▶자연어 처리란? "어떻게 자연어를 컴퓨터에게 인식시킬 수 있을까?"에 대한 문제입니다. 즉, 컴퓨터가 인간의 언어를 이해하고 분석 가능한 모든 분야를 뜻합니다. 자연어 처리는 목적에 따라 크게 4가지로 나뉩니다. (1) 텍스트 분류 (2) 텍스트 유사도 (3) 텍스트 생성 (4) 기계 이해 위의 모든 분야들이 수행되기 위해서는 가장 먼저 단어가 표현이 되어야 합니다. 컴퓨터가 텍스트를 인식하는 방법들 중 가장 기본적인 방법은 아스키 코드로 표현하는 것 입니다. 아스키 코드는 아래와 같이 자연어를 0과 1로 수치화한 값을 뜻합니다. 아스키 코드 이 방법은 단순히 컴퓨터가 문자를 인식하기 위한 값이기 때문에, 언어적인 특징이 전혀 담겨있지 않습니다. 그렇다면, 컴퓨터가 언어적인 의미가 담겨있는 자연어를 인..
문제 설명 정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요. 제한 사항 -arr은 길이 1 이상, 100 이하인 배열입니다. arr의 원소는 -10,000 이상 10,000 이하인 정수입니다. 입출력 예 arr return [1,2,3,4] 2.5 [5,5] 5 접근법 리스트의 합을 구하는 sum()함수와 요소의 개수를 구하는 len()함수를 이용하여 평균을 구해보겠습니다. 나의 코드 def solution(arr): return sum(arr)/len(arr) 다른 코드 import numpy def solution(arr): return numpy.mean(arr) numpy라이브러리를 사용하면 numpy의 mean함수를 이용하여 쉽게 구할 수 있습니다.
문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 사항 -x는 -10000000 이상, 10000000 이하인 정수입니다. -n은 1000 이하인 자연수입니다. 입출력 예 x n answer 2 5 [2,4,6,8,10] 4 3 [4,8,12] -4 2 [-4, -8] 접근법 음수, 양수, 0일때를 다르게 처리해야 합니다. 먼저 0일때는 0씩 증가하기 때문에 모든 요소가 0이 됩니다. 즉, 0인 요소를 n개 가지면 됩니다. 양수 같은 경우에는 range(x, x*n+1)로 설정해줘야 하고, 음수 같은 경우에는 range(x, ..
문제 설명 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. 제한 사항 -arr은 길이 1 이상인 배열입니다. -인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. 입출력 예 arr return [4,3,2,1] [4,3,2] [10] [-1] 접근법 min()함수를 이용하여 리스트 내에 최소값을 찾고, 제거한 뒤 반환해 주겠습니다. 나의 코드 def solution(arr): arr.remove(min(arr)) return arr i..
문제 설명 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 사항 -n은 1이상 8000000000 이하인 자연수입니다. 입출력 예 n return 118372 873211 접근법 먼저 입력받은 정수를 리스트 형태로 바꾼 뒤, 내림차순으로 정렬하여 다시 하나의 정수로 변환하겠습니다. 나의 코드 def solution(n): answer = sorted(list(map(int,list(str(n)))),reverse=True) return int(''.join(list(map(str,answer)))) 다른 코드 def solution(n): return..
문제 설명 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한 사항 -N의 범위 : 100,000,000 이하의 자연수 입출력 예 N answer 123 6 987 24 접근법 입력받은 정수를 리스트로 바꿔서 리스트 요소의 합으로 간단하게 구해보겠습니다. 나의 코드 def solution(n): return sum(list(map(int,list(str(n)))))
문제 설명 정수 num이 짝수일 경우 Even을 반환하고 홀수인 경우 Odd를 반환하는 함수, solution을 완성해주세요. 제한 사항 -num은 int 범위의 정수입니다. -0은 짝수입니다. 입출력 예 num return 3 Odd 4 Even 접근법 입력받은 수를 2로 나눈 나머지를 이용하여 판별하겠습니다! 나의 코드 def solution(num): return "Even" if num%2 == 0 else "Odd" 이번문제는 굉장히 간단합니다!