# 데이터 크롤러 설계

## 개요

SOOJLE은 세종대학교 구성원이 관심을 가지는 가능한  모든 정보에 대한 수집이 필요하다. 때문에 각 대상이 되는 사이트로부터 정보를 주기적으로 수집하는 크롤러의 구현이 요구된다.

## 데이터 수집 목록

데이터 크롤러의 수집 대상이 되는 URL은 아래의 문서를 참고하자.

{% content-ref url="../../requirements/undefined-1/url" %}
[url](https://soojle.gitbook.io/project/requirements/undefined-1/url)
{% endcontent-ref %}

## 수집 수행 과정

아래와 같은 과정을 수행/반복하여 데이터 수집을 진행한다.

* 지정된 Target URL에 대하여 아래의 과정을 수행한다.
* 접속한 사이트의 게시판 목록에서 수집 대상을 파악한다.
* 각 단일 게시물에 대하여 수집 대상 데이터를 수집한다.
* 만약 이미 해당 데이터가 DB 내에 존재할 경우는 제외한다.
* 해당 목록에 대한 데이터 수집이 완료되었을 경우, 파라미터를 수정하여 다음 페이지의 게시판으로 이동한다.
* 해당 게시판에 더 이상 게시물이 존재하지 않거나, 지정된 수집 날짜 미만일 경우, 해당 URL에 대한 수집을 종료한다. &#x20;

## 수집 대상 데이터 및 포맷

각각 다른 사이트에서 수집된 데이터들은 모두 각기 다른 포맷을 가지고 있기 때문에 후에 적절한 분석 및 검색 기능을 위해 해당 데이터를 다음과 같은 형태로 정규화시킬 필요가 있다.

| 분류                            | 타입             |
| ----------------------------- | -------------- |
| 제목                            | String         |
| 제목 토큰                         | Array\<String> |
| 작성&#xC790;**(있을 경우만 한정)**     | String         |
| 내용                            | String         |
| 게시물 토큰                        | Array\<String> |
| 수집/작성 날짜                      | DATETIME       |
| 만료 날&#xC9DC;**(공모전/대외활동 한정)** | DATETIME       |
| 관련 태그                         | Array\<String> |
| 로그인 여부                        | Int            |
| URL                           | String         |
| 이미지 UR&#x4C;**(있을 경우만 한정)**   | String         |
| 게시물 식별 정보                     | String         |
| 게시물 Hash                      | String         |
| 학습 유무                         | Int            |

**만료 날짜, 이미지 URL, 작성자**를 제외한 모든 칼럼은 각 게시물에 필수적으로 존재해야 한다. 각 칼럼에 대한 내용은 다음과 같다.

### 제목

게시물의 제목을 저장한다. 만약 게시판 특성상 게시물 제목이 존재하지 않을 경우, **내용**에서 앞의 일정 부분을 발췌하여 제목에 등록한다.

### **제목 토큰**

게시물의 제목을 **공백 단위로 나누어 토큰화한 리스트**를 저장한다.

### 작성자

게시물의 작성자 명을 저장한다.

### 내용

게시물의 내용(Contents)을 저장한다.

### 게시물 토큰

해당 게시물에 대한 (제목 + 내용 + 태그)을 하나의 문자열로 합친  후, **형태소 분석을 통해 명사만 추출한 토큰 리스트**를 저장한다.

### 수집/작성 날짜

해당 게시물이 작성된  날짜를 기입한다. 만약 존재하지 않을 경우, 현재 시간을 등록한다.

### &#x20;만료 날짜

공모전, 대외활동의 게시물 홍보 만료일 기점이 존재하는 게시물에 대하여 해당 날짜를 수집한다.

### &#x20;관련 태그

&#x20;수집 도중, Rule Based 방식을 도출한 관련 태그 리스트를 저장한다.

### &#x20;로그인 여부

&#x20;해당 게시물이 로그인을 한 유저에 한해서만 확인할 수 있는 정보인지 명시하는 값을 저장한다.

### &#x20;URL

해당 게시물의 원본 출처를 저장한다.

### 이미지 URL

해당 게시물의 Contents 내에 이미지가 존재할 경우, 해당 이미지의 URL을 저장한다.

### 게시물 식별 정보

크롤러에서 각 타 URL을 식별하기 위해 저장한 값을 저장한다.

### 게시물 Hash

해당 게시물을 식별하기 위해 (제목 + 내용) 값을 MD5 해쉬 처리를 수행한 값을 저장한다.

### **학습 유무**

해당 게시물이 모델의 학습에 기여를 했는가를 판별하는 칼럼이다. 학습을 수행한 경우 1, 아닌 경우 0을 명시한다.&#x20;

&#x20;
