> For the complete documentation index, see [llms.txt](https://soojle.gitbook.io/project/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://soojle.gitbook.io/project/undefined/undefined-4/undefined-1/undefined-3.md).

# 데이터 정제 과정

## 개요

봇으로 동작하는 크롤러이다 보니 의미가 없는 데이터가 같이 추출될 수도 있다. 수많은 의미 없는 데이터로 인해서 데이터베이스의 불필요한 공간을 차지하는 것을 방지하기 위해서 다음과 같은 함수를 모든 게시글을 대상으로 실행한다.

## 데이터 정제

### 의미없는 이미지 제거&#x20;

본 크롤러에서는 게시글에 대한 미리 보기 기능을 지원하기 위해서, 대다수의 게시물에 포함된 첫 번째 이미지의 링크를 가져온다.&#x20;

하지만 이 과 정에서 의미 없는 이미지가 같이 추출될 가능성이 있으므로 해당 이미지의 크기가 50 x 50px 이하인 이미지는 전부 제거해준다. 이 과정을 통해 서 대다수의 의미없는 이미지를 정리할 수가 있다.

### 공백 제거

게시글을 크롤링을 할 때, html 코드 상에서는 불필요한 공백이 포함되어 있을 수가 있다. 공백은 값어치가 있는 정보를 추출하기에 불필요한 요소이므로 다음과 같은 코드가 있을 경우 제거해준다.

&#x20;**'\n', '\r', '\xa0', '\uf06d', '\t', '\\',** 또한 공백으로 나눠준 단어들에서 2번째 문자 가 r 또는 n인 단어 이 과정을 통해서 대다수의 의미 없는 데이터가 줄어들게 된다.

### 욕설 필터링

모든 포스트의 텍스트는 욕설 필터링을 거치게 된다. 리스트 및 정규표 현식으로 구성된 욕설 필터링은 욕설이 포함된 게시물은 정보의 값어치 가 낮다고 판단하여 제외를 하여 데이터베이스에 저장되지 않는다.

### 데이터베이스 추가 게시글 갯수

크롤러의 동작 구조는 하나의 게시판에서 게시물들을 페이지마다 크롤링 하여 데이터베이스에 저장하는 구조이다. 그런데 하나의 페이지에서 들 어간 게시글의 수가 0이면, 해당 사이트 크롤러를 종료한다. 이 숫자가 0이 나오는 경우는 두 가지가 존재한다.&#x20;

**첫 번째**는 중복 처리로 인해서 삽입이 되지 않아 0이 나오는 경우이다. **두 번째**는 단어 필터링 처리로 인한 게시글이 삽입이 되지 않은 경우가 한 페이지에 전체인 경우이다. 이럴 경우에는 뒷 페이지에 접속하여 게시글을 긁어도 의미없는 데이터 라 판단해 멈추는 방향으로 나아간다.

## 데이터 창출

크롤링한 게시물의 텍스트에서 보다 가치있는 정보를 창출하기 위해서 하나의 게시물는 다음과 같은 함수를 거치게 된다.

### 중복처리 방지

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuOW_ePAA6arrPtU-hH%2F-LuO_-BjcnhiQl1cpThW%2Fimage.png?alt=media\&token=1a6c7afd-d7c5-4436-a1d3-814f38318bd3)

중복 처리는 다음과 같이 진행된다. 먼저 게시물의 제목과 내용 을 함쳐서 md5 해시함수를 사용해서 해시값으로 만들어준다. 그리고 현 재 데이터베이스에 저장된 게시물들과 해당 게시물의 해시값을 비교하여 일치하는 값이 없는 경우에만 삽입하게 된다.

### 태그

각 게시글은 해당 내용에 맞는 주제를 가지고 있다. 게시물에서 주제를 파악하기 위해서 다음과 같은 태그 리스트를 이용한다.

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuOW_ePAA6arrPtU-hH%2F-LuO_9o97HK_X4yUfvUc%2Fimage.png?alt=media\&token=fcc8898a-7355-4663-b20f-b9b19c242708)

세종대학교 구성원 및 대학생이 관심을 가질만한 내용에 대하여 하나의 주제로 만들기 위해서, 크롤링한 게시물에서 위 리스트 안에 있는 요소가 존재하면, 해당 키 값을 주제로 태그 리스트에 정적으로 추가 해준다.&#x20;

모든 대학생을 대상으로 한 주제가 61가지로 태그를 구성 하였고, 현 세 =종대학교 구성원들을 대상으로 한 주제가 98개로 태그를 구성하여, 총 159개의 세부 주제들로 태그를 만들어주는 함수를 제작하였다. 모든 게시 물은 이 함수를 사용하여 각 게시물에 맞는 태그를 가지게 된다.

### 토큰

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuOW_ePAA6arrPtU-hH%2F-LuO_bi8vc6vfL_VToGa%2Fimage.png?alt=media\&token=a1635df7-183a-44da-87e6-caf7f6a1c52d)

머신러닝이 보다 효율적인 자연어 학습을 하기 위해서 모든 게시물들은 게시물을 토큰화하는 텍스트 전처리 과정을 진행하게 된다.&#x20;

해당 토큰화 과정은 구두점이나 특수 문자 제외, 줄임말과 단어 내에 띄어쓰기, 단어의 순서의 비 중요성, 교착어, 띄어쓰기의 비 중요성의 한국어의 특징을 고려하여 텍스트를 정제 및 정규화를 하게 된다.&#x20;

이 과정에서는 아무 의미도 갖지 않는 글자들을 의미하는 불용어 및 등 장 빈도가 적은 단어, 길이가 너무 짧거나 긴 단어들을 제외하여 정말 가치 있는 단어들만 창출할 수 있도록 진행된다. 위 토큰화 과정을 거친 게시글들은 위의 사진과 같은 토큰 리스트를 가 지게 된다.
