목록전체 글 (315)
rueki
본문은 https://wikidocs.net/22592 를 참고해서 작성한 글입니다. 문장에서 자주 등장은 하지만, 큰 의미가 없는 단어들은 제거해야 문장 분석이 잘 이루어진다. 이에 대한 예로 I, My, ME, Mine과 같은 경우는 수백수천번이 나와도 실질적인 의미가 없어서 문장 분석에 별 도움이 안된다. 이를 불용어(Stopword)라 하며, NLTK에서는 약 100여개의 영단어의 불용어 패키지가 있다. from nltk.corpus import stopwords nltk.download('stopwords') stopwords.words('english')[:10] ['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', "you..
본문은 https://wikidocs.net/22592 를 참고해서 작성한 글입니다. 이번에는 코퍼스(말뭉치)에 있는 단어의 개수를 줄일 수 있는 어간추출과 표제어 추출에 대해 알아보자. 1. 표제어 추출(Lemmatization) 표제어는 쉽게 말해 '기본 사전형 단어'이다. 단어들로 부터 표제어를 찾는 과정을 표제어 추출이라 하며 단어들이 서로 다른 형태를 가지더라도, 그 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단한다. 그래서 우선적으로 단어의 형태학적 파싱을 진행해야한다. 형태소(의미를 가진 가장 작은 단위) 종류 1) 어간(stem) : 단어의 의미를 담고 있는 단어의 핵심 부분 2) 접사(affix) : 단어에 추가적 의미를 주는 부분 예를 쉽게 들어서 말하면 복수형태의 단어에서 ..

하나의 단어 입력했을 때, 그 단어를 구성하고 있는 알파벳의 처음 등장하는 위치 순서를 출력하는 문제이다. 없는 알파벳에 대해서는 -1을 출력하는 문제이다. C++의 String 헤더를 사용해서 문제를 풀어보았다. #include #include using namespace std; int main(){ string str; int index; cin>>str; for(char i = 'a';i
본문은 https://wikidocs.net/22592 를 참고해서 작성한 글입니다. 이전 시간에서는 토큰을 분류하는 토큰화에 대해 알아보았다. 이번에는 텍스트 데이터를 용도에 맞게 정제 및 정규화하는 것을 알아보자. 정제(Cleaning) : 노이즈 데이터 제거 정규화(Normalization) : 표현 방법이 다른 단어들을 통합시켜 같은 단어로 만들어준다. 이제 정규화하는 기법에 대해 알아보자. 1. 규칙 기반의 표기가 다른 단어 통합 정규 표현식의 규칙에 따라, 같은 의미의 단어지만 표기가 다른 언어들을 하나의 언어로 정규화한다. Ex) USA == US 2. 대소문자 통합 영어문장에서는 글 작성이 대문자와 소문자로 구분되어 작성되고, 주로 소문자로 작성이 이루어지기 때문에 대문자에서 소문자로 변환..
본문은 https://wikidocs.net/22592 를 참고해서 작성한 글입니다. 기계가 Text를 이해하도록 하기위해서는 텍스트 정제를 해주어야하는데 이에 앞어 텍스트 전처리를 말해보도록 하겠다. 1. 토큰화 2. 정규화 3. 어근화 / 어근 추출 및 표제어 추출 4. 불용어 5. 정규표현식 현재로서는 5가지로 나누어봤지만 그 외의 방법도 엄청 많다는 것을 찾아보면서 발견했다. 그래서 이번 게시글에서는 토큰화만 다루어보겠다. 토큰화(Tokenization) 위의 예시는 띄어쓰기를 기준으로 토근화 했지만 한국어 문장의 경우에 위와 같이 토큰화를 진행했을 때 단어 토큰을 구분하기 힘들 것이다. 한국어에는 '어절'이라는 띄어쓰기 단위가 있는데 어절 토큰화와 단어 토큰화가 같지가 않다. 영어와 다르게 한국..

문제 맞은 것에 따라 O 와 X를 표시하고 그에따라 점수를 매기는 문제이며 문제를 두개 연속 맞으면 1점 + 2점 = 3점이되며 연속해서 맞을시 맞은 문제에 대해 점수가 1점씩 증가한다. O와 X를 넣을 character형 배열과 테스트 케이스를 선언할 변수, 점수와 그에 대한 증가에 관한 변수 선언이 필수적이다. #include #include #include using namespace std; int main() { char arr[80]; //OX 들어갈 문자열 int score = 0; int sum=0; int N; // 테스트 케이스 수 cin >> N; for (int i = 0; i >arr;// 배열에 문자열 입력 for (int j = 0; j < strl..

이 문제의 Point는 입력받은 과목에 대해 세준이만의 방법으로 점수를 어떻게 바꿔서 평균을 내는 지이다. 그러기 위해서는 제일 먼저 최대값을 구하고 '/M*100' 이라는 식을 적용시켜야 한다. 예시로 40, 80, 60 중에서 80점이 최고점수이다. 예제에서 식을 적용해보자 1. 40 / 80*100 = 50 2. 80 / 80*100 = 100 3. 60 / 80*100 = 75 4. Average = (50+100+75) / 3 = 75.00 위의 방식대로 값을 다 구해낼 수 있지만 중요한 점은 출력값이 소수점 두째자리까지 나와야한다는 것이다. 소스 코드를 보자 #include #include #define _CRT_SECURE_NO_WARNINGS using namespace std; int m..

A와 B와 C의 곱 결과를 배열에 넣는 것을 요구하는 문제이다. 여기서 Point는 결과값의 각 자리의 숫자를 Count해야한다는 점인데 (몇 번 쓰였는지) 예를들어 1234라는 숫자가 있으면 1,2,3,4 가 각각 1개씩 있으니 결과값으로 1,1,1,1 이 출력되야된다는 것이다. 그래서 0~9까지의 숫자가 있으니 배열 크기는 10으로 주었다. 예시 입출력을 한 번 보자 150 x 266 x 427 = 17037300 인데 출력값으로 0~9까지의 숫자가 몇 개씩 있는지를 나타낸 것을 확인할 수가 있다. 코드로 문제를 풀어보자 #include using namespace std; int main(){ int A,B,C; int mul = 0; int arr[10]={0}; cin>>A; cin>>B; ci..