eské vysoké u£ení technické v Praze Fakulta elektrotechnická Katedra po£íta£·
Bakalá°ská práce
Extrakce metadat z dokument·
Ond°ej Vodá£ek
Vedoucí práce:
Ing. Jan Koutník, Ph.D.
Studijní program: Elektrotechnika a informatika, strukturovaný, Bakalá°ský
Obor: Výpo£etní technika
13. £ervence 2009
iv
v
Prohlá²ení Prohla²uji, ºe jsem práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu. Nemám závaºný d·vod proti uºití tohoto ²kolního díla ve smyslu 60 Zákona £. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zm¥n¥ n¥kterých zákon· (autorský zákon).
V Praze dne 13. 7. 2009
.............................................................
vi
Abstract The aim of this thesis is a comparation of tools for metadata extraction from documents, in particular from PDF documents and integration of a selected library into DipRep - a system for archiving thesises at CTI. The result of this work will be a expansion of the DipRep system on the metadata extraction, which will then be prelled int the formular when entering new works.
Abstrakt Cílem bakalá°ské práce je porovnání nástroj· pro extrakci metadat z dokument·, zejména z dokument· formátu PDF a následné integrace vybrané knihovny do DipRepu - systému pro archivaci absolventských prací na VUT. Výsledkem práce bude roz²í°ení systému DipRep o extrakci metadat z dokument·, které pak budou p°edvypln¥ny ve formulá°i p°i vkládání nových prací.
vii
viii
Obsah 1 Úvod
1
2 Popis problému, specikace cíle
3
2.1
Metadata
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
DipRep
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.3
Diakritika v PDF dokumentech . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.4
Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
3 Analýza a návrh °e²ení 3.1
3.2
3
5
Porovnání dostupného software
. . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.1.1
Xena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.1.2
Metadata Extraction Tool . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.1.3
ExifTool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.1.4
Práce Martina Fúska . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
Struktura DipRepu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.2.1
Filtr pdf2txt
3.2.2
Filtr txt2meta
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
4 Realizace
7
4.1
Oprava diakritiky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
4.2
Extrakce metadat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
5 Testování
11
6 Záv¥r
13
Literatura
15
A Instala£ní p°íru£ka
17
B Seznam pouºitých zkratek
19
C Obsah p°iloºeného CD
21
ix
x
OBSAH
Seznam obrázk· 5.1
P°edvypln¥ný formulá° . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xi
12
xii
SEZNAM OBRÁZK
Seznam tabulek 5.1
Úsp¥²nost korekce £e²tiny a extrakce metadat . . . . . . . . . . . . . . . . . .
xiii
11
xiv
SEZNAM TABULEK
Kapitola 1
Úvod Cílem této práce je porovnat dostupný software pro extrakci metadat a pak jej implementovat do systému DipRep digitálního archivu diplomových, bakalá°ských a diserta£ních prací, vznikajících na VUT. Výsledkem práce a implementace by m¥lo být zjednodu²ení a zrychlení vkládání nových dokument·. Systém by se m¥l sám pokusit najít vhodné údaje, p°edvyplnit formulá° a tím uleh£it práci uºivateli.
1
2
KAPITOLA 1.
ÚVOD
Kapitola 2
Popis problému, specikace cíle 2.1
Metadata
Metadata jsou strukturovaná data o datech. [7] Metadata mohou mít r·znou podobu, mohou být zaznamenána na lístku nebo ve sv¥t¥ po£íta£· uloºena v souborech. Nej£ast¥ji se s metadaty setkáme u HTML dokument· na webových stránkách, kde je nap°íklad obsaºeno jméno autora, klí£ová slova £i popis dokumentu. Dal²ím p°íkladem metadat jsou Exif informace u digitálních fotograí. Tyto bývají více obsáhlé a kup°íkladu zde m·ºeme najít datum po°ízení, výrobce a model fotoaparátu, nastavení fotoaparátu blesk, clona £i citlivost. Samoz°ejm¥ mohou obsahovat i jméno autora nebo krátký popis. Velmi £asto se s metadaty setkáme u hudebních soubor· nap°. formát MP3 s ID3 tagy. Z nich m·ºe nap°íklad p°ehráva£ p°e£íst a zobrazit autora £i název skladby, hudební album ze kterého skladba pochází a mnoho dal²ích. V této práci se v²ak budu zabývat p°edev²ím dokumenty ve formátu PDF, které mohou taky obsahovat metadata. Jsou to nap°íklad název, autor, klí£ová slova. Metadata jsou v souborech uloºeny na denovaných místech, takºe aplikace k nim p°istupující, v¥dí, kde je mají hledat.
2.2
DipRep
DipRep je systém pro digitální archivaci diplomových, bakalá°ských a diserta£ních prací. Hlavním úkolem systému je ukládat práce a umoºnit je prohlíºet a vyhledávat v nich. Aby v nich mohl systém vyhledávat, pot°ebuje v¥d¥t o jaké dokumenty se jedná, jejich názvy, autory a obsahy metadata. Vzhledem k tomu, ºe z nahrávaných dokument· nelze získat v²echny pot°ebné údaje, je pot°eba p°i vkládání práce do systému tyto údaje vyplnit.
2.3
Diakritika v PDF dokumentech
Znaky s diakritikou jsou ob£as v PDF dokumentech vysázeny jako dvojice znak· samostatné písmeno a diakritické znaménko, které jsou pak posunuty na stejnou pozici. Tato skute£nost pak zp·sobuje problémy p°i p°evodu PDF dokumentu na text. Tímto problémem se jiº zabýval Vojt¥ch Sidek ve své práci Oprava diakritiky v PDF dokumentech [5].
3
4
2.4
KAPITOLA 2.
POPIS PROBLÉMU, SPECIFIKACE CÍLE
Cíl práce
Jak jsem jiº zmínil, p°i vkládání práce do DipRepu je pot°eba vyplnit formulá° s údaji o práci. V¥t²inou se v²ak jedná o data a údaje, které jsou ve vkládaném dokumentu obsaºeny. Proto by bylo rozumné uºivateli uleh£it práci kopírování/p°episování dat z dokumentu. V ideálním p°ípad¥ by m¥l systém v²echna pot°ebná data najít a uºivatele jen nechat a potvrdit formulá°. N¥které pot°ebné údaje v²ak nejsou v dokumentech uloºeny jako metadata a proto je nelze jednodu²e p°e£íst. P°esto se systém pokusí tato data získat a nabídnout uºivateli ve formulá°i. Pro správnou moºnost extrakce bude také do DipRepu implementován PDFCorrector[5].
Kapitola 3
Analýza a návrh °e²ení 3.1 3.1.1
Porovnání dostupného software Xena
Program je dostupný na adrese
http://xena.sourceforge.net/.
Jedná se o nástroj slou-
ºící k p°evodu r·zných formát· soubor· do otev°ených formát· vhodných k dlouhodobému ukládání - normalizaci. Jedná se o opensource program napsáný v jazyku Java. Xena zvládá na vstupu ²irokou ²kálu formát· soubor·: od textových (prostý text, soubor RTF, dokument Microsoft Oce - doc) aº po multimediální - obrázky (JPG, GIF, PNG) a audio (FLAC, MP3, WAV). Výstupem normalizace je soubor ve formátu XML. Tento soubor obsahuje informace o procesu normalizace a p·vodní soubor. Z tohoto programu se mi v²ak nepoda°ilo získat ºádná metadata p·vodního souboru a proto mi nep°ijde jako vhodný nástroj pro ú£ely této práce.
3.1.2
Metadata Extraction Tool
Tento program je dostupný na adrese
http://meta-extractor.sourceforge.net/.
Meta-
data Extraction Tool je velmi podobný nástroji Xena. Program op¥t zvládá celou °adu vstupních formát·. Výstupem je taktéº XML soubor, který jiº obsahuje n¥jaká metadata ze vstupního souboru. U testovaných soubor· (3 soubory typu PDF) jsem z výstupního souboru byl schopen zjistit datum vytvo°ení, velikost souboru a PDF verzi. Program lze roz²i°ovat o vstupní adaptéry, které se starají o extrakci metadat z vstupních soubor·. Dal²í údaje by tedy ²ly získat po napsání nového nebo roz²í°ení stávajícího adaptéru.
3.1.3
ExifTool
ExifTool je dostupný na adrese
http://www.sno.phy.queensu.ca/~phil/exiftool/. Jedná
se o perlový program pro £tení a zápis metadat r·zných formát· soubor·. Tento nástroj dokáºe z PDF souboru p°e£íst datum, po£et stránek, PDF verzi a pokud jsou metadata vypln¥na tak i autora, název a klí£ová slova. Vzhledem k tomu, ºe se autor ani název nejsou v¥t²inou v PDF dokumentech vypln¥ny, nebo jsou vypln¥ny nesprávn¥, nemá podle mého názor cenu se tímto nástrojem zabývat.
5
6
3.1.4
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
Práce Martina Fúska[3]
Jedná se o bakalá°skou práci Martina Fúska s názvem Automatické zpracování PDF dokument· (https://dip.felk.cvut.cz/browse/pdfcache/fusekm1_2006bach.pdf). Tento nástroj hledá metadata p°ímo v textu dokumentu. Vzhledem k tomu, ºe program byl napsán p°ímo pro systém ukládání studentských prací, je v porovnání s ostatními vý²e zmín¥nými nástroji nejvhodn¥j²í.
3.2
Struktura DipRepu
Pro p°evod soubor· mezi r·znými formáty obsahuje DipRep sadu ltr·. Ty se nacházejí v balí£ku
diprep.filterclasses.
Ten obsahuje n¥kolik t°íd, kdy kaºdá t°ída reprezentuje
jeden ltr, tedy p°evod z jednoho formátu do druhého. V této práci se budu zabývat pouze ltry pro p°evod PDF dokument· na text a ltrem pro vyhledávání metadat v textu.
3.2.1
Filtr pdf2txt
P°evod PDF dokumentu na text je reprezentován t°ídou je pouºíván opensource program
pdftotext.
FilterClassPDF2TXT.
Pro p°evod
Filtr bude pot°eba roz²í°it o PDFCorrector[5]
tak, ºe p°ed samotným p°evodem prob¥hne oprava diakritiky.
3.2.2
Filtr txt2meta
Tento ltr je realizován t°ídou
FilterClassTXT2META,
která slouºí pro vyhledávání meta-
dat v textu. V sou£asné implementaci umí t°ída najít pouze abstrakt práce, pokud jsou v dokumentu obsaºeny. Do této t°ídy implementuji program z práce Automatické zpracování PDF dokument· [3]. Filtr by tedy m¥l být schopen hledat i dal²í metadata název, autora a dal²í.
Kapitola 4
Realizace 4.1
Oprava diakritiky
Oprava diakritiky se bude provád¥t jen ve ltru pdf2txt t°ída
diprep.filterclasses,
FilterClassPDF2TXT v balíku
takºe nahraný PDF dokument z·stane nezm¥n¥n, ale úsp¥²nost
správného p°evodu na text se zvý²í. Zm¥n¥ný kód vypadá následovn¥:
public void process(){ ... Process p; try { // oprava diakritiky File temp = File.createTempFile("text", ".pdf"); AccentCorrector ac = new AccentCorrector(); String srcfile = doc.getDocumentFile().getAbsolutePath(); ac.doIt(srcfile, temp.getAbsolutePath()); p = Runtime.getRuntime().exec("pdftotext " + temp.getAbsolutePath() + " " + newDoc.getDocumentFile().getAbsolutePath()); p.waitFor(); temp.delete(); } catch (IOException ex) { ex.printStackTrace(); } catch (InterruptedException ex) { ex.printStackTrace(); } ... } Nejd°íve si vytvo°íme do£asný soubor metodou t°ídy
AccentCorrector
createTempFile, vytvo°íme nový objekt doIt s parametry cesty k nahranému
a zavoláme jeho metodu
souboru a cesty k do£asnému souboru. Opravený PDF dokument pak p°edáme programu
pdftotext.
Nakonec smaºeme opravený dokument, který jiº není pot°eba.
7
8
KAPITOLA 4.
4.2
REALIZACE
Extrakce metadat
Extrahování metadat probíhá ve ltru, který je p°edstavován t°ídou Upravená metoda
process
FilterClassTXT2META.
vypadá následovn¥:
public void process(){ ... if (!filterProcessor.documentExists(newDoc)){ /* if output document not exists */ /* convert file, write output file */ System.out.println("doc not exist - writing file"); Finder finder = new Finder(System.getProperty("user.home"). ".DipRep/MetaExtractorConfig/"); String text = readTextFile(doc.getDocumentFile()); finder.najdiMetaData(text); Metadata meta = new Metadata(); meta.setStringValue("abstrakt", finder.getAbstract("cs")); meta.setStringValue("abstract", finder.getAbstract("en")); meta.setStringValue("title", finder.getTitle()); meta.setStringValue("creator", finder.getAuthor()); meta.setStringValue("year", finder.getYear()); meta.setStringValue("supervisor", finder.getSupervisor()); switch (finder.getType()) { case 1: meta.setStringValue("typeId", DocumentType.BACH.toString()); break; case 2: meta.setStringValue("typeId", DocumentType.DIPL.toString()); break; } try { meta.saveToNativeFile(newDoc.getDocumentFile()); } catch (MetadataNotSavedException ex) { }
}
/* ouput document */ outputDocuments.add(newDoc); }else{ System.out.println("doc "+newDoc+" exists - not writing"); }
Nejd°íve je pot°eba vytvo°it nový objekt t°ídy
Finder.
Konstruktor dostane jako jediný
parametr cestu ke kongura£ním soubor·m. Následn¥ zavoláme jeho metodu
najdiMetaData,
4.2.
EXTRAKCE METADAT
9
která nám v zadaném textu najde metadata. Nakonec nalezená metadata uloºíme do objektu t°ídy
Metadata,
která je pak uloºí do souboru.
10
KAPITOLA 4.
REALIZACE
Kapitola 5
Testování B¥h systému DipRep jsem testoval na serveru GlassFish v2.1 [1] . Pro testování funk£nosti korekce £e²tiny a extrakce metadat jsem pouºil 10 náhodn¥ vybraných prací ze sou£asného DipRepu, které jsem postupn¥ nahrával. Následující tabulka ukazuje úsp¥²nost provedených operací: p°evod na text
extrakce metadat
angelj1_2009bach.pdf
X
4,5 / 7
aufarm1_2009bach.pdf
X
3 / 7
kobetv1_2009bach.pdf
X
3 / 7
lambep1_2009dipl.pdf
X X
3,5 / 7
pecino1_2009dipl.pdf
X
2 / 7
travnj2_2009bach.pdf
3 / 7
treso_2009dipl.pdf
X X
vlcekj2_2009dipl.pdf
X
2 / 7
zittar1_2009dipl.pdf
X
3 / 7
lysikk1_2009bach.pdf
4 / 7
4 / 7
Tabulka 5.1: Úsp¥²nost korekce £e²tiny a extrakce metadat První sloupec obsahuje jméno práce. V druhém sloupci je zda se poda°ilo p°evést dokument na text se správnou diakritikou a v posledním sloupci je kolik se poda°ilo extrahovat polí. Porovnával jsem sedm polí:
•
jméno autora
•
jméno vedoucího
•
rok vzniku
•
název
•
název anglicky
•
abstrakt
11
12
KAPITOLA 5.
•
TESTOVÁNÍ
abstrakt anglicky
P°evod na text se úsp¥²n¥ poda°il v 50% p°ípad·. V ostatních byly místo znak· s diakritikou znaky úpln¥ jiné, nap°íklad místo malého £ byl ve výsledném textu symbol libry ¿. Najít správná metadata se poda°ilo asi v 46% p°ípad·. V n¥kterých p°ípadech se poda°ilo najít metadata i p°esto, ºe se dokument nepoda°ilo správné p°evést na text. Nejv¥t²í úsp¥²nost hledání m¥l abstrakt (£esky i anglicky) a rok vzniku práce. Pokud budeme porovnávat úsp¥²nost jako celek, tedy správn¥ extrahovaná data a se správnou diakritikou, dostáváme úsp¥²nost kolem 40%. Následující obrázek zachycuje p°edvypln¥ný formulá°, v tomto p°ípad¥ po neúsp¥²né oprav¥ diakritiky.
Obrázek 5.1: P°edvypln¥ný formulá°
Kapitola 6
Záv¥r Práce se poda°ilo splnit v rozsahu zadání. Korekce diakritiky i extrakce metadat fungují v rámci moºností pouºitých knihoven. Dal²ím vylep²ení funk£nosti by ²lo tedy dosáhnout roz²í°ením a vylep²ením knihoven PDFCorrectoru a MetaExtractoru. U p°evodu n¥kterých PDF dokument· na text jsou n¥které znaky s diakritikou ²patn¥ p°evedeny a objevují se místo nich jiné znaky. Tento problém je odli²ný od problému, který je °e²en v PDFCorrectoru[5]. Zobrazení takovýchto dokument· probíha v²ak bez problém·. Pokud by se poda°ilo vy°e²it tento problém, jist¥ by se zvedla i úspe²nost extrakce metadat. Nicmén¥ by se ur£it¥ dali najít dal²í moºnosti vylep²ení MetaExtractoru.
13
14
KAPITOLA 6.
ZÁV
R
Literatura [1] R. Bedná°. Glasssh.
https://glassfish.dev.java.net/. [2] R. Bedná°. Latex manual.
http://www.cstug.cz/latex/lm/frames.html,
stav z 23. 5. 2009.
[3] M. Fúsek. Automatické zpracování pdf dokument·, 2006.
https://dip.felk.cvut.cz/browse/pdfcache/fusekm1_2006bach.pdf. [4] P. Harvey. Exiftool.
http://www.sno.phy.queensu.ca/~phil/exiftool/. [5] V. Sidek. Oprava diakritiky v pdf dokumentech, 2008.
https://dip.felk.cvut.cz/browse/pdfcache/sidekv1_2009bach.pdf. [6] Metadata extraction tool.
http://meta-extractor.sourceforge.net/,
stav z 5. 3. 2009.
[7] Wikipedia: Metadata.
http://cs.wikipedia.org/wiki/Metadata,
stav z 12. 6. 2009.
[8] Xena.
http://xena.sourceforge.net/,
stav z 5. 3. 2009.
15
16
LITERATURA
Dodatek A
Instala£ní p°íru£ka K spu²t¥ní DipRepu je pot°eba J2EE aplika£ní server nap°íklad GlassFish. V adresá°i
dist
DipRepu najdeme war archiv, který m·ºeme nahrát na server. Dále je pot°eba umístit sloºku
.DipRep do domovského adresá°e uºivatele, pod kterým server b¥ºí. V této sloºce se nachází kongura£ní soubor globalconfig.xml. V n¥m je pot°eba upravit jednotlivé cesty. Nakonec je pot°eba správn¥ umístit adresá° font, který obsahuje písma pro PDFCorrector. Nap°íklad na serveru GlassFish jsem ho musel nahrát do adresá°e
domains/domain1/config.
Pokud bychom cht¥li DipRep upravovat a sestavovat je pot°eba n¥kolik knihoven. Ty se bu¤ nacházejí v adresá°i
lib
DipRepu. Dal²í pot°ebné knihovny: MyFaces, Tomahawk,
PDFCorrector a MetaExtractor se nacházejí v adresá°i
17
lib
na p°iloºeném disku.
18
DODATEK A.
INSTALANÍ PÍRUKA
Dodatek B
Seznam pouºitých zkratek PDF
Portable Document Format
XML
Extensible Markup Language
HTML MP3
HyperText Markup Language
MPEG-1 Layer III - formát zvukových soubor·
FLAC WAV
Free Lossless Audio Codec - zvukový kodek Waveform audio format - zvukový formát
JPG
formát obrázkových soubor·
GIF
Graphics Interchange Format
PNG RTF
Portable Network Graphics Rich Text Format
19
20
DODATEK B.
SEZNAM POUITÝCH ZKRATEK
Dodatek C
Obsah p°iloºeného CD DipRep - aplikace DipRep |-- build |-- build.xml |-- dist |-- lib - knihovny pro DipRep |-- src - zdrojové kódy | |-- conf | `-- java | `-- diprep | |-- archive | |-- exceptions | |-- filterclasses - zdrojové kódy ltr· | | |-- FilterClass.java | | |-- FilterClassPDF2TXT.java - ltr pdf2txt | | |-- FilterClassTXT2META.java - ltr txt2meta | |-- ldap | `-- web `-- web Extrakce_fusek - program M. Fúska[3] |-- Java |-- Konfugurace |-- PHP `-- XML MetaExtractor - program M. Fúska jako projekt NetBeans |-- build |-- fonts `-- src PDFCorrector - PDFCorrector V Sidka[5] |-- build `-- src fonts - písma pro PDFCorrector testovaci_prace - práce pouºité pro testování úsp¥²nosti
21
22
text `-- Extrakce.pdf lib |-- MetaExtractor | |-- MetaExtractor.jar |-- PDFCorrector | |-- PDFCorrector.jar |-- myfaces-core-1.2.7-bin `-- tomahawk12-1.1.9
DODATEK C.
OBSAH PILOENÉHO CD
- tato práce - dal²í knihovny pro DipRep