110 likes | 244 Views
Extrakcia metadát zo zborníkov z WIKT o článkoch, referenciách a citáciach. Vyh ľadávanie informácii. Lukas Tursky VI 2012/2013. Zadanie. Viacero publikovaných príspevkov sa zhlukuje do jedného veľkého zborníka
E N D
Extrakcia metadát zo zborníkov z WIKT o článkoch, referenciách a citáciach Vyhľadávanie informácii Lukas Tursky VI 2012/2013
Zadanie • Viacero publikovaných príspevkov sa zhlukuje do jedného veľkého zborníka • Nechcený efekt v podobe straty jednotlivých metadát opisujúcich pôvodné príspevky • Cieľ: Parsovať veľké členité PDF dokumenty
Implementácia • 3 časti • Stiahnutie zborníkov – Crawler • Extrakcia navrhnutých metaúdajov – PdfBox • Indexovanie a zobrazenie – Lucene
Parsovanie a Extrakcia • PdfMI štruktúra pre ukladanie metainfo údajov • Parsovanie v skratke: • Odparsujem celé bloky s textom obsahujúcim metaúdaje • Extrahujem konkrétne metaúdaje
Parsovanie a Extrakcia - Postup 1 Pre každý pdf dokument (PDDocument) v zozname 2 Pre kadžú stranu pdf (PDPage) vykonaj 3.1 Zavolám resolveArticleFromPage - hľadám či je to prvá strana článku - Rozparsuj text - v rámci toho hľadaj text s najväčším fontom - Ak je to úvodná strana => zapamätaj si všetky bloky titulnej strany - Ak našiel nadpis s referenciami, tz. že koniec článku => extractBlockWithReferences, ulož všetky bloky od tohto nadpisu a setni endArticleFlag - Ak endArticleFlag => čo ak strana s referenciami pokračuje, tento jednorázový flag zabezpečí jej handling 3.2 Ak našlo komplet článok => extrahuj dáta z indentifikovaného článku 4 Prechádzaj extrahované bloky článku a exrahuj metaúdaje - TITLE - pos=0 - AUTORI - pos=1 - check if UVOD - check if ABSTRAKT - check if contains KLUCOVE SLOVA - co ak klucove slova v abstrakte? => zmaz ich odtial - check if containt "@" - blok obsahujuci EMAILY - kombinácia normalne ako simple@xxx.yy, alebo ako komplex mien cez {meno , meno2, ...}@xxx.yy - check if KONIEC / REFERENCIE - pridaj všetky zvyšné bloky
Hľadanie • Titulok • font titulku > MIN_FONT_HEIGHT && getY titulku < MAX_TITLE_Y && containsArticleStartSpecificStrings() && !containsArticleEndSpecificStrings() • Začiatok a Koniec • List<String> abstractSpecificString Arrays.asList("Abstract.", "Abstrakt.", "Abstract", "Abstrakt"); - u 100% určený začiatok • List<String> endSpecificString Arrays.asList("Literatúra", "Referencie", "Literature", "References", "Reference", "Použitá literatúra"); - u 90% určený koniec • Regexpy • Odstavce s textom • Jednoduchý a zložený formát emailu • Linky
Problémy pri parsovaní • Rôzny encoding článkov • Pre niektoré strany sa extrahuje text ako pre dvojstránku • Nadpis referencie byť chybne zaradený do bloku s nasledujúcim textom • Referencie na dvoch stranách • Úvodné prvky metadát članku sa nemusia vyskytovať všetky • Kľúčové slová môžu byť v rámci abstraktu, ale chcem ich samostatne
Indexovanie • Cez Lucene indexujem navrhnuté metainfo • Prehľiadanie cez Luke nástroj
Zhrnutie • Celkové výsledky veľmi dobré • Vytvorené všeobecnejšie riešenie pre extrakciu vedeckých článkov • Chyba by sa dala odstrániť zčasti jednotným generovaním PDF článkov