2015. 3. 12. 02:48

DocAr 에서 수집하는 문서는 웹 페이지(HTML), MS-Office 문서(파워포인트, 워드, 엑셀), 텍스트(text), PDF 등 다양하며 이러한 문서들의 원본 파일 자체와 추출한 색인 정보를 함께 저장해야 한다. 문서의 물리적인 속성을 나타내는 파일(File) 클래스에 대한 설계를 마친 후, 문서 클래스의 색인 속성에 대한 상세 설계를 진행한다. 문서의 색인 속성은 다양하며, 개별 속성에 대한 관련 기능 및 데이터 구조에 대한 설계가 필요하다.

 속성 명칭

 설명 

 제목

 원본 파일의 명칭 혹은 문서의 첫 단락에 표시된 제목, HTML의 title tag 혹은 게시물의 제목

 작성자

 문서의 최초 작성자 정보. 이름, ID, e-mail, homepage (facebook 등) 정보 

 작성 일시

 문서를 최초 생성한 일시 혹은 최종 변경 일시

 키워드

 문서의 핵심 혹은 요약된 정보를 나타내는 복수의 명사 

 요약

 문서의 핵심 부분 혹은 축약된 내용

 원본 링크

 웹 상에서 다운로드한 문서일 경우 웹 문서에 대한 링크

 문서 형식

  XML, PDF, Word 등 파일 포맷(format) 에 따른 유형


  • 제목 : 문서의 제목은 파일 형식(format)에 따라 명시적으로 추출할 수 있는 경우가 있고, 명시적으로 추출할 수 없는 경우가 존재한다. HTML 형식에서는 title 태그를 이용해 문서의 제목을 추출할 수 있지만, 대다수의 문서 형식은 명시적인 필드(field)가 지정되어 있지 않다. 따라서, 파일 형태로 존재할 경우에는 파일의 명칭을 제목으로 사용할 수 있다.

  • 작성자 : 문서의 작성자 정보는 일반적으로 문서 자체에서 추출할 수 없는 정보이다. 따라서, DocAr 에 문서를 등록할 때 작성자 정보를 입력 받거나, DocAr 사용자 정보를 작성자 정보로 활용할 수 있다. 작성자 정보는 하나 이상의 필드 (성명, e-mail 주소, 홈페이지 주소 등)로 이루어져 있으므로 별개의 클래스로 분리하는 것도 고려할 필요가 있다.

  • 작성 일시 : 파일 형태로 존재하는 문서는 파일의 생성(변경) 일시를 작성일시로 설정할 수 있다. 만일 문서의 생성일시를 정확히 확인할 수 없을 경우, DocAr에 등록하는 시점을 생성일시로 사용해야 한다.

  • 키워드 : 문서의 검색 정확도 향상 및 분류에 활용하기 위해 핵심 단어들을 입력 받는다. 문서를 분석해서 키워드를 추출하는 방법과 사용자가 직접 입력하는 방법 등을 고려할 수 있다.

  • 요약 : 검색 결과에 문서의 요약된 정보를 출력할 경우, 사용자가 원하는 문서인지 여부를 빠르게 파악할 수 있다. 문서의 앞 문단을 추출해서 자동으로 요약을 생성하는 방법을 고려해 볼 수 있다.

  • 원본 링크 : 인터넷 등에서 다운로드 받은 문서인 경우, 해당 문서의 출처를 남겨두는 것은 향후에 문서가 갱신되었을 때 다시 다운로드 받을 수 있고, 관련 정보를 찾거나 유용한 웹 사이트 목록을 작성하는데 활용할 수 있다.

  • 문서 형식 : 문서의 포맷(format) 정보는 문서를 조회할 수 있는 프로그램을 선택 및 실행하기 위해 필요하다. 더불어 검색 시 특정 형식의 문서를 제한함으로써 검색의 정확도를 높일 수 있다. 문서 형식은 문자열 필드로 저장할 수도 있지만, 오류 혹은 부정확성를 방지하기 위해 - 예를 들어, html/htm/HTML 등 같은 타입을 다른 문자열로 입력할 수 있음 - 별개의 타입(enum 등)으로 분리하는 것이 낫다.

위와 같은 색인 속성 설계를 통해 확인할 수 있는 통찰(insight)은 다음과 같다.

  • 문서(Document) 클래스의 속성 중에서 일부 속성은 기본형(primitive type)으로 정의(선언)할 수 없고, 별개의 타입으로 분리해야 한다.
  • 물리적인 파일을 입력 받아 문서를 생성하기 위해서는 다양한 추출/분석/사용자 입력 등의 전처리(preprocessing) 및 가공 작업을 필요로 한다는 것을 알 수 있다. 따라서, 물리적 파일 정보를 인자로 입력 받아 문서 객체를 생성하는 생성자를 만들기 보다는 문서 객체 생성을 수행하는 클래스(빌더, 팩토리 등)를 분리하는 것이 유리하다.
  • 속성의 일부를 분리하고, 문서 생성에 필요한 전처리 작업 등 추가 요건이 발생한다 즉, 설계는 한번에 완료되는 것이 아니라, 반복(iteration)을 통해 정교화 시키는 과정을 거쳐야만 한다.

각 속성에 대한 구체적인 데이터 타입 설계를 진행한다.


  • 제목 : 문서의 제목은 문자열(String) 타입으로 충분하다, 자바의 문자열 집합(character-set)은 유니코드(Unicode)를 사용하기 때문에 다국어 지원 또한 문제는 없다. 다만, 직렬화(serialization) 처리 시에는 인코딩(encoding)에 유의해야 한다.

  • 작성자 : 작성자 정보는 성명, ID, 이메일 주소 등의 기본형 데이터 항목들을 구성된 복합(complex type)이므로 별도의 클래스를 선언하는 것이 타당하다. 타입 명칭은 Writer로 선언한다.

  • 작성 일시 : 자바에서 날짜 타입은 java.util.Date 와 java.sql.Date 2가지가 제공된다. util 패키지에 선언된 것은 오로지 날짜만 포함할 수 있고 시/분/초 정보는 담을 수 없다. 작성 시간까지 구분해야 한다면 java.sql.Date 클래스를 사용해야 한다. DocAr 에서는 java.sql 패키지에 포함된 타입을 사용한다.

  • 키워드 : 키워드는 복수의 단어로 구성된다. 하나의 문서에 설정된 키워드들은 중복되지 않아야 하므로, 중복을 허용하지 않고 복수의 문자열을 담을 수 있는 타입을 사용해야 한다. Set<String> 타입을 사용하면 된다.

  • 요약 : 문서의 핵심 내용을 짧게 정리한 요약은 긴 문자열이며, 태그(tag) 등을 포함하지 않는 문자열이어야 한다. String 타입으로 선언한다.

  • 원본 링크 : 외부의 웹 사이트 혹은 내부의 파일 시스템의 파일 주소(혹은 경로)를 모두 포함할 수 있는 주소 체계는 URL이다. java.net.URL 타입으로 선언한다.

  • 문서 형식 : 다양한 문서 타입이 존재하나 현실적으로 모든 유형의 문서 형식을 읽고 쓸 수는 없다. 일반적으로 공개된 문서 형식은 HTML, XML, PDF, MS-Word, MS-Powerpoint, MS-Excel 등이다. 시스템 기능 개선에 따라 향후에 지원할 수 있는 문서 형식이 늘어날 수 있지만, 개선이 빈번하게 발생하는 것은 아니기 때문에 지원 가능한 문서 형식이 고정되어 있다고 여겨도 무방하다. 따라서 문서 형식은 enum 타입으로 선언한다.




Posted by 곽중선