혼자 울면서 한 프로젝트입니다...
1. Overview & IDEA - PPT Searching 2. Extracting with PPT 3. TF-IDF with PPT 4. Threading with PPT 5. Operating with PPT
Overview
때는 바야흐로 졸업 학년이 되었을 무렵… 컴퓨터 공부가 너무 하고 싶었던 나는 졸업을 조금 미루고 컴퓨터 공부를 한다고 선언한다. 운영체제랑 이것저것 조금 더 듣고 싶었고 부전공도 하고 싶어서 부모님께 공부1년만 더하겠습니다. 했더니
학비는 니가 벌어라
라는 말이 나온다… 틀린 말이 아니길래 한학기 등록금을 벌러 여기저기 기웃거리다. 삼우종합건축사사무소에서 코딩할 줄아는 사람을 뽑는다길래 일딴 지원을 해봤다.
덜컥 면접을 봤는데 갑자기 동탄을 가자고 하는 소리에 떨떠름 하게 “네…^^&“를 시전했고 붙자마자 동탄으로 발령이나서 인턴 일을 갑작스런 타지에서 하게된다…
좋다 이거야!
일딴 호텔을 6주간 줘서 오히려 좋았다.
이제 일을 하러 첫 출근을 하고 앉아있는데 회의실로 부르셔서 하는 말.
선임 : 우리는 데이터가 많아요. 근데 검색하는 웹페이지도 있는데 사람들이 관리를 안해서 도저히 쓸 수가 없어요 대대적으로 갈아 엎어야 하는데 혹시 검색 성능향상 이런것도 해봤나요?
선임 : 기획을 해도 좋습니다. 작게 프로그래밍을 해도 좋으니 뭐든 인턴 때 할 수 있는 일을 해주세요.
검색! 조아!
이렇게 프로젝트는 시작되었다. 찬찬히 둘러보니 데이터는 정말 많은 것 같았다. 주어진 조건은 아래와 같았다.
- 검색을 해야하는 양은 아래와 같다.
- 각 현장마다 운영 서버가 있는데 약 2년~3년 정도를 건물이 지어지기까지 따라다니면서 작업하고 일정 단계가 넘어가면 수동으로 사람이 데이터 분류 후 DB에 일일이 저장한다.
- 각 현장마다의 운영 서버는 1TB 이고 이런 서버가 한 20개 정도 각기 다른 지역에 분포해있다.
- 물론 운영 서버만 1TB이고 저장 서버는 이것보다 더하다 못잡아도 20TB는 될 것 같았다.
- 검색에는 연관 공종이 있다.
- 건축 회사지만 전기, 기계, 소방, 공조, 제어 등등 부서가 많으며 각 공종마다 건축을 기본으로 다른 부분까지 참조해야하는 것이 굉장히 많다.
- 예를 들어 전기 배선이 가는 곳에는 소방이 지나가면 물 + 전기로 피카츄가 되는 것이다.
- 이러한 이유로 연관 공종이 어느정도 존재한다.
- 데이터의 종류
- 데이터의 종류를 보면 설계회사 답게 이미지가 굉장히 많다. 하지만 보통 cad와 rvt파일이 주다.
- 하지만 이에 못지 않게 보고 자료도 많다. 형식은 ppt, word, excel 등등이다.
하지만 가장 중요한 문제는
찾아야 하는 것은 HISTORY!
라는 것이다.
예를 들어 보자
- 발주처의 요청으로 A라는 설계 변경이 있었다.
- 이를 변경한 후 발주처와 건설사에 납품을 진행 했다.
- 건설사가 이를 누락시키고 이전도면으로 시공했다
- 이는 건설사의 책임이지만 기간이 길어지는 상황에서 과연 인간 == 컴퓨터가 아닌이상 책임 소재가 불분명해진다.
- 쌈이 나면 불리해지는 건 못찾는 쪽이므로 손해가 막심하다. 지체 보상금 2.5/1000이 국룰이니까…
이러한 이유로 history가 중요해지는 것이다.
IDEA
여기까지 들으면 내 머리 속에는 “오 BIG DATA 프로젝트 하나 해볼 수 있나?” + “서버도 주시는 건가?” 가 떴지만 여기는 건축회사 그런건 없다… 내가 받을 수 있는 서버는 작고 소중한 나의 PC 이걸로 어떻게든 해야한다.
해서 우선은 알고리즘을 찾고 실제로 작동해 보는지 알아보기 시작한다.
TF-IDF
이전에 학회에서 프로젝트를 할 때 TF-IDF라는 알고리즘을 가지고 프로젝트를 해본적이있다. spotify에서 곡추천을 할 때 개인이 특성을 고르면 여기에 맞는 노래를 추천해 주는 프로젝트 였는데 당시 처음에 듣고싶은 노래를 문자열로 입력하면 특정 노래를 찾아준다 라는 키워드로 잠깐 검토했었던 것이 있는 알고리즘 있었다.
사실 당시에는 공부를 하기도 싫었고 그냥 그렇구나 하는 상황이었는데 고민하다 번뜩 떠오른 것이다.
당시에 이미지를 검색하는 것도 기획을 하다가 그렇게 많은 돈과 시간을 쏟을 수 없다는 판단에 문서만 이라도 추려서 증명을 해보자 라는 생각으로 진행을 하기 시작했다.
해서 아래처럼 기획이 되었다.
- PPT를 crawling해서 모든 문자들을 긁어낸다.
- 문자열을 불용어 전처리 진행
- PPT_Name - 모든 문자열 쌍으로 만들어서 저장
- 이후 TF와 IDF 계산후 곱해서 모든 문자에 대한 가중치를 저장
- 이후 검색어가 들어올 때 같은 방식으로 전처리를 진행한후 행렬 곱을 통해 가장 의미가 비슷한 문서순으로 시각화
이렇게 큰 틀을 잡고 PoC를 진행하기 시작한다.
->다음편2. Extracting with PPT에서 계속