사용자 도구

사이트 도구


2018_07

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
2018_07 [2018/07/17 07:54]
ehmoon
2018_07 [2021/04/13 06:54] (현재)
줄 1: 줄 1:
-===== 6일 금요일 =====+===== 06일 금요일 ===== 
 + 
 +[Develop]
  
 웹 페이지를 MHTML 파일로 긁어와 저장하는 프로그램 개발. 웹 페이지를 MHTML 파일로 긁어와 저장하는 프로그램 개발.
줄 17: 줄 19:
 \\ \\
  
-===== 9일 월요일 =====+===== 09일 월요일 ===== 
 + 
 +[Develop]
  
 chilkat 모듈을 이용하면 깨지는 페이지들이 발생. chilkat 모듈을 이용하면 깨지는 페이지들이 발생.
줄 36: 줄 40:
  
 ===== 10일 화요일 ===== ===== 10일 화요일 =====
 +
 +[Develop]
  
 Chrome Extension 사용하여 mhtml 파일 저장하는 작업 완료. Chrome Extension 사용하여 mhtml 파일 저장하는 작업 완료.
줄 60: 줄 66:
  
 ===== 11일 수요일 ===== ===== 11일 수요일 =====
 +
 +[Develop]
  
 기존의 계획상으로는 xlsl 파일로부터 500개 dataSet 읽어와서 mht 파일로 변환하는 작업을 진행하려고 했으나,  기존의 계획상으로는 xlsl 파일로부터 500개 dataSet 읽어와서 mht 파일로 변환하는 작업을 진행하려고 했으나, 
줄 112: 줄 120:
  
 ===== 12일 목요일 ===== ===== 12일 목요일 =====
 +
 +[Develop]
  
 Django 서버에 mainpage 만들어서 DB에 모아두었던 모든 DataSet들 화면에 찍어봄. Django 서버에 mainpage 만들어서 DB에 모아두었던 모든 DataSet들 화면에 찍어봄.
줄 166: 줄 176:
  
 ===== 13일 금요일 ===== ===== 13일 금요일 =====
 +
 +[Develop]
  
 client에서 생성했던 blob 파일을 다시 서버로 보내기 위해 ajax 의 POST request를 구현하던 중 문제가 발생. client에서 생성했던 blob 파일을 다시 서버로 보내기 위해 ajax 의 POST request를 구현하던 중 문제가 발생.
줄 222: 줄 234:
  
 ===== 16일 월요일 ===== ===== 16일 월요일 =====
 +
 +[Develop]
  
 blob 객체를 장고 서버에 업로드하기 위해 기본적인 jquery ajax post 통신으로 시도해 봤지만 500에러 발생. blob 객체를 장고 서버에 업로드하기 위해 기본적인 jquery ajax post 통신으로 시도해 봤지만 500에러 발생.
줄 242: 줄 256:
  
 ===== 17일 화요일 ===== ===== 17일 화요일 =====
 +
 +[Develop]
  
 구글링을 통해 XHR (XML Http Request) 방식으로 ajax 다시 보내봄. 구글링을 통해 XHR (XML Http Request) 방식으로 ajax 다시 보내봄.
