▶ Apache Tika 예제 테스트
- 다양한 문서에서 메타 정보와 컨텐츠를 추출하기 위해 사용할 수 있는 유용한 라이브러리는 아파치 Tika이다.
- Docar 프로젝트에 Tika를 적용을 위한 사전 검증으로서 프로젝트 환경 설정 및 예제 테스트를 수행한다.
▶ 프로젝트 환경 설정 및 예제 작성
- Maven 환경 설정
: 프로젝트 내에서 Tika를 사용하기 위해 의존성(dependencies)을 설정한다. 2015년 3월 기준, 아파치 Tika의 최신 버전은 1.7 이다.
12345678910111213141516<!-- [end] 아파치 Tika 라이브러리 -->
<
properties
>
<
tika.version
>1.7</
tika.version
>
</
properties
>
<!-- [start] 아파치 Tika 라이브러리 -->
<
dependency
>
<
groupId
>org.apache.tika</
groupId
>
<
artifactId
>tika-core</
artifactId
>
<
version
>${tika.version}</
version
>
</
dependency
>
<
dependency
>
<
groupId
>org.apache.tika</
groupId
>
<
artifactId
>tika-parsers</
artifactId
>
<
version
>${tika.version}</
version
>
</
dependency
>
- 예제 코드 작성
: MS Word 문서 파일 읽어들여, 메타 데이터를 검출하고 컨텐츠를 추출하는 예제는 다음과 같다.
12345678910111213141516171819202122232425262728293031323334353637383940package
docar.archive.extraction;
import
java.io.IOException;
import
java.io.InputStream;
import
org.apache.tika.exception.TikaException;
import
org.apache.tika.metadata.Metadata;
import
org.apache.tika.parser.AutoDetectParser;
import
org.apache.tika.parser.ParseContext;
import
org.apache.tika.parser.Parser;
import
org.apache.tika.sax.BodyContentHandler;
import
org.xml.sax.SAXException;
public
class
AutoDetectionExample {
public
static
void
main(
final
String[] args)
throws
IOException,
SAXException, TikaException {
Parser parser =
new
AutoDetectParser();
System.out.println(
"------------ Parsing an Office Document:"
);
extractFromFile(parser,
"/demo.doc"
);
}
private
static
void
extractFromFile(
final
Parser parser,
final
String fileName)
throws
IOException, SAXException,
TikaException {
long
start = System.currentTimeMillis();
BodyContentHandler handler =
new
BodyContentHandler(
10000000
);
Metadata metadata =
new
Metadata();
InputStream content = AutoDetectionExample.
class
.getResourceAsStream(fileName);
parser.parse(content, handler, metadata,
new
ParseContext());
for
(String name : metadata.names()) {
System.out.println(name +
":\t"
+ metadata.get(name));
}
System.out.println(String.format(
"------------ Processing took %s millis\n\n"
,
System.currentTimeMillis() - start));
System.out.println(
"------------ content of document\n"
+ handler.toString());
}
}
▶ 추가 고려 사항
- 다양한 문서 형식에서 추출할 수 있는 메타 데이터에서 '문서관리 시스템'에서 활용할 수 있는 유용한 후보(candidates)들은 다음과 같다. : "Content-Type", "Author", "Last-Modified", "Creation-Date", "title"
- "Content-Type" : 파일 형식 별 검색을 위해 필요한 정보이므로 필수 항목이다.
- "Author" : "작성자" 혹은 "저자" 정보는 MS-Office 등의 문서 형식에서 부정확한 경우가 많다. 예를 들어 타인이 작성한 문서를 복사 및 편집한 후 저장한 문서일 경우에는 원래 파일의 작성자 정보만이 남아 있게 된다. 따라서, 부수적인 정보로 취급해야 한다.
- "Creation-Date" : 문서의 생성일자는 특정 기간에 생성된 문서를 검색하는데 유용한 정보이다.
- "Last-Modified" : 문서의 최종 변경일자는 버전 관리를 위해 필요한 정보이다. 문서 저장소에 저장된 파일과 입력된 파일을 비교해서 입력된 파일의 변경일자가 저장소의 파일보다 나중인 경우에는 새로운 버전으로 문서 저장소에 추가해야 한다.
- "title" : 제목 또한 부정확한 정보가 될 수 있다. 앞서 작성자 정보와 마찬가지로 복사한 파일을 편집한 후에 저장하면 이전 작성자의 정보가 그대로 남아있게 된다.
▶ 참조 링크 및 이클립스 프로젝트 (소스 다운로드)