SOOJLE
1.0.0
1.0.0
  • SOOJLE Document
  • 프로젝트 요약
  • 프로젝트 개요
    • 프로젝트 소개
    • 추진 배경 및 필요성
    • 프로젝트 내용
      • 기능적 요구사항
      • 비기능적 요구사항
    • 개발환경 및 팀 구성
    • 워크플로우
      • 계획 수립 & 설계
      • 데이터 수집 및 정규화
      • 인공지능 개발
      • 서비스 모듈 개발
      • 성능 평가 및 보고
    • 프로젝트 예산 내역
  • 사전조사 & 의사결정
    • 사전조사
      • 재학생 대상 사전조사
      • 수집 URL 대상 목록
        • 세종대학교 직할
        • 세종대학교 학과
        • 공식 공지사항
        • 세종대 평생교육원
        • 외부 웹사이트
      • 학습 모델 사전조사
        • LSA - 잠재 의미 분석
        • LDA - 잠재 디리클레 할당
        • Word2Vec - 워드투벡터
        • FastText - 패스트텍스트
    • 의사결정
      • 사용자 인증 방식 의사결정
      • 데이터베이스 의사결정
        • MySQL vs MongoDB 성능 분석
      • 토픽별 의사결정
      • 부가 기능 의사 결정
  • 프로젝트 설계
    • 시스템 구조 설계
    • 핵심 기능 설계
      • 데이터 크롤러 설계
      • 게시물 토픽 정의 및 분류
      • 사용자 관심분야 측정
      • 뉴스피드 설계
        • 사용자-문서 유사도(Recommendation Score)
        • FaS (관심 분야 및 유사도 측정 - 추가)
        • 토픽 뉴스피드 목록
      • 검색 알고리즘 설계
        • 검색 알고리즘 1차 설계
        • 검색 알고리즘 1차 개선안
        • 검색 알고리즘 2차 설계
    • 요구사항 목록
      • DB 요구사항
      • 기능 요구사항
      • 품질 요구사항
      • 관리 요구사항
  • DB
    • 구조 설계
    • 테이블 명세
  • 데이터 크롤러
    • 데이터 크롤러 개요
    • 크롤링 URL 선정
    • 크롤러 구현을 위한 사전조사
    • 크롤러 개발 과정
      • 크롤러 프로그램 설계
      • 크롤러 규격화
      • 크롤러 정규화
      • 데이터 정제 과정
      • 에러 핸들러 구현
      • 배포 환경 이식을 위한 Porting
    • Issue & Exception
    • 결과 보고
  • 인공지능 개발
    • 인공지능 개발 개요
    • NLP 스터디
      • Bag of Words(BoW)
      • Document Term Matrix(DTM)
      • TF-IDF(Term Frequency-Inverse Document Frequency)
      • 문서 유사도(Document Similarity)
    • 데이터 전처리 과정
    • 개발 과정
      • 토크나이저 구현
      • LDA 모델 학습 및 구현
    • LDA 학습 모델링
      • 1차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 2차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 3차 파라미터 튜닝 결과 (NUM_TOPICS)
      • NUM_TOPICS 파라미터 의사결정
      • 4차 파라미터 튜닝 결과 (PASESS, ITERATION)
      • 최종 학습 모델 명세
    • Word2Vec(FastText) 학습 모델링
    • Issue & Exception
    • 성능 분석 결과
  • BackEnd
    • 서버 구축 및 배포
      • SOOJLE 서버 구조
      • 상용 서버 (UWSGI + NGINX) 구축
      • HTTPS 서버 구현
    • API 문서 개요
    • API 목록
      • Analysis
      • Auth API
      • Newsfeed API
      • Post API
      • Search API
      • Admin API
    • 세종 Auth API
    • 통계 기능 설계
    • Issue & Exception
    • 성능 분석 결과
  • FRONTEND
    • 프론트엔드 설계 개요
    • 디자인 설계 의사결정
      • 디자인 컨셉 및 기능 정의
      • 컴포넌트 디자인
      • Logo Variation
    • 화면 흐름도
    • 페이지 UI 명세
      • Main Page
      • Header
      • Footer
      • Mobile Control Bar
      • Login Page
      • Timeline Page
      • Menu Page
      • Hyperlink Icons Page
      • Search Component & Mobile Search Modal
      • Search Page
      • Post Block
      • Snackbar
  • 프로그램 배포
    • 프로그램 개요
    • 시스템 아키텍쳐
    • 주요 기능 및 명세
    • 프로그램 테스트
    • 구현 결과물 배포
  • 마무리
    • References
  • SOOJLE AI
  • SEJONG AUTH
  • IML Tokenizer
  • SOOJLE Crawler
  • SOOJLE Frontend
  • SOOJLE Backend
Powered by GitBook
On this page
  • 개요
  • 데이터 정제
  • 의미없는 이미지 제거
  • 공백 제거
  • 욕설 필터링
  • 데이터베이스 추가 게시글 갯수
  • 데이터 창출
  • 중복처리 방지
  • 태그
  • 토큰

Was this helpful?

  1. 데이터 크롤러
  2. 크롤러 개발 과정

데이터 정제 과정

개요

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

데이터 정제

의미없는 이미지 제거

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

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

공백 제거

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

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

욕설 필터링

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

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

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

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

데이터 창출

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

중복처리 방지

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

태그

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

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

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

토큰

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

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

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

Previous크롤러 정규화Next에러 핸들러 구현

Last updated 5 years ago

Was this helpful?