줄 270: 줄 286:
  
 FormData 객체 사용하는 방법에 대해 더 찾아봐야 함. FormData 객체 사용하는 방법에 대해 더 찾아봐야 함.
 +
 +\\
 +\\
 +\\
 +
 +===== 18일 수요일 =====
 +
 +[Develop]
 +
 +FormData 객체가 잘 생성되고 있는지 확인하기 위해 append 함수로 string 값 넣어놓고 
 +
 +콘솔에 찍어보니까 문제없이 잘 출력됨. FomrData가 문제가 아니였음.
 +
 +그래서 blob 객체를 append하고 나서 다시 찍어보니까 브라우저상에는 잘 찍힘.
 +
 +근데 서버로 넘긴 후에 찍어보니까 string 값으로 append 했던 element들은 잘 찍히는데
 +
 +blob 객체는 맴버에 안보임. 이 부분을 파고들어서 더 자세히 알아보니까,
 +
 +django에서 ajax로 blob을 get 할때는 request.POST가 아니라 request.FILES를 통해
 +
 +꺼내야 한다고 함. 그렇게 시도해보니까 문제없이 잘 열림.
 +
 +혹시나 이번에도 str 값으로 들어온걸 보고 낚였을 수 있으니 size를 확인해보니까
 +
 +정확히 일치함. 이틀간 해맸던 blob 객체 전송을 성공했으니 쭉쭉 진도 빼는것 가능해짐.
 +
 +가장 먼저, 서버측에서 넘겨 받은 Blob 객체를 디스크에 write하기 위해 python defalt_storage
 +
 +모듈 이용하여 내려받았고, 현제 프로젝트 폴더에 files 폴더를 만들어 그 위치에 저장 성공.
 +
 +이제 500개 페이지에 대해서 loop 돌면서 client 프로그램을 실행시켜놓니까
 +
 +잘 진행되는것 같다가도 네트워크 에러 발생.
 +
 +javascript는 비동기적으로 function을 call 하기 때문에 거의 500개의 페이지가 동시에 
 +
 +서버에 requst 메시지를 보내게 됨. 네트워크 트래픽에 병목현상 일어나고 내 컴퓨터가 감당 못함.
 +
 +즉 이런식으로 프로그래밍 하면 안된다는것을 깨달음 (컴퓨터가 슈퍼 사양이라면 상관없지만)
 +
 +그래서 처음에는 tap 객체를 생성할때 마다 일정 시간의 delay를 주기 위해 setInterval() 함수를 
 +
 +사용해 보았지만, 시뮬레이션 돌려보니 이것 역시 네트워크가 느려서 결국 tab 생성 및 mht 다운로드
 +
 +속도가 따라잡혀버림. 결국 마지막 대안 방법으로 생각해낸 것이 스레드를 풀어서 tap 객체를 독립적으로
 +
 +동작하게 하고, tap 객체가 작업이 끝난 후에 다음 페이지에 대한 작업을 시작하도록 해야 함.
 +
 +결국 tap 객체를 5개만 생성하고 작업이 끝났을때 다음 url로 이동해주는 함수를 콜백으로 호출하도록 
 +
 +하여 구현. 근데 여기서 운영체제 시간에 배웠던 shared memory 접근시 발생하는 문제가 발생. 
 +
 +특정 tap이 공유 변수를 수정하는 사이에 몇개의 tap이 접근해버려서 결국 몇몇 page는 놓쳐버림.
 +
 +이 문제를 해결하기 위해 결국 tap마다 처리하는 page 번호의 범위를 나누고 독립적으로 작업하도록 변경
 +
 +잘 돌아가긴 하지만, 속도가 너무 느림.
 +
 +5개의 스레드 잘 처리하는 방법과 네트워크 트래픽 문제로 어쩔 수 없이 에러가 발생하는 경우의 
 +
 +예외처리, 저장해놓은 mht 파일을 DB에 저장하는 방법에 대해 더 진행해야 함.
 +
 +\\
 +\\
 +\\
 +
 +===== 19일 목요일 =====
 +
 +[Develop]
 +
 +1개의 스레드를 돌려서 500개 mht 파일 생성하는 작업 완료.
 +
 +DB에 파일 삽입하는 방법으로는 파일의 경로를 넣어두는게 가장 좋을것 같음.
 +
 +그렇다면 500개 파일에 대해 각각의 파일 위치정보를 빼내서 mySQL column에 박아야 하는데
 +
 +방법은 여러가지 있음.
 +
 +(1) Django에서 Model 객체에 제공해주는 API 메소드 이용한다.
 +
 +(2) MySQL 쿼리문을 이용해서 일괄적으로 update한다
 +
 +(3) 수작업으로 복붙한다.
 +
 +1번이 가장 쉬운 방법이고 3번이 가장 바보같은 방법.
 +
 +나는 2번으로 하기로 함. 이유는 SQL 쿼리 작성하는법 연습도 할겸 이것저것 시도해보기 위해.
 +
 +일단 쿼리로 테이블 값을 업데이트 하려면 파일 경로의 정보가 있어야 한다.
 +
 +이건 윈도우 파워쉘 명령어 갖다가 근성이형이 해결해줌.
 +
 +이제 쿼리 잘 만들어서 update sql문 잘 날려주면 됨.
 +
 +내일은 이 작업 마무리하고 논문 리딩 시작.
 +
 +\\
 +\\
 +\\
 +
 +===== 20일 금요일 =====
 +
 +[Develop]
 +
 +쿼리 만들어서 파일 경로 DB에 update하는 작업 진행하다 시간이 너무 많이 소요돼서
 +
 +결국 django 에서 제공해주는 함수 이용하여 작업.
 +
 +view 단에 setMhtFiles() 메소드 만들고 os 모듈 안에 있는 listdor() 함수 사용하여
 +
 +files 폴더 안에 모아놓은 모든 파일의 이름 빼옴.
 +
 +현재 디렉터리의 경로를 알기 위해 os.path.realpath() 함수 사용하였고, 앞에서 구한
 +
 +파일명 앞에 붙여서 500개의 절대경로 만들어냄.
 +
 +각각의 경로들을 DB에 update 하기 위해 모듈 클래스의 save() 함수 이용하여 작업 완료.
 +
 +추가 작업으로 클라이언트에서 시뮬레이션 할때마다 변수값들 바꿔주는 시간 줄이기 위해
 +
 +소스코드 정리한번 하고, startDownload() 함수 안에 strat, end, numberOfTabs, isDownload
 +
 +파라미터 만들어서 쉽게 옵션 변경 가능하도록 함.
 +
 +마지막으로 클라이언트 프로그램 아이콘 만들어서 추가하는 작업 완료.
 +
 +\\
 +\\
 +\\
 +
 +===== 23일 월요일 =====
 +
 +[Study]
 +
 +개발 잠시 접어두고, 인공지능 (Deep Learning) 공부 방법에 대해 알아 봄.
 +
 +일단, 인공지능 공부를 하는 목적을 명확히 하자면 내 연구의 비교 알고리즘으로 
 +
 +구현할 필요가 있을 수 있고, 추후에 있을 CRC 과제에서 딥러닝을 사용한 개발을
 +
 +진행 할 수 도 있기 때문. 그때 가서 공부하기에는 너무 늦기 때문에 지금부터 조금씩
 +
 +진행해 놓을 계획. 공부할 material은 많이 있었지만 나는 실무 위주의 개념이 필요하므로
 +
 +홍콩과기대 김성훈 교수님이 youtube와 github에 공유해 놓으신 강의로 결정.
 +
 +이 강의에는 tensorflow를 실제로 사용하는 예제가 있어서 좋음.
 +
 +오늘은 기본적인 개론과 tensorflow configuration 정도 진행하고,
 +
 +machine learning 의 맨 처음으로 나오는 linear regression 은 수업시간에 하도 많이 했으므로
 +
 +빠르게 진도 뺌. tensorflow 사용해보면서 호기심이 많이 생겼고, 이걸로 뭔가 만들어보고 싶다는
 +
 +욕구가 생겼고 익숙하지는 않았지만 오랜만에 좌뇌를 많이 사용한 것 같아서 쫄깃한 재미가 있었음.
 +
 +\\
 +\\
 +\\
 +
 +===== 24일 화요일 =====
 +
 +[Research]
 +
 +하루종일 논문세미나와 CRC 그룹1 미팅 및 회식하느라 개인시간 거의 없었음. 개발이나 공부는 거의
 +
 +못하고 조만간 있을 논문세미나 준비를 조금 진행. 일단 논문 선정을 어떻게할까 고민했는데, 처음엔
 +
 +비교 알고리즘으로 제시할 Automatic Web Content Extraction by Combination of Learning and Grouping
 +
 +논문을 발표할까 하다가,, Content extraction에서 scoring 방법론과 관련한 논문을 survey 해서 발표하는
 +
 +것이 좋을것 같다고 판단. 이유는 어차피 내 연구를 진행하려면 조사해야하는 부분이기도 하고, (무엇보다 
 +
 +이 논문을 미리 발표하면 교수님의 기대치가 너무 높아질 것 같기때문에.) 내일은 괜찮은 논문 찾아서 
 +
 +서베이 진행해야 함.
 +
 +\\
 +\\
 +\\
 +
 +===== 25일 수요일 =====
 +
 +[Research]
 +
 +Web Content Extraction 에서의 Scoring 방법론 관련 논문을 찾아보니 생각보다 많이 나오지는 않음.
 +
 +google scholar 에서 2개 정도 논문 찾음
 +
 +(1) Evaluating Web Content Extraction Algorithm
 +
 +(2) Evaluation Content Extraction on HTML Documents
 +
 +첫 번째 논문은 스로베니아의 류블랴나 대학교에서 쓴 학위논문이고, 처음 abstrict에서는 web content
 +
 +extraction algorithm을 평가하는 방법에 대해 서베이한다는 것처럼 말하고 있어서 기대했는데
 +
 +막상 읽어보니 서베이라기보단 자신들의 한 가지 방법론을 제시하고 있고 다양한 알고리즘들에 대해서
 +
 +실험해보는 내용임. 여기서 제안하고있는 평가 방법은 Longest Common Subsequence (LCS)
 +
 +즉 HTML code 끼리 text 일치성을 비교하겠다는 의미. python으로 구현했고, 평가는 잘 된다고 나와있음.
 +
 +몇가지 아쉬웠던 점은 아이디어가 그닥 신선하지는 않았고, 정답 Set 만드는 과정이 명확하게 제시돼있지
 +
 +않음. 그리고 여기서 제시하는 것처럼 단순히 text로만 비교를 한다면 생기는 논리적 모순이 발생할 것 같음.
 +
 +예를들어 비슷한 구조를 갖고있는 생뚱맞은 2개의 영역이 있다고한다면 그 2개는 코드가 비슷할테고
 +
 +일치성이 높게 판단될 것. 단순한 LCS 비교로는 이러한 문제를 잡지 못할것임.
 +
 +영역과 면적을 비교한다던지 DOM Tree 를 비교하는 등 구조적인 특징을 잡아야 함.
 +
 +\\
 +\\
 +\\
 +
 +===== 26일 목요일 =====
 +
 +[Research]
 +
 +content extraction evaluating 논문 중 두번째 논문 읽음.
 +
 +이 논문은 독일의 마인츠 대학교에서 쓴 논문이고 content extraction 분야에서 유명한 논문들이
 +
 +reference 했음. 이전 논문에 비해서 좋았던 점은 정답 Set을 정한 기준과 방법에 대해 명확히 제시하고
 +
 +있고, 자신들이 개발한 프레임워크를 설명하는 부분도 있음.
 +
 +아직 다 읽어보지는 못했지만 여기서는 어떤 아이디어를 냈나 대충 읽어보니 여기도 역시
 +
 +text 비교를 하는것 같음. 이전 논문처럼 LCS를 사용했는지는 아직 모르겠지만 비교 단위를 characters, 
 +
 +sequence of words, bag of words, set of words 등으로 분류하는것을 보아 LCS는 아닌것 같음.
 +
 +text를 비교한다는 내용 보고 솔직히 기대는 안되지만 뒤에 실험부분이나 output format 같은 부분은
 +
 +도움이 될 것 같음.
 +
 +\\
 +\\
 +\\
 +
 +===== 27일 금요일 =====
 +
 +[Research]
 +
 +Evaluation Content Extraction on HTML Documents 논문 읽음.
 +
 +어제 대충 읽어봤던대로 이 논문은 content extraction 알고리즘을 평가하는 방법론에 대해 제시하고 있음.
 +
 +인상깊었던 점은 date set을 저장하는 방식이 html 방식이였고, 구체적인 내용을 정의하고있는 meta data를
 +
 +따로 만들었음. 그리고 정답 set을 정의하는 포맷은 text 형식이었음. recall과 precision을 계산하는
 +
 +metric이 text이기 때문에 정답 set 역시 text로 저장해도 무방함.
 +
 +나같은 경우에는 xpath로 저장했었는데 나도 만약 text 비교로 성능을 측정한다면 이와 같이 해도
 +
 +좋겠다는 생각을 함.
 +
 +프레임워크의 아키텍쳐같은 경우는 내가 만들고 있는 방식이랑 거의 유사했음. 다만 이 논문에서는
 +
 +알고리즘별로 연산시간도 뽑아내고 있으므로 단순한 server가 아닌 proxy server를 사용하고 있음.
 +
 +baseline으로 제시한 알고리즘은 Plain, BTE, Crunch, DSC, LQF 로 총 5가지.
 +
 +plain같은 경우는 저자가 proxy 서버에 남아있는 정보를 이용한다는 간단한 아이디어로 구현한것이고
 +
 +나머지 4가지는 기존에 제시된 CE 알고리즘들임.
 +
 +성능은 데이터셋의 종류에 따라 제각각이지만 대부분의 경우에서 DSC가 높게 측정됨.
 +
 +related work로 제시된 논문들은 몇가지 있었으나 딱히 흥미로운 것은 없었음.
 +
 +이 분야에서 성능을 측정하는 방법론에 대해 제시된게 거의 없는 것 같음.
 +
 +사실 이 논문의 저자도 CE 에서의 성능 측정을 IR 에서의 정보 검색률로 생각한 것임.
 +
 +
 +\\
 +\\
 +\\
 +
 +===== 30일 월요일 =====
 +
 +휴가
 +
 +\\
 +\\
 +\\
 +
 +===== 31일 화요일 =====
 +
 +휴가
 +
 +\\
 +\\
 +\\
 +
  
2018_07.1531814077.txt.gz · 마지막으로 수정됨: 2021/04/13 06:54 (바깥 편집)